背景:
我有一个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"
节点。其他字段值正在更改。
目标:
我想执行PUT
或POST
请求,这取决于data
中是否已经存在特定月份。
为此,我使用正则表达式提取器将整个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"))}
只是为了查看语法是否正确。这样很好。
${__groovy("${month}".contains("Jan"))}
在if控制器内添加调试采样器以打印${data}
。这也会按预期打印数据。
以此我可以确认以下内容:
${month}
和${data}
被正确提取并存储
${__groovy("${data}".contains("Jan"))}
不起作用。
我在这里想念什么?预先感谢。
答案 0 :(得分:2)
在Groovy脚本中不要将JMeter Functions and/or Variables引用为:
因此,${data}
不是JMeterVariables类实例的简写,而不是使用vars.get("data")
来代替vars
,这是从中获取JMeter Variable值的最佳方法Groovy脚本。
整个功能应如下所示:
${__groovy(vars.get('data').contains("Jan"),)}
还要注意,最好使用JSON Extractor从JSON响应中获取值。