继续来学习RestAssured的基本功能,前面写了三个例子,状态码200判断,打印全部响应到控制台和判断响应中某些字符串。其实这三个都是RestAssured的关于响应的处理。这篇我们继续学习请求的处理,例如请求中如何设置参数,请求头字段如何设置等。
1.带参数的请求举例
场景1:带一个参数的请求
请求demo:https://jsonplaceholder.typicode.com/posts?userId=2
请求回来有多组数据
这个请求是有一个请求参数userId=2,我们在使用RestAssured代码中如何给这个请求添加参数呢,看看下面这个case
/**
* 测试 带请求参数的请求
*/
@Test
public void testRequestWithParameter() {
given().
param("userId", 2).
when().
get("http://jsonplaceholder.typicode.com/posts").
then().
statusCode(200).log().all();
}
运行是成功的,你自己对比控制台输出和浏览器手动发送请求的结果。这样的话,关于给请求添加一个参数,我们学习了一个新方法 param("param1", "value1")
这个case和我们前面的写法有一点不一样。是用when()对象去发送请求,given()后面跟着是param用来设置参数,这是一种表中的带参数的请求的写法,如果请求没有参数,不写param()和when()。
场景2:
上面是一个参数的例子,如果是多个,例如一组参数,怎么办?这个时候我们就需要使用params(多个键值对的map对象)
请求demo:https://jsonplaceholder.typicode.com/posts?userId=2&id=14
在前面一个例子的基础上,我加了一个参数,这样筛选查询就一个结果,我这里用两个参数来表示多个参数如何在代码中写。
/**
* 测试 带多个请求参数的请求
*/
@Test
public void testRequestWithParameters() {
//构造一个Map对象,用来存多个参数和值
Map<String, String> parameters = new HashMap<String,String>();
parameters.put("userId", "2");
parameters.put("id", "14");
given().
params(parameters).
when().
get("http://jsonplaceholder.typicode.com/posts").
then().
statusCode(200).log().all();
}
运行成功,知道打印一组数据,和浏览器访问效果是一样的。这个就是多个参数如何在发送请求之前的组装过程。
2.带头字段的请求举例
上面是参数的例子,有时候请求的时候也需要指定一些请求头参数。一般来说请求头都是默认的参数和值,只有接口文档明确指出需要什么额外的头字段,我们接口测试才会加上头字段去发送请求。下面分别来模拟一个头字段和多个头字段的例子演示。
我们先通过浏览器的F12来收集几个请求头字段。
就来测试这两个头字段
accept-encoding:gzip,deflate,br
accept-language:zh-cn,zh
场景1:一个头字段
accept-encoding:gzip,deflate,br
来测试这个,然后打印请求内容,看看是不是我们填写的这个,为了测试,我们这里把br不写进去。
/**
* 测试 带一个请求头字段
*/
@Test
public void testRequestWithHeader() {
given().
header("accept-encoding", "gzip,deflate").
when().log().all().
get("http://jsonplaceholder.typicode.com/posts").
then().
statusCode(200);
}
运行一下看看打印的请求头信息是不是这个我们想要的
Request method: GET
Request URI: http://jsonplaceholder.typicode.com/posts
Proxy: <none>
Request params: <none>
Query params: <none>
Form params: <none>
Path params: <none>
Headers: accept-encoding=gzip,deflate
Accept=*/*
Cookies: <none>
Multiparts: <none>
Body: <none>
PASSED: testRequestWithHeader
Headers 这行,accept-encoding=gzip,deflate, 确实没有br,说明这个请求就是我们代码中设置的。
场景2:多个头字段
/**
* 测试 带多个头字段的请求
*/
@Test
public void testRequestWithHeaders() {
//构造一个Map对象,用来存多个参数和值
Map<String, String> headers = new HashMap<String,String>();
headers.put("accept-encoding", "gzip,deflate");
headers.put("accept-language", "zh-CN");
given().
headers(headers).
when().log().all().
get("http://jsonplaceholder.typicode.com/posts").
then().
statusCode(200);
}
运行效果
Request method: GET
Request URI: http://jsonplaceholder.typicode.com/posts
Proxy: <none>
Request params: <none>
Query params: <none>
Form params: <none>
Path params: <none>
Headers: accept-language=zh-CN
accept-encoding=gzip,deflate
Accept=*/*
Cookies: <none>
Multiparts: <none>
Body: <none>
PASSED: testRequestWithHeaders
上面打印Header部分,说明我们代码设置成功。
3.同时带参数和请求头的情况
我们这里把多个参数和多个头字段放一个用例执行。
/**
* 测试 带多个头字段 多个参数的请求
*/
@Test
public void testRequestWithHeadersAndParameters() {
//构造一个Map对象,用来存多个参数和值
Map<String, String> parameters = new HashMap<String,String>();
parameters.put("userId", "2");
parameters.put("id", "14");
//构造一个Map对象,用来存多个参数和值
Map<String, String> headers = new HashMap<String,String>();
headers.put("accept-encoding", "gzip,deflate");
headers.put("accept-language", "zh-CN");
given().
params(parameters).
headers(headers).
when().log().all().
get("http://jsonplaceholder.typicode.com/posts").
then().
statusCode(200).log().all();
}
在params().headers() 中间可以用and()隔开,写成 params().and().headers()
总结
本篇介绍了一个和多个参数以及一个和多个请求头字段的代码场景,和多个参数多个请求头字段一起的场景,基本上覆盖了HTTP请求的每个场景。