溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java基于Rest?Assured自動化測試接口怎么配置

發(fā)布時間:2023-03-21 11:20:01 來源:億速云 閱讀:133 作者:iii 欄目:開發(fā)技術

今天小編給大家分享一下Java基于Rest Assured自動化測試接口怎么配置的相關知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    什么是Rest Assured

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

    安裝Rest Assured

    在maven中引入相關依賴

    <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、請求頭或參數(shù),或任何需要滿足的先決條件。

    • 可以在“Given”中設置的內(nèi)容:URL、請求頭、請求參數(shù)和請求正文。

    2.When

    When是實際向服務器發(fā)送 HTTP 請求并獲得響應的時間??梢栽?code>When中定義請求方法,如 GET、POSTPUT 等。

    3.Then

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

    Show Me Code

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

    1.請求參數(shù)

    Java基于Rest?Assured自動化測試接口怎么配置

    2.請求頭

    Java基于Rest?Assured自動化測試接口怎么配置

    3.請求體

    Java基于Rest?Assured自動化測試接口怎么配置

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

    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() 中設置前置條件

    given().baseUri("http://127.0.0.1:8000")
        .queryParam("version", "1.0")
        .header("Authorization", "yourauthhere")
        .header("Signature", "yoursignaturehere")
        .body(jsonBody)

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

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

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

    .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();

    如何提取響應體?

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

    {
      "name": "alvin",
      "role": "SDET"
    }

    以下是我們?nèi)绾翁崛∵@些數(shù)據(jù):

    JsonPath responseBody = response.jsonPath();
    String fullName = responseBody.getString("name");
    String role = responseBody.getString("role");

    統(tǒng)一抽象封裝

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

    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");
        }
    }

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

    // 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(),我們的代碼現(xiàn)在變得簡單多了。

    以上就是“Java基于Rest Assured自動化測試接口怎么配置”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業(yè)資訊頻道。

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

    AI