一碧注、rest-assured介紹
rest-assured是github上一個開源項目重付。
地址:https://github.com/rest-assured/rest-assured
作者言:
Testing and validation of REST services in Java is harder than in dynamic languages such as Ruby and Groovy. REST Assured brings the simplicity of using these languages into the Java domain.
優(yōu)點(diǎn):
簡約的接口測試DSL
支持xml json的結(jié)構(gòu)化解析
支持xpath jsonpath gpath等多種解析方式
對spring的支持比較全面
二稠氮、restassured接口測試步驟
- IDEA創(chuàng)建maven項目
- 添加依賴 restassured junit
- 編寫用例
- 添加斷言
- 調(diào)試
三耘戚、demo演練
在IDEA中新建一個maven項目祷舀,then……
- pom.xml文件中添加依賴:
<dependencies>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
- src/test/java下new一個RestDemo.class
開源wiki中說需要Static imports一下幾個包。即靜態(tài)導(dǎo)入:
import static io.restassured.RestAssured.given;
import static io.restassured.matcher.RestAssuredMatchers.*;
import static org.hamcrest.Matchers.*;
- 最簡單的代碼:
public class RestDemo {
@Test
public void testGetHtml(){
given().get("http://www.baidu.com").then().statusCode(200);
}
}
表示發(fā)送一個get請求码泛,url是http://www.baidu.com渣玲,then()
是斷言,statusCode(200)
是響應(yīng)狀態(tài)碼等于200弟晚。
- 打印log
public class RestDemo {
@Test
public void testGetHtml(){
given().log().all().get("http://www.baidu.com").then().log().all().statusCode(200);
}
log().all()
:打印所有l(wèi)og忘衍,可以查看有請求和響應(yīng)的信息
可以使用這樣的格式寫:
//百度搜索Mp3
@Test
public void testMp3(){
given()
.get("http://www.baidu.com/s?wd=mp3")
.then().log().all().statusCode(200);
}
- restassured最期望的格式:
@Test
public void testMp3(){
given()
.queryParam("wd","mp3")
.when()
.get("http://www.baidu.com/s")
.then()
.log().all()
.statusCode(200);
}
}
given()
:一次網(wǎng)絡(luò)請求所需要的條件都寫在這里,頭信息卿城、query參數(shù)
when()
:觸發(fā)條件
then()
:斷言
-
demo演練:
(1)抓取真實接口枚钓,以xueqiu.com搜索接口為例
(2)new一個Xueqiu.class文件
public class Xueqiu {
@Test
public void testSearch() {
given()
.queryParam("code", "sogo")
.when()
.get("https://xueqiu.com/stock/search.json")
.then()
.log().all()
.statusCode(200);
}
}
(3)run一下,提示錯誤:
(4)打印log,查找錯誤:
通過與f12抓的包對比瑟押,發(fā)現(xiàn)Cookie沒有值:
復(fù)制抓到的Cookie值
現(xiàn)在請求可以正常發(fā)送搀捷,也有結(jié)果返回了,根據(jù)結(jié)果修改我們的斷言多望。
(5)調(diào)整斷言:斷言stocks下面的name值為搜狗:
.body("stocks.name",hasItems("搜狗"));
stocks.name
:根節(jié)點(diǎn).子節(jié)點(diǎn)
.body()
可以無限的寫下去image.png
當(dāng)實際結(jié)果不符合斷言會怎樣呢嫩舟?
假如我們把斷言改成“sogo”,讓其實際結(jié)果不符合預(yù)期
.body("stocks.code",hasItems("sogo"))
7.demo演練代碼
import org.junit.Test;
import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.hasItems;
public class Xueqiu {
@Test
public void testSearch() {
//given開頭表示輸入數(shù)據(jù)
given().log().all()
//query請求參數(shù)
.queryParam("code", "sogo")
//頭信息
.header("Cookie","_ga=GA1.2.506579530.1552574503; device_id=0158c91c7ecd8e4d248a54002af6d8ae; aliyungf_tc=AQAAAIatGzFrQgoAJGDMeOsikkxtPFqv; xq_a_token=682c39a460645dafb1ff41f67e0efccba8b0f118; xq_a_token.sig=Bg9acTC-woVSsS6DZvdAtd40CQU; xq_r_token=798a7cab8cd606f61a09fbac15374f1172b00607; xq_r_token.sig=sHSWFNmu_GqEUOK9A-6umfNgFcU; _gid=GA1.2.841306833.1553178554; Hm_lvt_1db88642e346389874251b5a1eded6e3=1552574504,1552736056,1553178554; u=881553178554746; _gat=1; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1553180196")
//when表示觸發(fā)條件
.when()
.get("https://xueqiu.com/stock/search.json")
//then對結(jié)果斷言
.then()
//打印log
.log().all()
//斷言狀態(tài)碼
.statusCode(200)
//字段斷言
.body("stocks.name",hasItems("搜狗"))
.body("stocks.code",hasItems("sogo"));
}
}