我正在使用加特林(Gatling)测试一个系统,该系统需要两个连续的Post请求,例如R1和R2。这些Post请求具有不同的Json请求主体,但只有一个公共密钥“ ID”。因此,一个用户应按顺序执行R1-R2,并且应为每个用户生成一个新的随机ID。 R1中生成的此ID应该传递给R2,并因此在其请求正文中添加为ID密钥的值。
随机ID是根据R1请求在馈送器内部生成的:
val R1Id = Iterator.continually(Map("randId1" -> R1_requestBody.replace("0000000000", randomTokenGenerator.generateTokenID())))
val r1 =
scenario("R1Scenarios").feed(R1Id)
.exec(http("POST R1")
.....
.body(StringBody(session => """${randId1}""")).asJSON
现在,在R2中,我想提供的是要在R1的供稿器中生成ID值。
val R2Id = Iterator.continually(Map("randId2" -> R2_requestBody.replace("0000000000", ***Token generated in the first request***)))
val R2= {
scenario("R2 Scenarios")
.exec(R1.r1)
//calls the first scenario as R2 should be executed after R1
.feed(R2Id )
.exec(http("POST R2")
....
.body(StringBody(session => """${randId2}""")).asJSON
最后执行模拟:
val jsonScenario = R2.r2.inject(constantUsersPerSec(2) during (1 second))
setUp(jsonScenario)
.protocols(httpConf)
答案 0 :(得分:1)
您只能生成该随机ID,而不是在Feeder中生成整个主体,我们将其称为userToken
:
val tokenFeeder = Iterator.continually(Map(
"userToken" -> randomTokenGenerator.generateTokenID()
))
并在构建请求正文时将其替换:
.body(
StringBody(session => R1_requestBody.replace(
"0000000000",
session("userToken").as[String]
))
).asJSON
或更干净,更好-使用以下事实:加特林将包含${sessionAttributeName}
之类的占位符的每个字符串替换为该会话属性字符串值,而不是在您的正文模板中使用"0000000000"
占位符fe:
${userToken}
然后使用该模板作为正文,Gatling表达式语言将发挥作用:
val bodyTemplate ="""{
|"userName": "John Doe",
|"userToken": "${userToken}"
|}""".stripMargin