JMeter-如果控制器不为特定字符串工作,是否包含条件?

JMeter-如果控制器不为特定字符串工作,是否包含条件?,jmeter,performance-testing,load-testing,jmeter-3.2,blazemeter,Jmeter,Performance Testing,Load Testing,Jmeter 3.2,Blazemeter,背景: 我有一个API,它返回如下响应: { "status": 1, "errorCode": null, "message": null, "data": [ { "id": 33, "snapshotId": 2, "ceId": 29, "month": "Feb", "corpRcvPayAmt": 100000, "wthRcvPayAmt": -90000 }, {

背景:
我有一个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
    }
  ]
}
数据
节点的大小可以从0到12(空到每月1)。
数据的唯一常量字段是
“月”
节点。其他字段值正在更改

目标:
我想执行一个
PUT
POST
请求,这取决于
数据中是否已经存在特定月份

为此,我使用正则表达式提取器将整个
数据
字段捕获到一个变量中,如下所示:

在上面的示例响应中,调用
${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条件,比如:if
${data}
包含
${month}
做一些事情(PUT请求)。我目前正尝试这样做:

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

  • 将条件更改为
    ${{groovy(${month}).contains(“Jan”)}
    以查看语法是否正确。这个很好用。
  • 使用条件
    ${groovy(${month}).contains(“Jan”)}
    在if控制器内添加调试采样器,以打印
    ${data}
    。这也会按预期打印数据。
  • 我还尝试在if条件下使用各种js语法,但到目前为止,groovy是最好的

    据此,我可以确认以下内容:
  • ${month}
    ${data}
    被正确提取和存储
  • 字符串包含的groovy语法工作正常
  • 出于某种原因,条件
    ${{groovy(${data}).contains(“Jan”)}
    不起作用

    我错过了什么?提前感谢。

    不要在Groovy脚本中引用以下内容:

  • 这可能会与
  • 因为它会导致编译缓存功能故障,从而降低性能
  • 您的变量可能会简单地分解为导致Groovy脚本编译失败和/或故障的内容。您可以查看jmeter.log文件以了解实际的错误详细信息 因此,不要使用
    ${data}
    而是使用
    vars.get(“data”)
    vars
    是类实例的缩写,这是从Groovy脚本获取JMeter变量值的最佳方法

    整个函数应该如下所示:

    ${__groovy(vars.get('data').contains("Jan"),)}
    
    还要注意,最好使用它从JSON响应中获取值