如何在hurl.dev中检查对象数组是否包含指定对象
如何用Hurl断言对象数组包含指定对象?
我正在使用Hurl进行接口测试,当前有一个接口会返回对象数组。我希望断言该数组中包含某个特定对象,但尝试多种写法均报错:
- 尝试代码1:
jsonpath "$" includes '{"id":"123"}'
错误信息:
69 | jsonpath "$" includes '{"id":"123"}' | ^ invalid predicate value
- 尝试代码2:
jsonpath "$" includes "{\"id\":\"123\"}"
错误信息:
69 | jsonpath "$" includes "{\"id\":\"123\"}" | actual: [object] | expected: includes string <{"id":"123"}>
- 尝试代码3:
jsonpath "$" includes json```{"id":"123"}```
错误信息:
69 | jsonpath "$" includes json```{"id":"123"}``` | ^ invalid predicate value
正确实现方式
有两种可靠的写法可以完成这个断言:
写法1:使用includes配合正确的json语法
不需要用反引号包裹JSON对象,直接通过空格将json关键字和目标对象分隔开:
jsonpath "$" includes json {"id":"123"}
该写法会把右侧的{"id":"123"}解析为JSON对象,再断言左侧数组是否包含这个对象。
写法2:通过JSONPath过滤定位元素并断言存在
利用JSONPath的过滤表达式匹配目标对象,再断言该匹配结果存在:
jsonpath "$[?(@.id == '123')]" exists
这种方式更适合只需要验证对象部分字段匹配的场景,灵活性更高。
内容的提问来源于stack exchange,提问作者Finlay Weber
相关产品推荐
相关产品推荐

