java - 如何使用 Rest assured 验证数组中元素的正确值

标签 java testing hamcrest rest-assured

我正在尝试验证我的响应的某些属性,如 rest assured tutorial 中所示.

问题是,当测试数组内的属性时,我可以像示例中那样验证它们是否出现,但不能验证它们是否与元素的其他属性匹配。

为了澄清,假设我收到了教程的回复(添加了“奖品”)

{
"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]
 }]
}
}

我可以验证 winnerIds 为 23 和 54

expect().
         body("lotto.lottoId", equalTo(5)).
         body("lotto.winners.winnderId", hasItems(23, 54)).
when().
       get("/lotto");

我可以验证奖品是 500 和 100000,但我无法验证 winnerId=23 的奖品是 500,而 winnerId=54 的奖品是 100000。响应将显示 winnerId=23,奖品=100000,测试将通过。

我不能使用 contains()因为数组中的元素可以按任何顺序出现,所以我需要用户 containsInAnyOrder() .

最佳答案

据我所知,Rest-Assured 只允许验证直接的值验证。对于条件验证,您必须改用 jsonpath:

$.lotto.winners.[?(@.winnerId==23)].prize

以上jsonpath搜索lotto下的winners数组,选择winnerId==23的数组项获取奖品;

expect().
         body("$.lotto.winners.[?(@.winnerId==23)].prize", equalTo(5000)).
when().
       get("/lotto");

SO 中还有其他您可以引用的帖子是 herehere

试试这个 link 中的表达式

JsonPath表达式语法可以查到here .

关于java - 如何使用 Rest assured 验证数组中元素的正确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35297291/

相关文章:

java - 如何有效地在neo4j中创建具有关系的非重复节点?

python - Python 中的一切测试的外行非先决介绍 Material 在哪里?

Java:如何定义匿名的 Hamcrest 匹配器?

java - 订阅 MailChimp 列表 : Content Type '' not supported

java - 在 Java 中声明方法参数 final 是否有任何性能原因?

c# - 在 NUnit 测试中获取上下文

validation - Teams 应用程序是如何测试的?

java - 测试忽略某些字段的列表内容

android - 应用程序 (1.1) 和测试应用程序 (1.3) 的已解决版本不同

java - 如何在Windows中的CLASSPATH中设置 "Program Files"和 "Program Files (x86)"