如何确保JSON提取器总是从响应中获得正确的值?

如何确保JSON提取器总是从响应中获得正确的值?

问题描述:

我正在使用JSON提取器来解析响应,但有时响应会在给定索引中返回一个空值,那时候我想确保我们移动到另一个索引以获取正确的值。如何确保JSON提取器总是从响应中获得正确的值?

例如,我的JSON路径表达式是

$.CM[0].id 

当应用程序返回的0指数为空值,那个时候我得到这是在JSON提取提及的默认值,而不是我要的是每当我的脚本返回空值对于0索引,脚本应该搜索下一个索引中的值,即1。因此,当$ .CM [0] .id未能获取该值时,应用程序应该搜索$ .CM [1] .id并获取响应。

我应该怎么做?我应该使用某种bean shell脚本,还是应该尝试使用控制器?

我建议切换到JSR223 PostProcessorGroovy语言。

  1. 添加JSR223 PostProcessor中作为返回JSON响应
  2. 将下面的代码为“脚本”区域的请求的小孩:

    def ids = new groovy.json.JsonSlurper().parse(prev.getResponseData()).CM.ID 
    
    ids.eachWithIndex { id, i -> 
        log.info('Trying id: ' + i) 
        if (id.size() > 0) { 
         log.info('Found non-empty ID: ' + id) 
         vars.put('ID', id) 
         return true 
        } 
    } 
    
  3. 上面的代码就会把一个非空ID值(如果有的话)输入到ID JMeter变量中,您将能够在需要时将提取的值作为${ID}${__V(ID)}

参考文献: