Search code examples
javascriptgroovyjmeterbeanshell

How to verify the returned JSON response is in sorting order?


I have an API to fetch the list of employee Name's in an organization and it supports order by clause. I invoked an API "get /employeeName?$ordeyby=name desc". I got the results like below,

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

I have parsed each name and stored into a variable of string type.

How can I verify using JAVA Script/BeanShell/Groovy, that the returned response is in descending order?

Can anyone please help here. Any of the above-mentioned languages is fine and I want this needs to be implemented in JMeter.

Thanks in advance.


Solution

    1. Add JSR223 Assertion as a child of the request which returns the above JSON
    2. Put the following code into "Script" area:

      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. That's it, in case of expected alphabetical descending order the sampler will be successful, otherwise you will get an error message indicating which name is expected and what is the actual one

    More information: