利器 | REST Assured 实践(二):断言实现

本文详细介绍了如何使用 REST Assured 进行断言,包括 GPath 和 XML 的断言方法,如点操作符、索引取值、findAll 和 size() 等,并展示了在 JSON 和 XML 数据中的应用示例。此外,还讨论了使用 JsonSchema 进行复杂断言的必要性和方法,以及 REST Assured 在接口自动化测试中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在上一篇文章中,我们初步探讨了 REST Assured 的应用实践,还有很多丰富的用法需要慢慢探索研究。而 REST Assured 提供的完整断言手段,是测试工程师最常用最重要的功能之一。断言该如何使用呢?

这里以 rest-assured 官方给的一个示例做演示学习

{
"lotto":{
 "lottoId":5,
  "winning-numbers":[2,45,34,23,7,5,3],
   "winners":[{
      "winnerId":23,
         "numbers":[2,45,34,23,3,5]
          },{
             "winnerId":54,
                "numbers":[52,3,12,11,18,22]
                 }]
                 }
                 }

在本地使用 python -m CGIHTTPServer 临时搭建起一个服务:

根节点.子节点
1)我们可以使用根节点.(点)子节点的方式一层层的找下去,例如我们需要对lottoId等于 5 进行断言:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Rxy50cS-1650514201013)(https://ceshiren.com/uploads/default/original/3X/3/7/3770a78cf109b1cc8eb443d8a5472b9ba3653b86.png)]

@Test
void testGPath(){
     given().
          when().
                       log().all().get("http://127.0.0.1:8000/restAssured.json").
                            then().
                                         log().all().body("lotto.lottoId",equalTo(5));
                                          }

2)如果我们想要断言winners数组下面的winnerId,检查23和54是否包含其中,可以如下lotto.winners.winnerId写法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WqCqwmaY-1650514205932)(https://ceshiren.com/uploads/default/original/3X/d/4/d4e8ad014ed786cb61ea038719908674e4ad04fe.png)]

@Test
void testGPath(){
    given().
        when().
                    log().all().get("http://127.0.0.1:8000/restAssured.json").
                        then().
                                    log().all()
                                                .body("lotto.winners.winnerId",hasItems(54,23));
                                                }

索引取值

1)如果我们想要取某些相同字段中的某一个,可以使用类似索引的方式获取,例如想要断言 winners 数组下面的 winnerId 的第一个值是否为23,可以使用 lotto.winners.winnerId[0],写法如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5maZ7b3D-1650514210826)(https://ceshiren.com/uploads/default/original/3X/a/3/a3aa8f53907041fdbe8035a0005b64b506b7d607.png)]

@Test
void testGPath(){
    given().
        when().
                    log().all().get("http://127.0.0.1:8000/restAssured.json").
                        then().
                                    log().all()
                                                .body("lotto.winners.winnerId[0]",equalTo(23));
                                                }

2)如果我们想要取某些相同字段中的最后一个,可以使用 -1 作为索引,例如断言断言 winners 数组下面的 winnerId 的最后一个的值是否为 54

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xNniuyxj-1650514215993)(https://ceshiren.com/uploads/default/original/3X/0/c/0cd8179df05d0e5c04adafb5f2b9e4d750e3788f.png)]

@Test
void testGPath(){
    given().
        when().
                    log().all().get("http://127.0.0.1:8000/restAssured.json").
                        then().
                                    log().all()
                                                .body("lotto.winners.winnerId[-1]",equalTo(54));
                                                }

findAll
有时候我们需要获取符合某些条件的结果来进行断言,这里 findAll 可以帮助我们实现,我们可以在 findAll 方法中写筛选条件,例如我们想取 winnerId 的值在大于或等于 30 小于 60 之间的结果进行断言,具体写法如下:

@Test
void testGPath(){
    given().
        when().
                    log().all().get("http://127.0.0.1:8000/restAssured.json").
                        then().
                                    log().all()
                                                .body("lotto.winners.findAll{ winners -> winners.winnerId >= 30 && winners.winnerId < 60}.winnerId[0]",equalTo(54));
                                                }

find
find 的用法与 findAll 基本一致,只是 find 默认取匹配到的第一个:

@Test
void testGPath(){
    given().
        when().
                    log().all().get("http://127.0.0.1:8000/restAssured.json").
                        then().
                                    log().all()
                                                .body("lotto.winners.find{ winners -> winners.winnerId >= 30 &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值