如何验证返回的JSON响应是否在排序顺序中?

时间:2018-11-23 14:28:30

标签: javascript groovy jmeter beanshell

我有一个API来获取组织中员工姓名的列表,它支持order by子句。 我调用了一个API“ get / employeeName?$ ordeyby = name desc”。我得到如下结果,

{
"value":[
{
  "name":"Sam"
},
{
  "name":"Peter"
},
{
  "name":"Harry"
},
{
  "name":"Arnold"
}]
}

我已经解析了每个名称,并将其存储到字符串类型的变量中。

如何使用JAVA Script / BeanShell / Groovy验证返回的响应是降序排列的?

任何人都可以在这里提供帮助。以上任何一种语言都可以,我希望可以在JMeter中实现。

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用此方法在js中对其进行排序

var employers = [
    {
      "name":"Sam"
    },
    {
      "name":"Peter"
    },
    {
      "name":"Harry"
    },
    {
      "name":"Arnold"
    }];

    console.log(employers.sort(function(e1,e2){
    var alc = e1.name.toLowerCase(), blc = e2.name.toLowerCase();
      return alc > blc ? 1 : alc < blc ? -1 : 0;
    }));

答案 1 :(得分:1)

  1. JSR223 Assertion添加为返回上述JSON的请求的子项
  2. 将以下代码放入“脚本”区域:

    def expected = com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$..name').sort().reverse()
    
    new groovy.json.JsonSlurper().parse(prev.getResponseData()).value.eachWithIndex { def entry, int i ->
        if (!entry.name.equals(expected.get(i))) {
            AssertionResult.setFailure(true)
            AssertionResult.setFailureMessage('Order mismatch, expected: ' + expected.get(i) + ', got: ' + entry.name)
        }
    }
    
  3. 就是这样,如果预期的字母降序,则采样器将成功运行,否则,您将收到一条错误消息,指出预期的名称和实际的名称

更多信息: