加特林循环中基于条件的退出

mu1*_*988 2 performance-testing gatling


我试图在加特林请求中实现的步骤:
1. 在循环中点击请求。
2. 将 JSON 响应中的“status”值保存到“respStatus”中
3. 将“respStatus”设置为会话变量“workStatus”
4. 递归检查会话变量“workStatus”的值,并在其值发生变化时退出创造其他任何东西。

这是我的代码。下面这个请求在第一次迭代后停止执行,检查响应正文显示 JSON 响应中“创建”的值在停止时没有改变。代码有什么问题或者有其他替代方法可以实现此目的吗?

.doWhile(session => !session(workStatus).as[String].equal("creating"),"index"){
  exec(http("Request1")
    .get(<URL goes here>)
    .header(<Headers in a map>)
    .check(jsonPath("$..status").saveAs("respStatus")))
    .exec(session => session.set("workStatus","${respStatus}"))
    .pause(10)
}.pause(10)
Run Code Online (Sandbox Code Playgroud)

Sté*_*LLE 5

几个错误:

\n\n
    \n
  1. 加特林 EL 使用无效
  2. \n
\n\n
session => session.set("workStatus","${respStatus}")\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如文档中所解释的

\n\n
\n

此表达式语言仅适用于传递给\n Gattle DSL 方法的字符串值。当实例化加特林模拟时,此类字符串仅被解析一次。

\n\n

例如,queryParam("latitude", session => "${latitude}") 不会\xe2\x80\x99t\n 工作,因为参数不是字符串,而是返回字符串的函数。

\n
\n\n
    \n
  1. respStatus你从到 的副本workStatus毫无用处。

  2. \n
  3. 正确的语法第 1 行是session("workStatus"), 不是session(workStatus)

  4. \n
  5. 在 Scala 中,您会使用==,而不是equals

  6. \n
  7. 请注意 jsonPath 中的通配符路径会导致完整的 JSON 树扫描。如果可能,并且性能是一个问题,您最好使用精确路径。

  8. \n
  9. JsonPath 在当前状态下是失败的,请阅读这篇文章。如果可能,您应该切换到 JMESPath。

  10. \n
  11. 你需要headers的不是header传递地图。

  12. \n
\n\n
.doWhile(session => !session("workStatus").as[String].equal("creating"),"index"){\n  exec(http("Request1")\n    .get(<URL goes here>)\n    .headers(<Headers in a map>)\n    .check(jsonPath("$..status").saveAs("workStatus")))\n    .pause(10)\n}.pause(10)\n
Run Code Online (Sandbox Code Playgroud)\n