Объединение списков в Groovy - PullRequest
1 голос
/ 28 октября 2019

Я получил два набора значений с помощью экстрактора JSON в JMeter, который я хочу объединить. Позвольте мне привести ниже пример для формата, который я хочу использовать.

Ниже приведены два набора захваченных значений:

Набор 1: [V2520 V2522 V2521 V2500 V2500]

Набор 2: [PL PL PL NP NP]

Итак, из приведенных выше наборов я ищу что-то вроде следующего значения, потому что тело, которое я должен отправить в последующем вызове, содержит комбинацию этих двух значений:

Ответ: ["V2520PL", "V2522PL", "V2521PL", "V2500NP", "V2500NP"]

Не могли бы вы помочь мне решить эту проблему в JMeter с помощью Groovy? Это JSON у меня есть:

{ "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"
      }
    ]
  }
]}}

Ответы [ 3 ]

1 голос
/ 29 октября 2019

Другой способ будет использовать transpose() и 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"]
1 голос
/ 29 октября 2019

Простой способ сделать это - объединить их, когда вы собираете значения из JSON при его разборе.

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"]
0 голосов
/ 29 октября 2019
  1. Добавить JSR223 PostProcessor как дочерний элемент запроса, который возвращает вышеуказанный JSON
  2. Поместить следующий код в область «Сценарий»:

    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. Вот и все, вы сможете получить доступ к сгенерированному значению как ${answer}, где это необходимо:

    enter image description here

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...