You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gatling性能测试启动失败:抛出java.lang.NoSuchFieldError: DNT异常

Gatling集成SpringBoot项目时出现NoSuchFieldError: DNT错误

我正尝试编写一个Gatling示例性能测试,该测试在独立Maven项目中可正常运行,但集成到现有SpringBoot项目后无法工作。系统能识别Simulation测试,但选择选项1或2后立即崩溃,抛出如下错误:

02:32:40.519 [main] INFO  i.g.c.config.GatlingConfiguration$ - Gatling will try to load 'gatling.conf' config file as ClassLoader resource.
02:32:41.258 [GatlingSystem-akka.actor.default-dispatcher-5] INFO  akka.event.slf4j.Slf4jLogger - Slf4jLogger started
02:32:49.267 [main] ERROR io.gatling.app.Gatling$ - Run crashed
java.lang.NoSuchFieldError: DNT
    at io.gatling.http.HeaderNames$.<clinit>(Headers.scala:44)
    at io.gatling.http.HttpDsl.$init$(HttpDsl.scala:52)
    at io.gatling.http.Predef$.<clinit>(Predef.scala:19)
    at io.gatling.javaapi.http.internal.HttpCheckBuilders$.<clinit>(HttpCheckBuilders.scala:24)
    at io.gatling.javaapi.http.internal.HttpCheckBuilders.status(HttpCheckBuilders.scala)
    at io.gatling.javaapi.http.HttpDsl.status(HttpDsl.java:142)
    at com.mastercard.perf.ClaimTest.<init>(ClaimTest.java:20)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at io.gatling.app.SimulationClass$Java.params(SimulationClass.scala:35)
    at io.gatling.app.Runner.run(Runner.scala:59)
    at io.gatling.app.Gatling$.start(Gatling.scala:90)
    at io.gatling.app.Gatling$.fromMap(Gatling.scala:44)
    at io.gatling.app.Gatling.fromMap(Gatling.scala)
    at com.mastercard.perf.Engine.main(Engine.java:13)
02:32:49.315 [GatlingSystem-akka.actor.default-dispatcher-5] INFO  akka.actor.CoordinatedShutdown - Running CoordinatedShutdown with reason [ActorSystemTerminateReason]

这是一个SpringBoot项目,我编写了main方法来运行Gatling代码,相关类代码如下:

Engine类

import io.gatling.app.Gatling;
import io.gatling.core.config.GatlingPropertiesBuilder;

public class Engine {
    public static void main(String[] args) {


        GatlingPropertiesBuilder prop = new GatlingPropertiesBuilder()
                .resourcesDirectory(IDEPathHelper.mavenResourcesDirectory.toString())
                .resultsDirectory(IDEPathHelper.resultsDirectory.toString())
                .binariesDirectory(IDEPathHelper.mavenBinariesDirectory.toString());
        Gatling.fromMap(prop.build());
    }
}

IDEPathHelper类

import java.net.URISyntaxException;
import java.nio.file.Path;
import java.nio.file.Paths;

public class IDEPathHelper {

    static final Path mavenSourcesDirectory;
    static final Path mavenResourcesDirectory;
    static final Path mavenBinariesDirectory;
    static final Path resultsDirectory;
    static final Path recorderConfigFile;

    static {
        try {
            Path projectRootDir = Paths.get(IDEPathHelper.class.getClassLoader().getResource("gatling.conf").toURI()).getParent().getParent().getParent();
            Path mavenTargetDirectory = projectRootDir.resolve("target");
            Path mavenSrcTestDirectory = projectRootDir.resolve("src").resolve("test");

            mavenSourcesDirectory = mavenSrcTestDirectory.resolve("java");
            mavenResourcesDirectory = mavenSrcTestDirectory.resolve("resources");
            mavenBinariesDirectory = mavenTargetDirectory.resolve("test-classes");
            resultsDirectory = mavenTargetDirectory.resolve("gatling");
            recorderConfigFile = mavenResourcesDirectory.resolve("recorder.conf");
        } catch (URISyntaxException e) {
            throw new ExceptionInInitializerError(e);
        }
    }
}

主测试类ClaimTest

import io.gatling.javaapi.core.ScenarioBuilder;
import io.gatling.javaapi.core.Simulation;
import io.gatling.javaapi.http.HttpProtocolBuilder;


import static io.gatling.core.CoreDsl.*;
import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.http;
import static io.gatling.javaapi.http.HttpDsl.status;

public class ClaimTest extends Simulation {
    private HttpProtocolBuilder httpProtocol = http.baseUrl("http://reqree.in");

    private ScenarioBuilder users  = scenario("Test").exec(
            http("Giuven users")
                    .get("/2")
                    .check(
                            status().is(200)).
                    check(jsonPath("$.data.first_name").is("Janet"),status().is(200))
    ).pause(1);

    {
        setUp(users.injectOpen(atOnceUsers(1)).protocols(httpProtocol));
    }

}

恳请各位帮忙解决该问题,谢谢!


内容的提问来源于stack exchange,提问作者SlickTester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:47:54