前提
上一篇文章介紹了,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請求方式,同時傳了三個參數(記住我這個參數可以為空),即用戶名、密碼
雪球.png
代碼如下:
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等等,可以全部打印出來研究下
log.png
這個時候,如果我們運行這個腳本,會發現運行失敗,IDEA給出的報錯:
報錯.png
原因是被劫持掛了代理,只需要加上一句代碼就可以解決:
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格式比較復雜的情況
以上所有,最近幾天所學,小白剛入門,有講的不對的地方,輕拍。