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

时间:2017-02-15 13:59:03

标签: groovy soapui

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

在groovy脚本中,我正在创建一个名为“adult”的随机测试用例属性。该值是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名成年乘客确定的,但问题是如果我有多名乘客,我实际上需要“乘客信息”下的多名乘客。所以我需要添加几乎每个额外的成年人:

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

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

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

谢谢,

1 个答案:

答案 0 :(得分:1)

这是复制乘客的一种方法:注意我必须在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"
}