在 REST Assured 的官方 GitHub 上有这样一句简短的描述: Java DSL for easy testing of REST services 简约的 REST 服务测试 Java DSL
REST Assured 官方的 README 第一句话对进行了一个优点的概述,总的意思表达的就是简单好用。那么 REST Assured 有哪些优点,又该如何使用呢? 获取更多资料
用 Java 做接口自动化测试首选 REST Assured,具体原因如下:
- 开源
-
- 简约的接口测试 DSL
-
- 支持 xml json 的结构化解析
-
- 支持 xpath jsonpath gpath 等多种解析方式
-
- 对 spring 的支持比较全面
添加 maven 依赖
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>4.0.0</version>
<scope>test</scope>
</dependency>
```
我们对接口进行测试一般由三步曲:传参、发请求、响应结果断言,REST Assured给我们提供了清晰的三步曲,以given、when、then的结构来实现,基本写法如下:
```
//使用参数
given().
param("key1", "value1").
param("key2", "value2").
when().
post("/somewhere").
then().
body(containsString("OK"))
//使用X-Path (XML only)
given().
params("firstName", "John", "lastName", "Doe").
when().
post("/greetMe").
then().
body(hasXPath("/greeting/firstName[text()='John']"))
```
请求体body如下
```
{
"password": "elcrD28ZSLLtR0VLs/jERA\u003d\u003d\n",
"grant_type": "password",
"scope": "server",
"userType": 1,
"username": "xxx"
}
```
Request Header 如下:
```
Headers: Authorization=Basic c3lzdGVtxxxRlbQ==
Host=47.103.xxx.133
Accept=*/*
Content-Type=application/json; charset=ISO-8859-1
```
我们发送请求经常需要带有参数,使用 given() 就可以实现,当时当我们使用 given() 的时候发现其中有很多传参方法如下:
没错,在传参的方法中包含了 param、pathParam、queryParam 和 formParam,下面来研究下这几个传参方法的区别
- param
- 通常我们都会使用 given().param 方法来传参,REST Assured 会根据 HTTP 方法自动尝试确定哪种参数类型(即查询或表单参数),如果是 GET,则查询参数将自动使用,如果使用 POST,则将使用表单参数;
- queryParam 和 formParam
- 有时候在 PUT 或 POST 请求中,需要区分查询参数和表单参数时,就需要使用queryParam 和 formParam 方法了,具体写法如下:
```
given().
formParam("formParamName", "value1").
queryParam("queryParamName", "value2").
when().
post("/something")
```
- pathParam
使用given时指定请求路径的参数,这个方法很少用到,或者说我本人几乎没用到过(可能我的修行还不够,踩坑还太少~);具体写法如下:
```
given().
pathParam("OAuth", "oauth").
pathParam("accessToken", "token").
when().
post("/auth/{OAuth}/{accessToken}").
then().
..
```
- header/headers
经常还需要在请求头中带入参数,这个时候就可以使用header或headers方法,写法如下:
```
given()
.header("Authorization","Basic c3lzdGVtOxxxbQ==")
.header("Host","47.xx