MNP
MNP

Reputation: 137

Concatenating lists in Groovy

I have captured two sets of values by using JSON extractor in JMeter which I want to concatenate. Let me give you an example below for the format which I want to use.

The following are the two sets of captured values:

Set 1: [V2520 V2522 V2521 V2500 V2500]

Set 2: [PL PL PL NP NP]

So from the above sets, I am looking for the something like the following value, because the body which I have to send in a subsequent call contains the combination of these 2 values:

Answer: ["V2520PL", "V2522PL", "V2521PL", "V2500NP", "V2500NP"]

Can you please help me how to solve this in JMeter using Groovy? This is the JSON I have:

{ "body": {
"responseObject": [
  {
    "benefitInfo": [
      {
        "procedureCode": "V2520",
        "modifier": "PL",
        "usage": "Dress",
        "authorizationID": null,
        "description": "ContactLensDisposable",
        "id": "96",
        "coPayAmount": "25"
      },
      {
        "procedureCode": "V2522",
        "modifier": "PL",
        "usage": "Dress",
        "authorizationID": null,
        "description": "ContactLensDisposableBifocal",
        "id": "98",
        "coPayAmount": "25"
      },
      {
        "procedureCode": "V2521",
        "modifier": "PL",
        "usage": "Dress",
        "authorizationID": null,
        "description": "ContactLensDisposableToric",
        "id": "97",
        "coPayAmount": "25"
      },
      {
        "procedureCode": "V2500",
        "modifier": "NP",
        "usage": "Dress",
        "authorizationID": null,
        "description": "ContactLens (Non Plan)",
        "id": "89",
        "coPayAmount": "0"
      },
      {
        "procedureCode": "V2500",
        "modifier": "NP",
        "usage": "Dress",
        "authorizationID": null,
        "description": "ContactLensConventional (Non Plan)",
        "id": "157",
        "coPayAmount": "0"
      }
    ]
  }
]}}

Upvotes: 1

Views: 160

Answers (3)

Dmitri T
Dmitri T

Reputation: 168082

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

    def answer = []
    def benefitInfos = com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$..benefitInfo')
    benefitInfos.each { benefitInfo ->
        benefitInfo.each { entry ->
            answer.add(entry.get('procedureCode') + entry.get('modifier'))
        }
    }
    vars.put('answer', new groovy.json.JsonBuilder(answer).toPrettyString())
    
  3. That's it, you will be able to access generated value as ${answer} where required:

    enter image description here

References:

Upvotes: 0

tim_yates
tim_yates

Reputation: 171104

Another method would be to use transpose() and join():

def r = new groovy.json.JsonSlurper().parseText(text).body.responseObject.benefitInfo[0]
def answer = [r.procedureCode, r.modifier].transpose()*.join()

assert answer == ["V2520PL", "V2522PL", "V2521PL", "V2500NP", "V2500NP"]

Upvotes: 1

doelleri
doelleri

Reputation: 19682

An easy way to do this is to combine them as you collect the values from the JSON when you parse it.

def json = new groovy.json.JsonSlurper().parseText(text)
def answer = json.body.responseObject[0].benefitInfo.collect { it.procedureCode + it.modifier }

assert answer == ["V2520PL", "V2522PL", "V2521PL", "V2500NP", "V2500NP"]

Upvotes: 1

Related Questions