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