空手道:将 csv 数据与 api 响应进行比较
Karate: compare csv data with api response
我有一个用例,我想断言 API 响应并将其与 csv 数据进行比较。
第一步:
Csv file: *test.csv*
id,date,fullname,cost,country,code
1,02-03-2002,user1,0,Canada,CAN
2, 04-05-2016,user2,00,United States, USA
我读取了 csv 文件并将其存储在一个变量中
- def var1 = 读取(test.csv)
现在,var1 是一个基于我的 csv 的 json 列表
var1 = [
{
"id":1,
"date":"02-03-2002",
"fullname": "user1",
"cost": "0",
"country": "Canada",
"code": "CAN"
},
{
"id":2,
"date":"04-05-2016",
"fullname": "user2",
"cost": "00",
"country": "United States",
"code": "USA"
}
]
第二步:
我点击 api 并收到回复
Given url "https://dummyurl.com
Given path "/userdetails"
When method get
Then status 200
* def apiResponse = response
第 3 步:
我的 api returns 列表响应是:
{
"id":1,
"date":"02-03-2002",
"fullname": "user1",
"cost": "0",
"country": {
"name": "Canada",
"code": "CAN"
}
},
{
"id":2,
"date":"05-04-2012",
"fullname": "user2",
"cost": "00",
"country": {
"name": "United States",
"code": "USA"
}
},
...and more 100 records..
]
第 4 步:
所以现在我想执行两个断言
获取 csvresponse 和 apiresponse 的计数并比较我使用 .length operator
其次,我想确认每个 csv 记录是否与每个 api 响应匹配。
如果可能的话,在我的情况下,来自 csv 的 id 键和 apiresponse 是主键,所以如果我可以迭代 id 并匹配 api 任何差异的响应.
让我知道这对您来说是否可读,以及我是否能够解释我的用例。
感谢您之前的回复。
请仔细阅读 match contains
语法,这就是您所需要的:https://github.com/intuit/karate#match-contains
所以这一行应该足够了:
* match var1 contains response
另请查看此答案,以防新的 contains deep
有所帮助:
尽量避免迭代,大多数 API 测试不需要迭代。但你当然可以做到。看看这些答案:
另请阅读此内容 - 因为我怀疑您正试图使您的测试过于复杂。请不要。尽可能在 100% 确定响应的“形状”的地方编写测试:
请阅读文档。值得。
我有一个用例,我想断言 API 响应并将其与 csv 数据进行比较。
第一步:
Csv file: *test.csv*
id,date,fullname,cost,country,code
1,02-03-2002,user1,0,Canada,CAN
2, 04-05-2016,user2,00,United States, USA
我读取了 csv 文件并将其存储在一个变量中
- def var1 = 读取(test.csv)
现在,var1 是一个基于我的 csv 的 json 列表
var1 = [
{
"id":1,
"date":"02-03-2002",
"fullname": "user1",
"cost": "0",
"country": "Canada",
"code": "CAN"
},
{
"id":2,
"date":"04-05-2016",
"fullname": "user2",
"cost": "00",
"country": "United States",
"code": "USA"
}
]
第二步: 我点击 api 并收到回复
Given url "https://dummyurl.com
Given path "/userdetails"
When method get
Then status 200
* def apiResponse = response
第 3 步: 我的 api returns 列表响应是:
{
"id":1,
"date":"02-03-2002",
"fullname": "user1",
"cost": "0",
"country": {
"name": "Canada",
"code": "CAN"
}
},
{
"id":2,
"date":"05-04-2012",
"fullname": "user2",
"cost": "00",
"country": {
"name": "United States",
"code": "USA"
}
},
...and more 100 records..
]
第 4 步: 所以现在我想执行两个断言
获取 csvresponse 和 apiresponse 的计数并比较我使用 .length operator
其次,我想确认每个 csv 记录是否与每个 api 响应匹配。 如果可能的话,在我的情况下,来自 csv 的 id 键和 apiresponse 是主键,所以如果我可以迭代 id 并匹配 api 任何差异的响应.
让我知道这对您来说是否可读,以及我是否能够解释我的用例。 感谢您之前的回复。
请仔细阅读 match contains
语法,这就是您所需要的:https://github.com/intuit/karate#match-contains
所以这一行应该足够了:
* match var1 contains response
另请查看此答案,以防新的 contains deep
有所帮助:
尽量避免迭代,大多数 API 测试不需要迭代。但你当然可以做到。看看这些答案:
另请阅读此内容 - 因为我怀疑您正试图使您的测试过于复杂。请不要。尽可能在 100% 确定响应的“形状”的地方编写测试:
请阅读文档。值得。