当前位置:网站首页>REST-assured接口测试框架详解
REST-assured接口测试框架详解
2022-07-26 00:56:00 【Nice2cu_Code】
REST-assured
一、接口测试介绍
什么是接口测试
- 本质上基于某种协议,发送请求给服务器,服务器返回响应数据,对响应数据进行分析,判断和我们的预期是否一致,从而验证功能是否正确。
为什么做接口测试
- 更早发现问题,降低研发成本
- 减少回归测试人力成本与时间,快速的质量反馈
- 更容易实现持续集成
接口自动化测试流程
理解业务需求
分析接口测试范围
接口测试用例设计
接口测试框架选择,常见的如 RestAssured
接口测试用例编写
框架与用例维护
持续集成
二、REST-assured基本使用
REST-assured 是一种专为测试 REST API 而设计的测试框架。
引入依赖
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>语法格式
given(). XXXX when(). XXXX then(). XXXX- given:设置测试预设,包括请求头、请求参数、请求体、cookie等
- when:所要执行的操作,即发起请求的网址(GET / POST 请求)
- then:解析结果、断言
三、发送请求
httpbin 是一个测试 HTTP 请求的网址,向它传递什么参数,它就会返回什么参数。
根据 http://httpbin.org/get 或者 http://httpbin.org/post 区分是 get 还是 post 请求。
3.1 GET请求
方式一:直接在在URL地址后面拼接参数
import org.testng.annotations.Test;
import static io.restassured.RestAssured.*;
public class Test {
@Test
public void test() {
given().
when().
get("http://httpbin.org/get?name=jay").
then().
log().body(); //返回响应体中的数据
//log可以向控制台输出返回的信息
//log().all() 可以返回所有响应中的数据
}
}
运行结果:

方式二:通过 queryParam 方法添加参数
import org.testng.annotations.Test;
import static io.restassured.RestAssured.*;
public class Test {
@Test
public void test() {
given().
queryParam("name", "jay").
queryParam("age", "22").
when().
get("http://httpbin.org/get").
then().
log().body();
}
}
运行结果:

3.2 POST请求
1. form表单参数类型
public class Test {
@Test
public void test() {
given().
formParam("name", "jay").
formParam("password", "qwerty").
when().
post("http://httpbin.org/post").
then().
log().body();
}
}
运行结果:

2. JSON参数类型
String jsonData = "{\"mobilephone\":\"13323234545\",\"password\":\"234545\"}";
given().
body(jsonData).
contentType(ContentType.JSON). //使用body时必须指定类型
when().
post("http://httpbin.org/post").
then().
log().body();
3. xml参数类型
String xmlStr = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<suite>\n" +
" <class>测试xml</class>\n" +
"</suite>";
given().
contentType(ContentType.XML).
body(xmlStr).
when().
post("http://www.httpbin.org/post").
then().
log().body();
4. 上传文件
REST-assured 提供了一个叫做 multiPart() 的方法可以指定文件(file)、字节数组(byte-array)、输入流或者是上传文件:
given().
multiPart(new File("D:\\match.png")).
when().
post("http://httpbin.org/post").
then().
log().body();
四、获取响应
通过 extract().response() 将响应结果赋值到一个 Response 类型的变量中。
Response res=
given().
contentType(ContentType.JSON).
body(jsonData).
//headers(Map map),将JSON格式的多个header,通过fastjson转换成map:Map result = (Map) JSON.parse(JSON_String);
when().
post("http://httpbin.org/post").
then().
extract().response();
//获取接口的响应时间(ms)
System.out.println(res.time());
//获取响应头信息
System.out.println(res.getHeader("Content-Type"));
//获取响应体信息(Json格式)
System.out.println(res.jsonPath().get("lotto.lottoId"));
Gpath的使用:
Gpath用来提取响应中的某一个具体的数据。
- 提取JSON:
res.jsonPath().get("XXX.XXX.XXX"); - 提取xml:
res.xmlPath().get("XXX.XXX.XXX"); - 提取HTML:
res.htmlPath().get("XXX.XXX.XXX");
提取JSON示例:

提取HTML示例:
获取HTML响应时,通过 标签名.标签名 的方式获取标签中的值,通过 @属性名 的方式获取属性的值:

提取xml与提取HTML使用方式几乎一致。
注意:
REST-assured 获取响应时如果返回的是 JSON 小数,那么对应的Java类型是float,但是为了解决丢失精度的问题,一般都会将其转换为BigDecimal。
如果想要将返回结果转换成BigDecimal,需要添加配置,如下图:

将浮点数转换成BigDecimal:
BigDecimal bigDecimal = BigDecimal.valueOf(3.14159);全局配置:

使用了
baseURI全局配置之后地址会自动的拼接:
一些基本的自动化过程:比如登录注册的测试用例写在了同一个 Excel 文件中,可以使用
@BeforeMethod注解标记注册方法(先注册后登录),@Test注解标记登录方法,定义两个 dataprovider 方法,分别读取 Excel 的某几行作为登录或注册的测试用例,将这些测试用例放在对应的测试方法中按顺序运行。
边栏推荐
- [RTOS training camp] task scheduling (Continued), task comity, scheduling summary, queue and evening class questions
- 【RTOS训练营】关于上课和答疑
- Tell you the meaning of unit testing from another angle
- 微波炉整流二极管 CL01-12
- Zabbix监控主机及资源告警
- Database tools duel: heidisql and Navicat
- 【RTOS训练营】站在更高的角度学习C语言
- 参数解析器HandlerMethodArgumentResolver分析与实战
- Unityvr -- robot arm scene 4- gifts and Christmas tree
- [RTOS training camp] program framework, preview, after-school homework and evening class questions
猜你喜欢

How to choose social e-commerce model in the early stage? Taishan crowdfunding

我们没有退路了

Zabbix监控主机及资源告警

如何才能修炼成一名不可替代的程序员?

【纪中】2022.7.16 1432.输油管道

The bumpy road of referencing jar package json-path.jar in jmeter/idea

985高校副教授晒年薪,公积金顶普通人月薪,网友:不愧是在上海

【RTOS训练营】GPIO知识和预习安排 + 晚课提问

【RTOS训练营】程序框架、预习、课后作业和晚课提问

【RTOS训练营】上节回顾、空闲任务、定时器任务、执行顺序、调度策略和晚课提问
随机推荐
[oops framework] random number generation management
ZABBIX monitoring host and resource alarm
Using questpdf operation to generate PDF is faster and more efficient!
Small sample learning - getting started
如何才能修炼成一名不可替代的程序员?
The difference and application of in and exists in SQL statement
User defined variables and extracted public variables of JMeter
How to choose social e-commerce model in the early stage? Taishan crowdfunding
Implementation process of adding loading effect to easycvr page
AI knows everything: build and deploy sign language recognition system from 0
【秒杀概念】大小端
How can I become an irreplaceable programmer?
Download exclusively | Alibaba cloud maxcompute questions and answers to unlock SaaS mode cloud data warehouse in this electronic manual!
jupyter更改默认浏览器的方法
Cf1494f delete the edges (Euler circuit)
Biological JC uvssa complex alleviates myc driven transcription pressure ⼒ English
编程学习过程中有哪些快速提高编程技巧的方法?
【RTOS训练营】设备子系统、晚课学员提问
【RTOS训练营】课程学习方法和结构体知识复习 + 链表知识
超全的开源Winform UI库,满足你的一切桌面开发需求!