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
相关产品推荐
相关产品推荐

