如何让Karate解析JSON时保留重复属性?
在Karate中保留JSON重复属性的解决方法
Karate默认解析JSON时会遵循标准JSON规范,自动合并/移除重复的键值对。如果要测试需要发送含重复属性的请求,核心思路是绕开Karate的JSON解析逻辑,直接发送原始文本格式的请求体。
方法1:直接使用原始字符串构造请求体
将包含重复属性的JSON内容用三重引号包裹,作为原始文本传入request关键字,Karate会直接发送该字符串,不会进行JSON解析去重:
Given url "你的目标API地址" And header Content-Type = "application/json" And request """ { "Test": { "number": "12344", "number": "12344" } } """ When method post Then status 200
方法2:动态拼接请求体字符串
如果需要动态生成带重复属性的请求,可以通过字符串拼接的方式构造请求体,同样以原始文本形式发送:
* def duplicateNumberFields = '"number": "12344", "number": "12344"' * def requestBody = '{"Test": {' + duplicateNumberFields + '}}' Given url "你的目标API地址" And header Content-Type = "application/json" And request requestBody When method post Then status 200
注意事项
标准JSON规范并不允许对象中存在重复的键,大部分后端框架处理这类请求时的行为也不确定,但如果你的测试场景确实需要模拟这种异常请求,以上两种方法可以满足需求。
内容的提问来源于stack exchange,提问作者Nithin Thomas
相关产品推荐
相关产品推荐

