在使用相对路径并将测试数据从 json 文件映射到请求时面临挑战
Facing challenges while using relative path and mapping test data from a json file to a request
我在使用 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
我的问题是:
- 我无法给出两边的相对路径。相对路径返回一个 json 数组。例如,我不能使用 $..Scenario1.givenName,这让我写了更长的路径。
- 要在每个场景中包含此映射实际上很困难。我们如何为此实施参数化解决方案。请问有什么更好的方法?我可以使用功能文件调用数据读取并将信息传递给另一个功能吗?如果可能的话,我需要参数化。怎么做?
- 或者我需要使用 java class 来读取 JSON 文件吗?
是的,当您在 JsonPath 中使用通配符时,它 returns 是一个数组。不管怎样,有 2 点可以立即帮助到这里:
- 您可以将重复的嵌套路径移动到 table-
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
希望对您有所帮助!
我在使用 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
我的问题是:
- 我无法给出两边的相对路径。相对路径返回一个 json 数组。例如,我不能使用 $..Scenario1.givenName,这让我写了更长的路径。
- 要在每个场景中包含此映射实际上很困难。我们如何为此实施参数化解决方案。请问有什么更好的方法?我可以使用功能文件调用数据读取并将信息传递给另一个功能吗?如果可能的话,我需要参数化。怎么做?
- 或者我需要使用 java class 来读取 JSON 文件吗?
是的,当您在 JsonPath 中使用通配符时,它 returns 是一个数组。不管怎样,有 2 点可以立即帮助到这里:
- 您可以将重复的嵌套路径移动到 table-
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
希望对您有所帮助!