如何在 json 请求中添加额外数据

How to add extra data in a json request

在我的 SOAP UI 中,我有两个步骤,一个 groovy 脚本步骤和一个 POST CRUD 方法的休息请求步骤。

在 groovy 脚本中,我正在创建一个名为 'adults' 的随机测试用例 属性。该值是2-5之间的随机值。

testRunner.testCase.setPropertyValue('adults', String.valueOf((int)Math.random()*5)+2);

以下是我对POST的休息要求:

{
  "xxx": "xxx",
  "ratePlanCode": "xxx"
  "roomOccupancies": [
    {
      "passengersInformation": [
        {
          "firstName": "Test",
          "lastName": "Tester",
          "isLeadPassenger": true,
          "age": 30
        },
      ]
    }
  ],
  "xxx": "xxx"
}

现在这个请求固定为1个成人乘客,但问题是如果我有多个乘客,我实际上需要"passengersInformation"下的多个乘客。所以实际上我需要为每个额外的成年人添加:

{
      "firstName": "Test",
      "lastName": "Tester",
      "isLeadPassenger": false,
      "age": 30
    },

所以我想的是乘客的名字,因为我们不允许重名,我们只是在名字和姓氏的末尾添加一个数字。其他两个字段我们可以保持不变。

所以我的问题是,我们如何根据从 groovy 脚本中随机选择的成人人数在请求中添加额外的乘客详细信息?

谢谢,

这是复制乘客的一种方法:请注意,我必须在 JSON 字符串中修复几个逗号(多余的和缺失的)。

import groovy.json.*
def jsonData = '''{
  "hotelArrivalDate": "2017-06-01T18:15:00",
  "ratePlanCode": "xxx=",
  "roomOccupancies": [
    {
      "passengersInformation": [
        {
          "firstName": "Test",
          "lastName": "Tester",
          "isLeadPassenger": true,
          "age": 30
        }
      ]
    }
  ],
  "holidaysBookingReference": "TestRef"
}'''
def n=1
def data = (new JsonSlurper()).parseText(jsonData)
def newPerson = data.roomOccupancies[0].
                     passengersInformation[0].
                     collectEntries {k,v -> 
                         ['firstName','lastName'].contains(k) ? [k,v+n] : [k,v]
                     }
data.roomOccupancies[0].passengersInformation << newPerson
jsonData = (new JsonBuilder(data)).toPrettyString()

结果

{
    "hotelArrivalDate": "2017-06-01T18:15:00",
    "ratePlanCode": "xxx=",
    "roomOccupancies": [
        {
            "passengersInformation": [
                {
                    "firstName": "Test",
                    "lastName": "Tester",
                    "isLeadPassenger": true,
                    "age": 30
                },
                {
                    "firstName": "Test1",
                    "lastName": "Tester1",
                    "isLeadPassenger": true,
                    "age": 30
                }
            ]
        }
    ],
    "holidaysBookingReference": "TestRef"
}