【问题标题】:JMeter - If Controller not working for certain string contains condition?JMeter - 如果控制器不适用于某些字符串包含条件?
【发布时间】:2019-01-13 01:40:44
【问题描述】:

背景:
我有一个返回如下响应的 API:

{
  "status": 1,
  "errorCode": null,
  "message": null,
  "data": [
    {
      "id": 33,
      "snapshotId": 2,
      "ceId": 29,
      "month": "Feb",
      "corpRcvPayAmt": 100000,
      "wthRcvPayAmt": -90000
    },
    {
      "id": 31,
      "snapshotId": 2,
      "ceId": 29,
      "month": "Jan",
      "corpRcvPayAmt": 0,
      "wthRcvPayAmt": 0
    }
  ]
}

data 节点的大小可以从 0 到 12(空到每月 1 个)不等。 data 的唯一常量字段是 "month" 节点。其他字段值正在更改。

目标:
我想做一个PUTPOST 请求,具体取决于data 中是否已经存在特定月份。

为此,我使用 Regular Expression Extractor 将整个 data 字段捕获到一个变量中,如下所示:

使用上面的示例响应,调用${data} 将给我{"id":33,"snapshotId":2,"ceId":29,"month":"Feb","corpRcvPayAmt":100000.00,"wthRcvPayAmt":-90000.00},{"id":31,"snapshotId":2,"ceId":29,"month":"Jan","corpRcvPayAmt":0.00,"wthRcvPayAmt":0.00}

现在使用这个字段,我只想做一个简单的 if 条件,像这样:如果 ${data} 包含 ${month} 做某事(PUT 请求)。我目前正在尝试这样做:

问题:
条件${__groovy("${data}".contains("Jan"))} 似乎不起作用。 我已经尝试过以下操作:

  • 将条件更改为${__groovy("${month}".contains("Jan"))} 只是为了查看语法是否正确。这工作得很好。
  • 在 if 控制器中添加一个调试采样器,使用条件 ${__groovy("${month}".contains("Jan"))} 打印 ${data}。这也会按预期打印数据。
  • 我还尝试对 if 条件使用各种 js 语法,但到目前为止,groovy 是最好的结果。

    有了这个,我可以确认以下内容:

  • ${month}${data} 被提取并正确存储
  • 字符串包含的 groovy 语法工作正常
  • 出于某种原因,条件${__groovy("${data}".contains("Jan"))} 不起作用。

    我在这里缺少什么?提前致谢。

  • 【问题讨论】:

      标签: jmeter performance-testing load-testing jmeter-3.2 blazemeter


      【解决方案1】:

      不要在 Groovy 脚本中将 JMeter Functions and/or Variables 引用为:

      1. 可能与GString Template有冲突
      2. 对于JSR223 Test Elements,它会导致编译缓存功能故障,从而降低性能
      3. 您的变量可能会简单地解析为导致 Groovy 脚本编译失败和/或故障的东西。您可以查看 jmeter.log 文件以了解实际的错误详细信息。

      因此,不要使用${data},而是使用vars.get("data")varsJMeterVariables 类实例的简写,这是从 Groovy 脚本中获取 JMeter 变量值的最佳方式。

      整个函数应该是这样的:

      ${__groovy(vars.get('data').contains("Jan"),)}
      

      另外请注意,最好使用JSON Extractor 从 JSON 响应中获取值。

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 1970-01-01
        • 2017-03-25
        • 1970-01-01
        • 2017-08-08
        • 1970-01-01
        • 1970-01-01
        • 2020-05-01
        • 1970-01-01
        相关资源
        最近更新 更多