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

Karate断言含空格标签JSON对象时遇PolyglotException问题求助

问题描述

我得到的响应是一个包含嵌套数组的JSON对象:

16:15:20.461 [print] {"Successful Requests":[{"Status":201,"Resource ID":2373202,"Message":"Created resource 1 at URI: /ids/2373202"},{"Status":201,"Resource ID":2373268,"Message":"Created resource 2 at URI: /ids/2373268"},{"Status":201,"Resource ID":2373334,"Message":"Created resource 3 at URI: /ids/2373334"}],"Failed Requests":[]}

我需要做断言,确保Successful Requests数组包含3个对象,且Failed Requests是空数组。

尝试以下断言时因键名含空格报错:

And match response."Successful Requests" == '#[3]'

之后尝试Schema验证也报错:

And match response ==
    """
    {
        "Successful Requests": [
            {
                "Status": 201,
                "Resource ID": #number,
                "Message": "Created resource 1 at URI: /#number"
            },
            {
                "Status": 201,
                "Resource ID": #number,
                "Message": "Created resource 2 at URI: /#number"
            },
            {
                "Status": 201,
                "Resource ID": #number,
                "Message": "Created resource 3 at URI: /#number"
            }
        ],
        "Failed Requests": []
    }
    """

作为Karate新手,求该场景下最便捷的断言方式。

解决方案

针对键名带空格的场景,推荐以下几种简洁可靠的断言方式:

1. 直接断言数组长度与空数组

使用#size关键字指定数组长度,同时直接断言空数组,这是最直接的方式:

And match response."Successful Requests" == '#size(3)'
And match response."Failed Requests" == []

2. 简化Schema验证(含动态内容匹配)

如果需要同时验证数组元素的结构,无需逐个编写对象,用#[]批量匹配重复结构,配合正则表达式处理动态的Message内容:

And match response == {
    "Successful Requests": '#[3] ({ Status: 201, "Resource ID": #number, Message: "#regex Created resource \\d+ at URI: /ids/\\d+" })',
    "Failed Requests": []
}

这里#regex用于匹配动态的资源编号,避免硬编码固定值。

3. 变量辅助断言

若需要更灵活的后续操作,可先将目标数组存入变量,再进行断言:

* def successfulRequests = response."Successful Requests"
* match successfulRequests == '#size(3)'
* match response."Failed Requests" == []

内容的提问来源于stack exchange,提问作者mixIrico

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:45:04