Java接口測(cè)試框架Restassured介紹及常用方法
更新時(shí)間:2026年03月27日 10:34:23 作者:Yweir
Java接口測(cè)試主要用于驗(yàn)證Java應(yīng)用程序中不同模塊或服務(wù)之間的交互是否符合預(yù)期,這篇文章主要介紹了Java接口測(cè)試框架Restassured介紹及常用方法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
接口測(cè)試框架Restassured介紹
市場(chǎng)上的主流的接口測(cè)試框架
- Postman:提供了類(lèi)似RestAssured的功能,包括請(qǐng)求發(fā)送、斷言和響應(yīng)處理等。
- Apache HttpClient:一個(gè)用于發(fā)送HTTP請(qǐng)求的Java庫(kù),提供了更底層的控制和定制化。
- JUnit:雖然JUnit主要用于單元測(cè)試,但它可以與RestAssured等庫(kù)集成,用于編寫(xiě)針對(duì)API接口的集成測(cè)試。
- MockMvc:是Spring框架下的一個(gè)模擬框架,用于模擬Web請(qǐng)求和響應(yīng)
接口測(cè)試框架【Restassured】
- 一個(gè)基于Java的輕量級(jí)接口測(cè)試框架,主要用于簡(jiǎn)化基于HTTP協(xié)議的接口測(cè)試,簡(jiǎn)單易用、功能強(qiáng)大、可擴(kuò)展性好
- 官網(wǎng):http://rest-assured.io
- 優(yōu)點(diǎn)
- 簡(jiǎn)單易用,RestAssured提供了簡(jiǎn)單易用的API,可以輕松地編寫(xiě)測(cè)試代碼。
- 功能強(qiáng)大,支持多種請(qǐng)求方法、斷言和驗(yàn)證響應(yīng)內(nèi)容、狀態(tài)碼、響應(yīng)時(shí)間等特性
- 可擴(kuò)展性好,RestAssured可以與TestNG、JUnit等測(cè)試框架完美集成
- 支持多種數(shù)據(jù)格式處理,RestAssured可以處理JSON和XML格式的數(shù)據(jù)
- 支持結(jié)構(gòu)化解析和多種解析方式,支持xpath/jsonpath/gpath等解析方式
- 對(duì)Spring的支持比較全面,方便使用Spring框架的開(kāi)發(fā)者
- 缺點(diǎn)
- 依賴(lài)性強(qiáng):RestAssured依賴(lài)于Java和HTTP協(xié)議,對(duì)于非Java或非HTTP協(xié)議的接口可能不太適用
- 需要配置測(cè)試環(huán)境:在使用RestAssured進(jìn)行接口自動(dòng)化測(cè)試之前,需要搭建相應(yīng)的測(cè)試環(huán)境,包括服務(wù)器、數(shù)據(jù)庫(kù)等。
- 非0基礎(chǔ)上手:雖然RestAssured提供了簡(jiǎn)單易用的API,但對(duì)于初學(xué)者來(lái)說(shuō),仍然需要一定的學(xué)習(xí)成本才能掌握。
SpringBoot3.X整合
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured-all</artifactId>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>spring-web-test-client</artifactId>
</dependency>快速開(kāi)始
- given:設(shè)置測(cè)試預(yù)設(shè),包括請(qǐng)求頭、請(qǐng)求參數(shù)、請(qǐng)求體、cookie等
- when:所要執(zhí)行的操作,配置發(fā)起請(qǐng)求的網(wǎng)址(GET / POST 請(qǐng)求)
- then:解析結(jié)果、斷言
@SpringBootTest
public class AssuredTest {
@Test
public void testBase() {
RestAssured.given()
.param("id", 1)
.when()
.get("http://127.0.0.1:8082/api/v1/test/detail")
.then()
.log()
.all()
.statusCode(200);
}
}Restassured框架常用方法
基礎(chǔ)語(yǔ)法格式
- RestAssured的語(yǔ)法采用簡(jiǎn)潔的鏈?zhǔn)秸{(diào)用方式
- 以
given()開(kāi)始,設(shè)置測(cè)試預(yù)設(shè),包括請(qǐng)求頭、請(qǐng)求參數(shù)、請(qǐng)求體、cookie等; - 然后使用
when()指定請(qǐng)求的URL(GET、POST等請(qǐng)求) - 最后使用
then()進(jìn)行斷言和解析響應(yīng)結(jié)果
參數(shù)配置
- 請(qǐng)求頭參數(shù):使用
header()方法設(shè)置請(qǐng)求頭信息,例如“header(“Content-Type”, “application/json”)”。 - 請(qǐng)求參數(shù)
- 對(duì)于GET請(qǐng)求,使用“param()”方法設(shè)置URL參數(shù),例如“param(“key”, “value”)”;
- 對(duì)于POST請(qǐng)求,可以使用“body()”方法設(shè)置請(qǐng)求體內(nèi)容
- 文件上傳
- 提供
multiPart()的方法可以指定文件(file)、字節(jié)數(shù)組(byte-array)、輸入流或者是上傳文件
- 提供
示例
- GET 請(qǐng)求
- log()可以向控制臺(tái)輸出返回的信息
- log().all() 可以返回所有響應(yīng)中的數(shù)據(jù)
@Test
public void testBase() {
RestAssured.given()
.queryParam("id", 1)
.when()
.get("http://127.0.0.1:8082/api/v1/test/detail")
.then()
.log().all()
.statusCode(200);
}- POST方式form表單
@Test
public void testPostForm(){
RestAssured.given()
.formParam("mail", "1320801376@sina.com")
.formParam("pwd","123456")
.when()
.post("http://127.0.0.1:8082/api/v1/test/login_form")
.then()
.log().all()
.statusCode(200);
}- POST方式j(luò)son+header
@Test
public void testPostJsonHeader(){
Map<String,String> params = new HashMap<>();
params.put("title","山海經(jīng)傳奇");
RestAssured.given()
.header("token","7a9b7dcbba2443c5a80fbfa62da63e69")
//.header("Content-Type","application/json")
.contentType(ContentType.JSON)
.body(JsonUtil.obj2Json(params))
.when()
.post("http://127.0.0.1:8082/api/v1/test/buy")
.then()
.log()
.all()
.statusCode(200);- 文件上傳
@Test
public void testFile(){
RestAssured.given()
.multiPart(new File("/Users/xdclass/Desktop/測(cè)試jmx/id.csv"))
.when()
.post("http://127.0.0.1:8082/api/v1/test/upload")
.then()
.log().all()
.statusCode(200);
}斷言與解析
響應(yīng)斷言
- 使用
statusCode()方法指定期望的響應(yīng)狀態(tài)碼,例如statusCode(200); - 還可以使用
body()方法對(duì)響應(yīng)內(nèi)容進(jìn)行斷言,例如body("key", equalTo("value"))
| 類(lèi)型 | 斷言方法 | 含義 |
|---|---|---|
| 狀態(tài)碼 | statusCode() | 響應(yīng)狀態(tài)碼 |
| 響應(yīng)頭 | header() | 響應(yīng)頭信息 |
| 內(nèi)容 | body() | 內(nèi)容匹配 |
內(nèi)置結(jié)果解析
- 自帶GPath解析
- 是來(lái)自groovy 編程語(yǔ)言的廣泛使用的 XML 和 JSON 解析器 GPath可以處理html、xml、json
- 跟JSONpath的區(qū)別就是不需要從$開(kāi)始寫(xiě)了,GPATH直接從JSON消息的第一層數(shù)據(jù)開(kāi)始
- 通過(guò)
extract().response()將響應(yīng)結(jié)果保存到Response類(lèi)型的變量,使用Gpath提取響應(yīng)中的某一個(gè)具體的數(shù)據(jù)- 提取JSON:
res.jsonPath().get(“XXX.XXX.XXX”); - 提取xml:
res.xmlPath().get(“XXX.XXX.XXX”); - 提取HTML:
res.htmlPath().get(“XXX.XXX.XXX”);
- 提取JSON:
- JSON解析
- 支持對(duì)JSON格式的響應(yīng)數(shù)據(jù)進(jìn)行解析,可以使用
jsonPath()方法指定JSON路徑進(jìn)行查詢(xún)和斷言。
- 支持對(duì)JSON格式的響應(yīng)數(shù)據(jù)進(jìn)行解析,可以使用
- XML解析
- 支持對(duì)XML格式的響應(yīng)數(shù)據(jù)進(jìn)行解析,可以使用
xmlPath()方法指定XML路徑進(jìn)行查詢(xún)和斷言。
- 支持對(duì)XML格式的響應(yīng)數(shù)據(jù)進(jìn)行解析,可以使用
示例
斷言測(cè)試
@Test
public void testAssert(){
Map<String,String> params = new HashMap<>();
params.put("title","山海經(jīng)傳奇");
RestAssured.given()
.header("token","7a9b7dcbba2443c5a80fbfa62da63e69")
.header("Content-Type","application/json")
.body(JsonUtil.obj2Json(params))
.when()
.post("http://127.0.0.1:8082/api/v1/test/buy")
.then()
.log()
.all()
.statusCode(200)
.body("code", equalTo(1));
}結(jié)果解析
@Test
public void testResponse(){
Map<String,String> params = new HashMap<>();
params.put("title","山海經(jīng)傳奇");
Response response = RestAssured.given()
.header("token", "7a9b7dcbba2443c5a80fbfa62da63e69")
//.header("Content-Type","application/json")
.contentType(ContentType.JSON)
.body(JsonUtil.obj2Json(params))
.log().headers()//打印請(qǐng)求頭
.log().body()//打印請(qǐng)求體
.when()
.post("http://127.0.0.1:8082/api/v1/test/buy")
.then()
.log()
.all()
.statusCode(200).extract().response();
Object data = response.jsonPath().get("data");
System.out.println(data);
}總結(jié)
到此這篇關(guān)于Java接口測(cè)試框架Restassured介紹及常用方法的文章就介紹到這了,更多相關(guān)Java接口測(cè)試框架Restassured內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Java實(shí)現(xiàn)qq郵箱發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了使用Java實(shí)現(xiàn)qq郵箱發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2010-05-05
APT?注解處理器實(shí)現(xiàn)?Lombok?常用注解功能詳解
這篇文章主要為大家介紹了使用APT?注解處理器實(shí)現(xiàn)?Lombok?常用注解功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
對(duì)象轉(zhuǎn)Json字符串時(shí)如何忽略指定屬性
這篇文章主要介紹了對(duì)象轉(zhuǎn)Json字符串時(shí)如何忽略指定屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
SpringCloud網(wǎng)關(guān)Gateway架構(gòu)解析
這篇文章主要介紹了SpringCloud網(wǎng)關(guān)Gateway架構(gòu)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03

