如何在Karate框架的Feature文件中对比XML文件与JSON
在Karate框架中对比JSON响应与XML文件的实现方案
核心思路
Karate框架本身支持XML与JSON的互转,只需先将XML文件转换为JSON结构,再与接口返回的JSON响应直接做断言对比即可。
具体步骤与代码示例
读取XML文件并转换为JSON
使用Karate内置的read()函数读取XML文件,再通过karate.xml()将XML解析为JSON格式:def xmlContent = read('classpath:test-data/your-test-file.xml') def xmlAsJson = karate.xml(xmlContent)获取接口的JSON响应
发起接口请求后,直接用response变量获取返回的JSON数据:Given url 'https://your-api-endpoint.com/data' When method get Then status 200 def jsonResponse = response执行对比断言
根据XML转JSON后的结构,与接口响应做精准匹配。注意XML转JSON后的特殊规则:- XML的属性会被转为带
@前缀的键,比如<user id="123">转JSON后是{"@id": "123"} - XML中重复的子元素会自动转为数组,单个子元素则为对象
# 示例:假设XML根节点是<user>,直接对比根节点内的内容与JSON响应 match xmlAsJson.user == jsonResponse # 如果需要忽略文本空格差异,可使用#trim修饰符 match xmlAsJson.user == '#trim' jsonResponse- XML的属性会被转为带
完整Feature文件示例
Feature: 验证接口JSON响应与XML基准文件一致 Scenario: 对比用户数据接口响应与XML文件 # 发起接口请求获取JSON响应 Given url 'https://api.example.com/user/123' When method get Then status 200 def jsonResponse = response # 读取并转换XML文件为JSON def xmlBenchmark = read('classpath:benchmarks/user-123.xml') def xmlAsJson = karate.xml(xmlBenchmark) # 执行结构与内容对比 match xmlAsJson.user == jsonResponse
内容的提问来源于stack exchange,提问作者NIck27
相关产品推荐
相关产品推荐

