在使用相对路径并将测试数据从json文件映射到请求时遇到挑战

时间:2017-11-15 17:10:50

标签: karate

使用相对路径和映射来自JSON文件的测试数据时,我遇到的问题很少。我有JSON POST请求和JSON格式的测试数据文件。

这是我正在使用的测试数据。

    {
  "name": "Test Data",
  "description": "Information's mainly related with Users",
  "testData": [
    {
      "Scenario1": {
        "givenName": "Joseph",
        "familyName": "George",
        "addressType": "Current",
        "lineOne": "BNRA-222, Kowdiar lane",
        "cityName": "Trivandrum",
        "countryID": "India",
        "postcode": "695006"
      }
    },
    {
      "Scenario2": {
        "givenName": "Sreenath",
        "familyName": "Bhasi",
        "addressType": "Current",
        "lineOne": "HSE-123, Karyavatom",
        "cityName": "Trivandrum",
        "countryID": "India",
        "postcode": "695552"
      }
    }
  ]
}

这是功能文件

    Feature: Test using the Data from a JSON file

    Background:
    * def baseJsonRequest = read('../requests/jsonrequest.json')
    * def baseData = read('../data/sampledata.json')
    * def endPointURL = endPointURI + path

   Scenario: A sample scenario to test the data parametrization

    Given url endPointURL
    And request baseJsonRequest
    * set baseJsonRequest.autoRequest.applicants.applicant.specifiedPerson.givenName = baseData.testData[*].Scenario1.givenName
    * set baseJsonRequest.autoRequest.applicants.applicant.specifiedPerson.familyName = baseData.testData[*].Scenario1.familyName
    * set baseJsonRequest.autoRequest.applicants.applicant.specifiedPerson.residenceAddress.addressType = baseData.testData[*].Scenario1.addressType
    * set baseJsonRequest.autoRequest.applicants.applicant.specifiedPerson.residenceAddress.lineOne = baseData.testData[*].Scenario1.lineOne
    * set baseJsonRequest.autoRequest.applicants.applicant.specifiedPerson.residenceAddress.cityName = baseData.testData[*].Scenario1.cityName
    * set baseJsonRequest.autoRequest.applicants.applicant.specifiedPerson.residenceAddress.countryID = baseData.testData[*].Scenario1.countryID
    * set baseJsonRequest.autoRequest.applicants.applicant.specifiedPerson.residenceAddress.postcode = baseData.testData[*].Scenario1.postcode

我的问题是:

  1. 我无法给出双方的相对路径。相对路径返回一个json数组。例如,我不能使用$ .. Scenario1.givenName,这使我写了更长的路径。
  2. 在每个场景中包含此映射几乎都很困难。我们如何为此实现参数化解决方案。有什么更好的方法?我可以使用要素文件调用数据读取并将信息传递给另一个要素。如果那可能,那么我需要参数化。怎么做?
  3. 或者我是否需要使用java类来读取JSON文件?

1 个答案:

答案 0 :(得分:1)

是的,当您在JsonPath中拥有通配符时,它会返回一个数组。无论如何,2点应该会立即帮助:

  • 您可以将重复的嵌套路径移动到表格中set
  • 您可以通过分配变量
  • 来引用嵌套的JSON块

所以这应该是要走的路:

* def first = get[0] baseData.testData[*].Scenario1
* set baseJsonRequest.autoRequest.applicants.applicant.specifiedPerson
  | path                         | value             | 
  | familyName                   | first.familyName  |
  | residenceAddress.addressType | first.addressType |

我会尝试尽可能不使用通配符,例如。

* def first = $baseData.testData[0].Scenario1

希望这有帮助!