前提
上一篇文章介绍了,Rest-Assured的环境搭建,光说不练假把式,对着官方文档,写一个简单的post请求,先入门。
学习的重要资料还是 官方文档 ,这篇文章重点也是对照官方文档写的。
示例
官方示例
先看官方给的一个例子:
假设一个url http://localhost:8080/lotto 返回的JSON如下所示
{
"lotto":{
"lottoId":5,
"winning-numbers":[2,45,34,23,7,5,3],
"winners":[{
"winnerId":23,
"numbers":[2,45,34,23,3,5]
},{
"winnerId":54,
"numbers":[52,3,12,11,18,22]
}]
}
}
如果要验证这个接口的返回值对不对,一个简单的例子:
get("/lotto").then().body("lotto.lottoId", equalTo(5));
这个可以验证返回的lottoID是不是5
上面是一个简单的get请求,同样官方也提供了post请求的示例,看完官方的两个请求之后,再以 雪球 为例,简单介绍post 请求及其他断言方式:
假设一个url http://localhost:8080/greetXML 接口返回的内容是XML,如下所示:
<greeting>
<firstName>{params("firstName")}</firstName>
<lastName>{params("lastName")}</lastName>
</greeting>
通过rest-assurd可以这样写:
given().
parameters("firstName", "John", "lastName", "Doe").
when().
post("/greetXML").
then().
body("greeting.firstName", equalTo("John")).
如果想同时验证firstname 和 lastname 可以这样写:
given().
parameters("firstName", "John", "lastName", "Doe").
when().
post("/greetXML").
then().
body("greeting.firstName", equalTo("John")).
body("greeting.lastName", equalTo("Doe"));
或者简单些:
with().parameters("firstName", "John", "lastName","Doe").when().post("/greetXML").then().body("greeting.firstName", equalTo("John"), "greeting.lastName", equalTo("Doe"));
上面是官方的两个例子,比较简单,下面以雪球登录为例,简单的介绍一下post请求
雪球为例
首先登录雪球,随便输入一个号码和错误的密码,打开开发者选项,可以看到这个登录时post请求方式,同时传了三个参数(记住我这个参数可以为空),即用户名、密码
代码如下:
given().
header("X-Requested-With" ,"XMLHttpRequest").
param("username","15211224455").
param("password","123").
when().
post("https://xueqiu.com/snowman/login").
then().
log().all().
body("error_description",equalTo("用户名或密码错误")).
body("error_code",equalTo("20082"));
这边加上了log().all().就是打印所有的信息,类似的可打印cookie、headers、status等等,可以全部打印出来研究下
这个时候,如果我们运行这个脚本,会发现运行失败,IDEA给出的报错:
原因是被劫持挂了代理,只需要加上一句代码就可以解决:
RestAssured.useRelaxedHTTPSValidation();
其他断言方式
使用JSON path:
Response response = given().
header("X-Requested-With", "XMLHttpRequest").
param("username", "15211224455").
param("password", "123").
when().
post("https://xueqiu.com/snowman/login");
String res = response.asString();
JsonPath jp = new JsonPath(res);
assertEquals("20082",jp.get("error_code"));
解析Json:
ValidatableResponse response = given().
header("X-Requested-With", "XMLHttpRequest").
param("username", "15211224455").
param("password", "123").
when().
post("https://xueqiu.com/snowman/login").then();
response.log().all()
.body("error_code", equalTo("20082"));
这两种断言方式,主要是用于接口返回的JSON格式比较复杂的情况
以上所有,最近几天所学,小白刚入门,有讲的不对的地方,轻拍。