Java基于Rest Assured自動化測試接口詳解

前言

不知道大家的項目是否都有對接口API進行自動化測試,反正像我們這種小公司是沒有的。由于最近一直被吐槽項目質量糟糕,只能研發自己看看有什么接口測試方案。那么在本文中,我將探索如何使用?Rest Assured?自動化 API 測試,Rest Assured?是一個基于 Java 的流行的用于測試?RESTful API?的庫。

什么是Rest Assured

Rest Assured?是一個基于 Java 的開源庫,主要用于測試?RESTful API。它為編寫測試用例提供了一種簡單直觀的 DSL(領域特定語言),這使得開發人員可以輕松編寫和維護自動化測試。Rest Assured?支持?GETPOSTPUTDELETEPATCH?等各種 HTTP 方法,并且可以輕松與流行的測試框架(如?TestNG?和?JUnit)集成。

github地址:https://github.com/rest-assured/rest-assured

安裝Rest Assured

在maven中引入相關依賴

1

2

3

4

5

6

<dependency>

??<groupId>io.rest-assured</groupId>

??<artifactId>rest-assured</artifactId>

??<version>5.3.0</version>

??<scope>test</scope>

</dependency>

Rest Assured結構

Rest Assured代碼的整體結構分為 3 個主要部分:

1.Given

  • Given是 API 測試的先決條件,可以在其中設置測試所需的一切,例如URL、請求頭或參數,或任何需要滿足的先決條件。
  • 可以在“Given”中設置的內容:URL、請求頭、請求參數和請求正文。

2.When

When是實際向服務器發送 HTTP 請求并獲得響應的時間。可以在When中定義請求方法,如?GETPOSTPUT?等。

3.Then

Then是您檢查從服務器獲得的響應并確保它符合您的預期的地方。在這您可以檢查狀態代碼、響應正文、標頭或任何其他對您的測試很重要的內容。

Show Me Code

我們現在通過一個例子來演示下如何使用Rest Assured,首先我們看下postman的例子:

1.請求參數

2.請求頭

3.請求體

現在我們用Rest Assured這個框架來測試下上面postman的這個接口。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

import io.restassured.builder.RequestSpecBuilder;

import io.restassured.response.Response;

import io.restassured.specification.RequestSpecification;

import org.testng.annotations.Test;

import static io.restassured.RestAssured.given;

import static org.hamcrest.Matchers.equalTo;

import static org.hamcrest.Matchers.lessThan;

public class TestRestAssured {

????@Test

????public void testMyApi() {

????????String jsonBody = "{"email":"dhadiprasetyo@gmail.com","uid":"Jzr0sOORprar10kay6CweZ5FNYP2"}";

????????Response response = given().baseUri("http://127.0.0.1:8000")

????????????.queryParam("version", "1.0")

????????????.header("Authorization", "yourauthhere")

????????????.header("Signature", "yoursignaturehere")

????????????.body(jsonBody)

????????????.when().post("/getuserdata/")

????????????.then().assertThat().statusCode(200)

????????????.header("Content-Type", "application/json")

????????????.header("Cache-Control", "max-age=3600")

????????????.body("name", equalTo("Darmawan Hadiprasetyo"))

????????????.time(lessThan(5000L))

????????????.extract().response();

????}

}

1.首先我們在?given()?中設置前置條件

1

2

3

4

5

given().baseUri("http://127.0.0.1:8000")

????.queryParam("version", "1.0")

????.header("Authorization", "yourauthhere")

????.header("Signature", "yoursignaturehere")

????.body(jsonBody)

2.然后在when()中定義請求方法,本例中為POST

1

.when().post("/getuserdata/")

3.然后我們從我們的請求中斷言狀態代碼、標頭、正文和響應時間

1

2

3

4

5

6

.then().assertThat().statusCode(200)

????.header("Content-Type", "application/json")

????.header("Cache-Control", "max-age=3600")

????.body("name", equalTo("Darmawan Hadiprasetyo"))

????.time(lessThan(5000L))

????.extract().response();

如何提取響應體?

例如,這將是我們對之前請求的回應:

1

2

3

4

{

??"name": "alvin",

??"role": "SDET"

}

以下是我們如何提取這些數據:

1

2

3

JsonPath responseBody = response.jsonPath();

String fullName = responseBody.getString("name");

String role = responseBody.getString("role");

統一抽象封裝

在大多數情況下,需要測試許多 API,但前提條件相同,例如 BaseURL、參數和請求頭等,為了消除代碼中的冗余,我們可以統一抽象封裝一個?RequestSpecification?類作為我們的規范構建器,并在我們的其他測試中重用它,如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

import io.restassured.builder.RequestSpecBuilder;

import io.restassured.path.json.JsonPath;

import io.restassured.response.Response;

import io.restassured.specification.RequestSpecification;

import org.testng.annotations.Test;

import static io.restassured.RestAssured.given;

import static org.hamcrest.Matchers.equalTo;

import static org.hamcrest.Matchers.lessThan;

public class TestRestAssured {

????public static RequestSpecification requestSpecification() {

????????return new RequestSpecBuilder().setBaseUri("http://127.0.0.1:8000")

????????????.addQueryParam("version", "1.0")

????????????.addHeader("Authorization", "yourauthhere")

????????????.addHeader("Signature", "yoursignaturehere")

????????????.build();

????}

????@Test

????public void testMyApi() {

????????String jsonBody = "{"email":"dhadiprasetyo@gmail.com","uid":"Jzr0sOORprar10kay6CweZ5FNYP2"}";

????????Response response = given().spec(requestSpecification())

????????????.body(jsonBody)

????????????.when().post("/getuserdata/")

????????????.then().assertThat().statusCode(200)

????????????.header("Content-Type", "application/json")

????????????.header("Cache-Control", "max-age=3600")

????????????.body("name", equalTo("Darmawan Hadiprasetyo"))

????????????.time(lessThan(5000L))

????????????.extract().response();

????????JsonPath responseBody = response.jsonPath();

????????String fullName = responseBody.getString("name");

????????String linkedIn = responseBody.getString("linkedin");

????????String role = responseBody.getString("role");

????}

}

現在,您可以在具有相同前提條件的任何其他需要的測試中重用?requestSpecification()?方法。查看與我們之前代碼的區別:

1

2

3

4

5

6

7

8

9

10

11

12

// previous

Response response = given().baseUri("http://127.0.0.1:8000")

????.queryParam("version", "1.0")

????.header("Authorization", "yourauthhere")

????.header("Signature", "yoursignaturehere")

????.body(jsonBody)

????.when().post("/getuserdata/")

????// then

????Response response = given().spec(requestSpecification())

????????.body(jsonBody)

????????.when().post("/getuserdata/")

通過使用?given().spec(),我們的代碼現在變得簡單多了。

?現在我也找了很多測試的朋友,做了一個分享技術的交流群,共享了很多我們收集的技術文檔和視頻教程。
如果你不想再體驗自學時找不到資源,沒人解答問題,堅持幾天便放棄的感受
可以加入我們一起交流。而且還有很多在自動化,性能,安全,測試開發等等方面有一定建樹的技術大牛
分享他們的經驗,還會分享很多直播講座和技術沙龍
可以免費學習!劃重點!開源的!!!
qq群號:485187702【暗號:csdn11】

最后感謝每一個認真閱讀我文章的人,看著粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走!?希望能幫助到你!【100%無套路免費領取】

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214300.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214300.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214300.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Java SSM框架實現寵物醫院信息管理系統項目【項目源碼】計算機畢業設計

基于java的SSM框架實現寵物醫院信息管理系統演示 java簡介 Java語言是在二十世紀末由Sun公司發布的&#xff0c;而且公開源代碼&#xff0c;這一優點吸引了許多世界各地優秀的編程愛好者&#xff0c;也使得他們開發出當時一款又一款經典好玩的小游戲。Java語言是純面向對象語言…

關于加密解密,加簽驗簽那些事

面對MD5、SHA、DES、AES、RSA等等這些名詞你是否有很多問號&#xff1f;這些名詞都是什么&#xff1f;還有什么公鑰加密、私鑰解密、私鑰加簽、公鑰驗簽。這些都什么鬼&#xff1f;或許在你日常工作沒有聽說過這些名詞&#xff0c;但是一旦你要設計一個對外訪問的接口&#xff…

聚焦中國—東盟大健康產業峰會 點靚廣西“長壽福地”品牌

12月8-10日2023中國—東盟大健康產業峰會暨大健康產業博覽會在南寧國際會展中心成功舉辦&#xff0c;本次峰會由國家中醫藥管理局、廣西壯族自治區人民政府聯合主辦&#xff0c;中國老年學和老年醫學學會、自治區黨委宣傳部、自治區民政廳、廣西壯族自治區外事辦公室、廣西壯族…

MySQL使用窗口函數ROW_NUMBER()、DENSE_RANK()查詢每組第一名或每組前幾名,窗口函數使用詳解

MySQL數據表結構 創建 tbl_class_info 表&#xff0c;表中有四個字段 id、username、score、group_name 使用 ROW_NUMBER()、DENSE_RANK() 查詢每組前三名 -- 查詢每組前3名 SELECT username, score, group_name FROM ( SELECT username, score, group_name, ROW_NUMBER()…

目標檢測——R-FCN算法解讀

論文&#xff1a;R-FCN: Object Detection via Region-based Fully Convolutional Networks 作者&#xff1a;Jifeng Dai, Yi Li, Kaiming He and Jian Sun 鏈接&#xff1a;https://arxiv.org/pdf/1605.06409v2.pdf 代碼&#xff1a;https://github.com/daijifeng001/r-fcn 文…

5.鴻蒙hap可以直接點擊包安裝嗎?

5.鴻蒙hap可以直接點擊包安裝嗎&#xff1f; hap與apk不同&#xff0c;獲取的hap不能直接安裝 安裝方法1&#xff1a; DevEco studio打開項目源文件&#xff0c;打開手機USB調試&#xff0c;DevEco識別到手機后&#xff0c;點擊播放按鈕安裝到手機 https://txwtech.blog.cs…

Rust 通用代碼生成器蓮花發布紅蓮嘗鮮版十八介紹視頻,初學者指南

Rust 通用代碼生成器蓮花發布紅蓮嘗鮮版十八介紹視頻&#xff0c;初學者指南 Rust 通用代碼生成器蓮花發布深度修復版紅蓮嘗鮮版十八介紹視頻&#xff0c;初學者指南&#xff0c;詳細介紹代碼生成器環境搭建&#xff0c;編譯&#xff0c;運行和使用代碼生成物&#xff0c;歡迎…

飛天使-linux操作的一些技巧與知識點6

文章目錄 在議playbook虛擬環境中安裝ansibleplaybook 結合變量的一些演示普通的vars_files 變量&#xff0c;在同級目錄創建目錄使用host_vars 定義變量group_vars定義變量根據不同系統操作不同版本傳遞多個外置變量舉例幾個不同的示例factswhenloophandlers 與 notifytags 任…

nginx中的正則表達式及location和rewrite

目錄 常用的Nginx 正則表達式 location和rewrite的區別 location location 大致可以分為三類 location 常用的匹配規則 location 優先級 location 示例說明 location優先級的總結 rewrite rewrite的功能 rewrite實現跳轉的條件 rewrite的執行順序 rewrite的語法格式…

ARM day3

題目&#xff1a;實現3盞燈的流水 代碼&#xff1a; .text .global _start _start: 設置RCC寄存器使能 LDR R0,0X50000A28 LDR R1,[R0] ORR R1,R1,#(0X1<<4) ORR R1,R1,#(0X1<<5) STR R1,[R0]設置PE10管腳為輸出模式 LDR R0,0X50006000 LDR R1,[R0] BIC R1,R1,…

文心ERNIE Bot SDK+LangChain:基于文檔、網頁的個性化問答系統

現在各行各業紛紛選擇接入大模型&#xff0c;其中最火且可行性最高的形式無異于智能文檔問答助手&#xff0c;而LangChain是其中主流技術實現工具&#xff0c;能夠輕松讓大語言模型與外部數據相結合&#xff0c;從而構建智能問答系統。ERNIE Bot SDK已接入文心大模型4.0能力&am…

如何使用Imagewheel本地搭建一個簡單的的私人圖床公網可訪問?

文章目錄 1.前言2. Imagewheel網站搭建2.1. Imagewheel下載和安裝2.2. Imagewheel網頁測試2.3.cpolar的安裝和注冊 3.本地網頁發布3.1.Cpolar臨時數據隧道3.2.Cpolar穩定隧道&#xff08;云端設置&#xff09;3.3.Cpolar穩定隧道&#xff08;本地設置&#xff09; 4.公網訪問測…

Java:字符流 文件輸出 與 讀入 方法

Java&#xff1a;字節流 文件輸出與讀入方法 并 實現文件拷貝 文章目錄 字符流FileReaderFileWrite 字符流 字符流底層就是字節流。 字符流 字節流 字符集 特點&#xff1a; 輸入流&#xff1a;一次讀入一個字節&#xff0c;遇到中文時&#xff0c;一次讀多個字節。 輸出流…

POJ-2777 Count Color

經典區間染色板子題 #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int N 1e610; struct Segment{int l,r,id; }tr[N<<2]; int n,color,m;void pushdown(int u){if(tr[u].id){tr[u<<1].id tr[u<&l…

P5707 【深基2.例12】上學遲到題解

題目 學校和 yyy 的家之間的距離為s米&#xff0c;而 yyy 以v米每分鐘的速度勻速走向學校。 在上學的路上&#xff0c;yyy 還要額外花費10分鐘的時間進行垃圾分類。 學校要求必須在上午8:00到達&#xff0c;請計算在不遲到的前提下&#xff0c;yyy 最晚能什么時候出門。 由…

python中PDF2docx運行時出現錯誤提示:pixmap must be grayscale or rgb to write as png,怎樣解決?

這是由于pixmap&#xff08;像素圖&#xff09;的顏色空間不是灰度或RGB而導致的。可能是因為PDF2docx試圖將不支持的顏色空間轉換為PNG格式造成的。 要解決此問題&#xff0c;可以嘗試以下幾個步驟&#xff1a; 1.升級pdf2docx到最新版本。有時候最新版本已經解決了這個問題…

【影像組學入門百問】1#---#3

#1-影像組學的常規步驟是怎么樣的&#xff1f; 傳統影像組學的步驟包括&#xff1a; 1、影像獲取及預處理&#xff1b; 2、感興趣區(ROI)標定&#xff1b; 3、影像組學特征提取&#xff1b; 4、特征降維&#xff1b; 5、模型建立、優化。 #2-做影像組學用的電腦硬件配置有什么…

計算機視覺之手勢、面部、姿勢捕捉以Python Mediapipe為工具

計算機視覺之手勢、面部、姿勢捕捉以 Python Mediapipe為工具 文章目錄 1.Mediapipe庫概述2.手勢捕捉(hands)3.面部捕捉(face)4.姿勢捕捉(pose) 1.Mediapipe庫概述 Mediapipe是一個開源且強大的Python庫&#xff0c;由Google開發和維護。它提供了豐富的工具和功能&#xff0c…

ExecuteScalar()方法

ExecuteScalar()方法 大家好&#xff0c;我是免費搭建查券返利機器人賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天&#xff0c;我們將深入探討數據庫編程中的一個關鍵主題——ExecuteScalar()方法&#xff…