【问题标题】:Karate: compare csv data with api response空手道:将 csv 数据与 api 响应进行比较
【发布时间】:2020-11-18 05:13:54
【问题描述】:

我有一个用例,我想对 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 文件并将其存储在一个变量中

  • def var1 = 读取(test.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"
}
]

第二步: 我点击了我的 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 步: 所以现在我想要执行两个断言

  1. 获取 csvresponse 和 apiresponse 的计数并比较我使用 .length 运算符

  2. 其次,我想确认每个 csv 记录是否与每个 api 响应匹配。 如果可能的话,来自csv的 id 键和 apiresponse 是主键,所以如果我可以迭代 id 并匹配任何差异的 api 响应。

让我知道这是否适合您阅读,以及我是否能够解释我的用例。 感谢您之前的回复。

【问题讨论】:

    标签: karate


    【解决方案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

    请阅读文档。这是值得的。

    【讨论】:

    • 感谢 Peter 的及时回复,我肯定会浏览文档并尝试查看您共享的所有链接。
    • match 对我不起作用,因为我的 csv 数据没有嵌套,并且我的 api 响应具有嵌套的 json。我正在考虑尝试一些逻辑
    • @NachiK 看,当我将您的第一个问题标记为重复时,这正是我想告诉您的:stackoverflow.com/a/62449166/143475 - 一切顺利
    • 但是,关于我基于条件逻辑对两个列表的比较,可能是我弄错了或无法向您解释......也许我会用一些功能试一试。感谢您的帮助
    • 我尝试了您阅读 CSV 的建议 - 阅读 csv 在响应中给出“\”,因为我的 csv 具有嵌套选项,有什么方法可以使用替换选项将其删除。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    相关资源
    最近更新 更多