2016-12-01 90 views
0

我对jmeter有奇怪的情况。假设我们有一个JSON数组,像这样的元素:从JMeter Json路径中获取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']

所以可能是有人能提出任何解决方案

回答

1

我会建议,而不是BeanShell中使用Groovy为:

  • 乖巧的Groovy脚本可以编译成字节码,因此性能会更高
  • Groovy具有内置的JSON支持

所以给你JSON响应,如:

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) 
} 

演示:

{ 
    "elements": [ 
    { 
     "id": 123456, 
     "name": "TEST" 
    }, 
    { 
     "id": 7890, 
     "name": "TEST2" 
    } 
    ] 
} 

您可以使用在JSR223后处理器下面的例子Groovy代码的指数沿着提取随机ID

Groovy JSON JMeter

参考文献:

相关问题