作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对放心的经验有限。我们有许多测试,我通常可以在其中找到示例,或者让 google 失败,但是在尝试匹配匿名数组中元素的嵌套属性时,我被卡住了,并上下验证属性(堂兄弟?) .
示例 JSON:
[
{
"id":1,
"type":{
"typeId":3,
"name":"LPM"
},
"status":{
"id":1,
"price":1.20,
"source":172,
"valid":0
}
},
{
"id":2,
"type":{
"typeId":2,
"name":"ST"
},
"status":{
"id":10,
"price":1.20,
"source":172,
"valid":0
}
}
]
type.name
的元素等于LPM,然后验证
status.price
,
status.source
, 和
status.id
只有那个元素。
response.then()
.assertThat()
.body("size", greaterThan(0))
.body("[0].type.name", equalToIgnoringCase("LPM"))
.body("[0].status.id", equalTo(statusId))
.body("[0].status.source", equalTo(sourceId))
.body("[0].status.price", equalTo(price));
response.then()
.assertThat()
.body("size", greaterThan(0))
.body("type.name", hasItem("LPM"))
.body("status.id", hasItem(statusId))
.body("status.source", hasItem(sourceId))
.body("status.price", hasItem(price));
status.id
,
status.source
, 和
status.price
元素的
type.name
LPM 可能不正确,但这不会被检测到,因为它们会与具有
type.name
的元素匹配。英石。
type.name
,我可以保证只有一个,然后是
status.id
,
status.source
, 和
status.price
,仅检查该元素,即
不是 ST 元素。
type.name
的元素我需要,但我无法让它工作,因为我无法弄清楚如何回到树上,横向和向下,以检查同一元素中的其他属性:
response.then()
.assertThat()
.body("size", greaterThan(0))
.body("$.findAll (it.type.name = LPM}.status.id ", hasItem(statusId))
.body("$.findAll (it.type.name = LPM}.status.source", hasItem(sourceId))
.body("$.findAll (it.type.name = LPM}.status.price", hasItem(price));
List
并从那里解决它,但为了与我们其他示例的一致性,我宁愿不这样做,尽管我目前看不到其他选择。
最佳答案
这是一种方法:
...
then().
root("find {it.type.name == '%s'}.status").
body("id", withArgs("LPM"), is(1)).
body("price", withArgs("LPM"), is(1.20f)).
body("source", withArgs("LPM"), is(172)).
body("id", withArgs("ST"), is(10));
withArgs
提取到变量中以避免重复)。
find
是 Groovy 查找与谓词 (
{it.type.name == '%s'}
)、
findAll
匹配的第一个元素的方法将始终返回一个列表。
root
指示 REST Assured 使用在后续预期中使用的“根路径”(参见
docs)。
关于java - REST 保证 : How to find element using nested property in JSON and validate other properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42147425/
我是一名优秀的程序员,十分优秀!