目录
一、REST-assured简介
1、Maven的pom.xml添加 REST-assured 依赖坐标
2、语法格式——三段式结构——串联调用
二、具体请求
1、请求头&打印响应
2、get请求参数
3、post请求参数(四种方式的Content-Type和body不同)
——contentType("application/x-www-form-urlencoded")
2. json传参——contentType("application/json")
3. xml参数类型——contentType("application/xml")
4. 大型文件的传输/上传文件
—— contentType("multipart/form-data").multiPart(new File("D:\match.png")).
4、put/patch ——一般也用body传参
5、delete请求——用queryParam
三、获取响应
四、Gpath响应体数据提取
REST-assured是Github上一个开源项目,基于httpclient;它的语法非常简洁,是一种专为测试 REST API 而设计的测试框架
基本使用
io.rest-assured
rest-assured
4.2.0
test
given(). xxx .when(). xxx .then().xxx
类似于行为驱动开发(Behaviour Driven Development-BDD)中的定义的结构 Given-When-Then,
Given:在某场景下,When:发生什么事件,Then:产生了什么结果。
而 REST-Assured 借鉴了这一套描述可以使得语法更加简洁:
given 设置测试预设(包括请求头、请求参数、请求体、cookies 等等)
when 所要执行的操作(GET/POST 请求等等)
then 解析结果、断言
response = RestAssured.
given().
log().all().//打印所有的请求数据
headers(mapHeaders).
body(requestInputParams).
when().
【请求方式post/get...】(requestUrl).
then().
log().all().//打印所有的响应数据
extract().response();//获取响应
请求头:header(具体请求头)、headers(map)、具体请求头
打印响应:
given().
header("Content-Type","application/json").
contentType("application/json").
//————contentType可以在外面直接写,也可以放到header里面
//多个请求头可以用headers,map键值对.
body(jsonData).
when(). //操作 发送的请求
post("http:...").
then().
log().all()——打印出响应的全部内容
log().headers()——打印响应头
log().body——打印响应体
方式一:直接在URL地址后面拼接参数,多个参数用"&"连接
方式二:通过queryParam方法添加参数——queryParam表示查询参数,可以参考postman
方式三:通过queryParams方法添加参数,Map结果,把参数json转成Map
given().
queryParam("mobilephone","13323234545").
queryParam("password","123456").
//queryParams("phone","13323234545","password","123456").
when().
get("http://httpbin.org/get").
then().
log().body();
1. form表单参数类型——参数是键值对形式,支持&(符号)拼接⚠️
——表单格式是由键值对组成。键和值之间用=。多个键值对之间用&。例如:name=ZhangSan&age=16
given().
contentType("application/x-www-form-urlencoded").
body("hello=1111&world=2222")
when().
post("http://httpbin.org/post").
then().
log().body();
我们传送大容量的数据到服务端时,我们通常使用 multipart 表单数据技术。
rest-assured提供了一个叫做multiPart 的方法可以让我们指定文件(file)、包括json文件,字节数组(byte-array)、输入流或者是上传文件,上传文件不能用body
given().
contentType("multipart/form-data").
multiPart(new File("D:\\match.png")).
when().
post("http://httpbin.org/post").
then().
log().body();
extract().response()
time——获取接口请求响应时间,单位是毫秒
statusCode——获取http状态码
getHeader("Content-Type")——获取响应头某一个字段对应的值
getHeaders——获取相应头
jsonPath().get(XXX)——获取响应体信息(Json格式)
Response res=
given().
contentType(ContentType.JSON).
body(jsonData).
when().
post("http://httpbin.org/post").
then().
log().all().
extract().response();
System.out.println(res.statusCode());//获取http状态码
System.out.println(res.time());//获取请求的响应时间,单位是毫秒
System.out.println(res.getHeader("Content-Type"));//application/json;charset=UTF-8
有时我们需要获取响应头中的一些信息,比如Token。也可以通过Gpath解析响应体某个值,层级提取。
需要注意的是REST-Assured中的json响应提取是为Groovy's GPath语法(简称GPath),而不是 Jayway's JsonPath语法。
简单来说GPath是一种路径表达式语言,类似于xpath,GPath不仅可以应用于XML,还可以应用于嵌套的层级结构(比如Json、Html)。Gpath相比较 Jayway's JsonPath语法更为简洁。
代码:提取html为例,用到的是Gpath的绝对表达式,如果层级比较多的时候一般使用相对路径
public void getHtmlData(){
Response res = RestAssured.
given().
when().
get("https://www.baidu.com/").
then().
log().all().
extract().response();
//获取百度title标签的文本值
String titleStr = res.htmlPath().get("html.head.title");
System.out.println(titleStr);
//获取标签的属性值 .@属性名---获取属性的值
String metaStr = res.htmlPath().get("html.head.meta[2].@name");
System.out.println(metaStr);
//获取第二个meta的content属性
String contentStr = res.htmlPath().get("html.head.meta[1].@content");
System.out.println(contentStr);
}