【问题标题】:Condition based exit from a loop in Gatling加特林循环中基于条件的退出
【发布时间】:2020-05-17 05:46:15
【问题描述】:


我试图在我的加特林请求中实现的步骤:
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)

【问题讨论】:

    标签: performance-testing gatling


    【解决方案1】:

    几个错误:

    1. Gatling EL 使用无效
    session => session.set("workStatus","${respStatus}")
    

    作为explained in the documentation:

    此表达式语言仅适用于传递给的字符串值 加特林 DSL 方法。这样的字符串只被解析一次,当 正在实例化加特林模拟。

    例如 queryParam("latitude", session => "${latitude}") 不会 工作,因为参数不是字符串,而是一个函数 返回一个字符串。

    1. 您从respStatusworkStatus 的副本没有用。

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

    3. 在 Scala 中,您将使用 ==,而不是 equals

    4. 当心 jsonPath 中的通配符路径会导致完整的 JSON 树扫描。如果可能,并且性能是一个问题,您最好使用确切的路径。

    5. JsonPath is a failure in its current state, please read this post。如果可能,您应该切换到 JMESPath。

    6. 您需要headers,而不是header 来传递地图。

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

    【讨论】:

    • 谢谢斯蒂芬妮。真的很有帮助。
    猜你喜欢
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多