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响应中获取值