我对jmeter有一些奇怪的情况。想象一下,我们有一个json数组,其元素如下:
{
"id" : 123456,
"name": "TEST"
}
所以我想从具有id
的数组中获取随机元素。对于这种情况,我使用Json Path PostProcessor
表达式,如$.elements[?(@.id)]
但由于某些原因,我需要这个元素的索引。因此,我可以创建BeanShellPostProcessor
生成随机索引,然后使用与Json Path PostProcessor
这样的表达式相同的$.elements[${PARAM_ElementIndex}]
。
但在某些情况下,此数组可能为空,Json Path PostProcessor
将失败,异常如下:
jmeter.extractor.json.jsonpath.JSONPostProcessor: Error processing JSON content in PARAM_ResumeId, message:No results for path: $['elements'][0]['id']
所以可能有人可以建议任何解决方案
答案 0 :(得分:1)
我建议使用Groovy代替Beanshell:
所以,鉴于你有JSON响应,如:
{
"elements": [
{
"id": 123456,
"name": "TEST"
},
{
"id": 7890,
"name": "TEST2"
}
]
}
您可以使用JSR223 PostProcessor中的以下示例Groovy代码提取随机ID及其索引:
import groovy.json.JsonSlurper
import java.util.concurrent.ThreadLocalRandom
String response = prev.getResponseDataAsString()
def jsonSlurper = new JsonSlurper()
def json = jsonSlurper.parseText(response)
int size = json.elements.size
if (size > 0){
def randomIndex = ThreadLocalRandom.current().nextInt(size)
def value = json.elements.get(randomIndex).id
log.info('Index: ' + randomIndex)
log.info('Value: ' + value)
}
演示:
参考文献: