前提
上一篇文章介紹了,Rest-Assured的環(huán)境搭建庭呜,光說不練假把式,對(duì)著官方文檔厅缺,寫一個(gè)簡(jiǎn)單的post請(qǐng)求罢吃,先入門楚午。
學(xué)習(xí)的重要資料還是 官方文檔 ,這篇文章重點(diǎn)也是對(duì)照官方文檔寫的尿招。
示例
官方示例
先看官方給的一個(gè)例子:
假設(shè)一個(gè)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]
}]
}
}
如果要驗(yàn)證這個(gè)接口的返回值對(duì)不對(duì)矾柜,一個(gè)簡(jiǎn)單的例子:
get("/lotto").then().body("lotto.lottoId", equalTo(5));
這個(gè)可以驗(yàn)證返回的lottoID是不是5
上面是一個(gè)簡(jiǎn)單的get請(qǐng)求,同樣官方也提供了post請(qǐng)求的示例就谜,看完官方的兩個(gè)請(qǐng)求之后怪蔑,再以 雪球 為例,簡(jiǎn)單介紹post 請(qǐng)求及其他斷言方式:
假設(shè)一個(gè)url http://localhost:8080/greetXML 接口返回的內(nèi)容是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")).
如果想同時(shí)驗(yàn)證firstname 和 lastname 可以這樣寫:
given().
parameters("firstName", "John", "lastName", "Doe").
when().
post("/greetXML").
then().
body("greeting.firstName", equalTo("John")).
body("greeting.lastName", equalTo("Doe"));
或者簡(jiǎn)單些:
with().parameters("firstName", "John", "lastName","Doe").when().post("/greetXML").then().body("greeting.firstName", equalTo("John"), "greeting.lastName", equalTo("Doe"));
上面是官方的兩個(gè)例子缆瓣,比較簡(jiǎn)單,下面以雪球登錄為例虹统,簡(jiǎn)單的介紹一下post請(qǐng)求
雪球?yàn)槔?/h5>
首先登錄雪球弓坞,隨便輸入一個(gè)號(hào)碼和錯(cuò)誤的密碼,打開開發(fā)者選項(xiàng)车荔,可以看到這個(gè)登錄時(shí)post請(qǐng)求方式渡冻,同時(shí)傳了三個(gè)參數(shù)(記住我這個(gè)參數(shù)可以為空),即用戶名忧便、密碼
代碼如下:
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("用戶名或密碼錯(cuò)誤")).
body("error_code",equalTo("20082"));
這邊加上了log().all().就是打印所有的信息族吻,類似的可打印cookie、headers珠增、status等等超歌,可以全部打印出來研究下
這個(gè)時(shí)候,如果我們運(yùn)行這個(gè)腳本蒂教,會(huì)發(fā)現(xiàn)運(yùn)行失敗巍举,IDEA給出的報(bào)錯(cuò):
原因是被劫持掛了代理,只需要加上一句代碼就可以解決:
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格式比較復(fù)雜的情況
以上所有禀综,最近幾天所學(xué),小白剛?cè)腴T苔严,有講的不對(duì)的地方定枷,輕拍。