接口测试框架Rest-assured搭建与实战【附源码】

软测小生

共 2764字,需浏览 6分钟

 ·

2020-12-23 14:48

现在,越来越多的 Web 应用转向了 RESTful 的架构,很多产品和应用暴露给用户的往往就是一组 REST API,这样有一个好处,用户可以根据需要,调用不同的 API,整合出自己的应用出来。从这个角度来讲,Web 开发的成本会越来越低,人们不必再维护自己的信息孤岛,而是使用 REST API 互联互通。那么,如何确保 API 的稳定性与正确性呢?全面系统的测试是必不可少的,除了常见的postman、jmeter等接口测试工具外,今天给大家介绍一款非常火爆的接口测试框架Rest-Assured。

Rest-Assured 是一套由 Java 实现的 REST API 测试框架,它是一个轻量级的 REST API 客户端,可以直接编写代码向服务器端发起 HTTP 请求,并验证返回结果;它的语法非常简洁,是一种专为测试 REST API 而设计的 DSL。使用 Rest-Assured 测试 REST API,就和真正的用户使用 REST API 一样,只不过 Rest-Assured 让这一切变得自动化了。

官网地址: http://rest-assured.io/

官方文档: https://rest-assured.io/#docs

github项目地址: https://github.com/rest-assured/rest-assured

一、Rest-Assured框架搭建步骤

1
创建maven项目

1.1 打开idea创建项目,选择maven相关设置点击下一步

 

1.2 输入包名及项目名称点击下一步

 

1.3 选择maven相关信息,点击下一步

 

1.4 项目名称和项目位置,一般默认就可以,点击完成

 

2
配置Rest-Assured相关依赖

在项目的pom.xml中增加Rest-Assured的依赖包

 

 

3
Rest-Assured第一个接口测试案例

3.1 接口业务介绍

案例我们将采用码同学全栈接口项目来进行实战操作

 

图示中的四个接口分别表示的业务是:

Get接口:根据id获取手机信息

POST接口:增加一个手机信息

3.2 测试代码

在src/test/java下创建一个包,起名叫phone,在该包下创建一个PhoneApiTests类

,代码如下:


执行结果如下:

 

3.3 代码解释

l given() 是RestAssured类下一个方法,所以官方文档强烈推荐我们使用静态导入语句;网络请求所需要的条件都写在这里,头信息、请求参数

l get方法,里面参数是url,用来发送请求

l post方法,里面参数也是url,用来发送请求

l then() 又是一个方法,可以理解成执行请求后要做什么事情

l statusCode(200) 这个方法名称就看得出来,是判断响应状态码是不是等于200

整个代码的意思我们可以连起来,以其中的post接口为例:


发起一个post请求,他的content-type是json,参数是xx,执行后针对响应状态码做断言

现在讨论下这种写法的好处,什么写法,就是一个方法后面利用点串联起来,形成一个像自然语言的句子一样。这种特点,有点像lambda表达语法效果。除了这个,也有一点像groovy这种胶水语言。通过这个例子,我明白了Rest Assured首页的这句话的含义。




二、使用rest-assured框架优雅实现接口测试断言

1

接口信息的调试


当我们在做接口测试时,通常希望将接口的请求及响应信息打印出来帮助我们debug,那么在Rest-assured框架中如何将接口信息打印在控制台呢,如下图代码红框中框出来的:

控制台打印出请求信息如下:

响应信息如下:


2

针对接口响应信息做断言


2.1 判断响应中单字段对应的内容是否正确


以上图中的响应结果中的message字段为例,因为响应结果是json格式的,因此我们可以采用body()方法来直接提取,并且采用equalTo()来对比。

使用前先导入

import static org.hamcrest.Matchers.*;

具体代码如下:

 

2.2 判断响应中多个字段对应的内容是否正确

   body()方法中可以针对多个字段连续判断,用逗号隔开多个判断

   具体代码如下:

   还有另外一种写法,写多个body()方法,如下:

 

2.3 判断响应中的某个字段对应的数值的大小

   比如上述接口中的id值对应的是数字,我想判断id对应的数字小于2,代码如下:

 

  那么大家可以想想如果想判断比某个数字大呢?这里可以给大家列举一下:

1、lessThan(x):表示比某大小

2、lessThanOrEqualTo(x):表示小于等于

3、greaterThan(x):表示比某个值大

4、greaterThanOrEqualTo(x):表示大于等于


2.4 判断响应中的多个相同字段的值

   比如有一个接口是获取用户列表,响应结果如下:

 

目标是判断响应中所有的userName都正确,具体实现代码如下:

 

其中path:data.userName表示选取响应结果中data字段下的所有userName字段


hasItems表示结果中是否包含这几个选项,需要一一对应哦

在上述案例中做断言时都用到了一个path参数,该参数表示使用某种路径表达式从响应结果中提取相应内容,那么在Rest-assured中针对json格式的响应结果采用JsonPath来提取,针对xml格式的响应结果采用xmlPath来提取,关于这两种类型的提取规则我们下次再说。


Appium教程
  1. Appium移动端自动化测试--基础预热
  2. Appium移动端自动化测试--搭建测试环境
  3. Appium移动端自动化测试--录制测试用例并运行
  4. Appium移动端自动化测试--使用IDE编辑并强化脚本
  5. Appium移动端自动化测试--控件定位方法
  6. Appium移动端自动化测试--元素操作与触摸动作
  7. Appium移动端自动化测试--搭建模拟器和真机环境
  8. Appium移动端自动化测试--测试用例改造
  9. Appium移动端自动化测试--capability使用和常用设备交互命令
文章合集
Selenium Appium  | Jenkins  |  Jmeter 
软件测试方法汇总 Postman接口参数化 | 测试用例设计 | APP抓包

视频教程
Selenium | Appium | Jenkins | Jmeter

微信群:
软件自动化测试交流群
已创建,公号回复入群即可获取入群二维码。
浏览 48
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报