You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Karate框架的Feature文件中对比XML文件与JSON

在Karate框架中对比JSON响应与XML文件的实现方案

核心思路

Karate框架本身支持XML与JSON的互转,只需先将XML文件转换为JSON结构,再与接口返回的JSON响应直接做断言对比即可。

具体步骤与代码示例

  1. 读取XML文件并转换为JSON
    使用Karate内置的read()函数读取XML文件,再通过karate.xml()将XML解析为JSON格式:

    def xmlContent = read('classpath:test-data/your-test-file.xml')
    def xmlAsJson = karate.xml(xmlContent)
    
  2. 获取接口的JSON响应
    发起接口请求后,直接用response变量获取返回的JSON数据:

    Given url 'https://your-api-endpoint.com/data'
    When method get
    Then status 200
    def jsonResponse = response
    
  3. 执行对比断言
    根据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
    

完整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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:10:37