[英]How can I use a Session attribute saved from a Check in an SSE request in Gatling?
请参阅底部的工作 Java 代码。
我正在尝试创建一个使用客户端 ID 的 SSE 连接测试场景,该客户端 ID 是对先前 REST POST 调用的响应。 这是斯卡拉代码:
package computerdatabase
import io.gatling.core.Predef._
import io.gatling.http.Predef._
class ssetest extends Simulation {
val registration = scenario("registration")
.exec(http("endpoint1")
.post("http://localhost:7070/api/register")
.body(RawFileBody("./Stocks.json")).asJson
.check(status is 201)
.check(jsonPath("$.id").saveAs("clientId")))
setUp(scn.inject(constantUsersPerSec(200).during(180))).assertions(global.failedRequests.count.is(0))
val sseConnection = scenario("ServerSentEvents")
.exec { session =>
sse("GET messages")
.connect("/api/sse/" + session("clientId").as[String])
.await(1)(
sse.checkMessage("ConnectionCheck").matching(substring("connection established"))
.check(bodyString.saveAs("InitialMessage"))
)
}
}
我想在第一个场景中使用保存在 Session 中的客户端 ID 来配置 SSE 端点以在第二个场景中连接。 目前,在运行场景时,我得到:
19:35:50.086 [ERROR] i.g.c.ZincCompiler$ - /home/dingo/Downloads/gatling-charts-highcharts-bundle-3.7.6/user-files/simulations/computerdatabase/SseSimulation.scala:21:15: type mismatch;
found : io.gatling.http.request.builder.sse.SseConnectRequestBuilder
required: io.gatling.commons.validation.Validation[io.gatling.core.session.Session]
.await(1)(
^
19:35:50.135 [ERROR] i.g.c.ZincCompiler$ - one error found
19:35:50.145 [ERROR] i.g.c.ZincCompiler$ - Compilation crashed
xsbt.InterfaceCompileFailed: null
at xsbt.CachedCompiler0.handleErrors(CompilerBridge.scala:183)
at xsbt.CachedCompiler0.run(CompilerBridge.scala:172)
at xsbt.CachedCompiler0.run(CompilerBridge.scala:134)
at xsbt.CompilerBridge.run(CompilerBridge.scala:39)
at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:192)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
at sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:247)
at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:182)
at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:163)
at sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:239)
at sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:163)
at sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:210)
at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:528)
at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:528)
at sbt.internal.inc.Incremental$.$anonfun$apply$5(Incremental.scala:177)
at sbt.internal.inc.Incremental$.$anonfun$apply$5$adapted(Incremental.scala:175)
at sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:461)
at sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:116)
at sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56)
at sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52)
at sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:263)
at sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:416)
at sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:503)
at sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:403)
at sbt.internal.inc.Incremental$.apply(Incremental.scala:169)
at sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:528)
at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:482)
at sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
... 5 common frames omitted
Wrapped by: sbt.internal.inc.CompileFailed: Compilation failed
at sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:335)
at sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:420)
at sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
at io.gatling.compiler.ZincCompiler$.doCompile(ZincCompiler.scala:218)
at io.gatling.compiler.ZincCompiler$.main(ZincCompiler.scala:226)
at io.gatling.compiler.ZincCompiler.main(ZincCompiler.scala)
我怎样才能解决这个问题?
免责声明:我不了解 Scala。
所采取的行动:
./src/gatling/java/computerdatabase
./src/gatling/resources/Stocks.json
中,并将代码中的文件路径设为绝对路径package computerdatabase;
import io.gatling.javaapi.core.ScenarioBuilder;
import io.gatling.javaapi.core.Simulation;
import io.gatling.javaapi.http.HttpProtocolBuilder;
import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.*;
public class SseSimulation extends Simulation {
HttpProtocolBuilder httpProtocol = http
.baseUrl("http://localhost:7070");
ScenarioBuilder scn = scenario("Scenario Name")
.exec(http("client id registration")
.post("/api/register/")
.body(RawFileBody("Stocks.json")).asJson()
.check(status().is(201))
.check(jsonPath("$.id").saveAs("clientId")))
.exec(
sse("open channel")
.connect(session -> "/api/sse/" + session.getString("clientId"))
);
{
setUp(scn.injectOpen(constantUsersPerSec(200).during(1)).protocols(httpProtocol)).assertions(global().failedRequests().count().is(0L));
}
}
免责声明:我不了解 Scala。
然后切换到Java。 Gatling 3.7(您正在使用)也支持它,官方文档和官方在线课程都很好地解释了它。
很多事情都错了:
scn
的东西。 请修复它,以便有人可以帮助您。ssetest
的类时,编译器会抱怨SseSimulation
中的错误。 再次,请先修复您的代码示例RawFileBody("./Stocks.json")
是错误的。 您不应该使用相对路径。 让 ClassLoader 解析您的文件。 这个Stocks.json
文件应该放在user-files/resources
中,你应该写RawFileBody("Stocks.json")
我建议你应该花一些时间阅读文档和查看在线课程,你最终会节省很多时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.