use*_*729 5 java testing hamcrest rest-assured
我正在尝试验证我的响应的某些属性,如放心教程中所示。
问题是,当测试数组内的属性时,我可以验证它们是否出现(如示例所示),但不能验证它们是否与元素的其他属性匹配。
为了澄清一下,假设我收到了教程的回复(添加了“奖品”)
{
"lotto":{
"lottoId":5,
"winning-numbers":[2,45,34,23,7,5,3],
"winners":[{
"winnerId":23,
"prize":5000,
"numbers":[2,45,34,23,3,5]
},{
"winnerId":54,
"prize":100000,
"numbers":[52,3,12,11,18,22]
}]
}
}
Run Code Online (Sandbox Code Playgroud)
我可以验证 WinnerIds 为 23 和 54
expect().
body("lotto.lottoId", equalTo(5)).
body("lotto.winners.winnderId", hasItems(23, 54)).
when().
get("/lotto");
Run Code Online (Sandbox Code Playgroud)
我可以验证奖金为 500 和 100000,但无法验证 WinnerId=23 的奖金=500,以及 WinnerId=54 的奖金=100000。响应将显示 WinnerId=23,奖品=100000,并且测试将通过。
我无法使用contains()因为数组中的元素可以按任何顺序出现,所以我需要使用containsInAnyOrder()。
据我所知,Rest-Assured 只允许验证直接的值验证。对于条件验证,您必须使用 jsonpath 代替:
$.lotto.winners.[?(@.winnerId==23)].prize
Run Code Online (Sandbox Code Playgroud)
上面的 jsonpath 搜索winners下面的数组lotto并选择有奖品的数组项winnerId==23,然后检索奖品;
expect().
body("$.lotto.winners.[?(@.winnerId==23)].prize", equalTo(5000)).
when().
get("/lotto");
Run Code Online (Sandbox Code Playgroud)
尝试此链接中的表达式
| 归档时间: |
|
| 查看次数: |
7669 次 |
| 最近记录: |