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
相关产品推荐
相关产品推荐

