<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # REST 保證教程:如何使用示例測試 API > 原文: [https://www.guru99.com/rest-assured.html](https://www.guru99.com/rest-assured.html) ## 什么是安心? **保證放心**使您可以使用 Java 庫測試 REST API,并與 Maven 很好地集成。 它具有非常有效的匹配技術,因此斷言您的預期結果也非常簡單。 無論 JSON 結構多么復雜,Rest Assured 都具有從請求和響應的幾乎每個部分獲取數據的方法。 對于測試社區而言,API 自動化測試仍然是新興且小眾的。 JSON 的復雜性使 API 測試無法進行。 但這并沒有使它在測試過程中不那么重要。 Rest Assured.io 框架使用核心 Java 基礎知識使其變得非常簡單,這使它成為非常值得學習的東西。 在本教程中,您將學習, * [什么是放心的?](#1) * [為什么需要安心?](#2) * [逐步指南,用于設置 Rest Assured.io](#3) * [第一個簡單的 Rest Assured 腳本](#4) * [用于獲取響應的不同部分的腳本](#5) ## 為什么需要安心? 想象一下,您打開了 Google 地圖視圖并尋找了想要去的地方,立即看到附近的餐館,看到了通勤路線的選項; 從一些領先的旅游提供商那里獲得,觸手可及的眾多選擇。 我們都知道它們不是 Google 產品,那么 Google 如何顯示它。 他們使用這些提供程序的公開 API。 現在,如果要求您測試這種設置,甚至在構建 UI 或正在開發 UI 之前,測試 API 都變得非常重要,并使用不同的數據組合對其進行重復測試,這非常適合自動化。 早些時候,我們使用諸如 groovy,ruby 之類的動態語言來實現這一目標,這極具挑戰性。 因此,功能測試并未探索 API 測試。 但是,如果使用具有 Java 基本背景的 API,則可以使用 Rest Assured 對 API 進行自動化測試,以用戶友好的自定義方式發送簡單的 https 請求非常簡單。 需要了解 API 測試和集成測試,但需要指出的是,自動化的“確保有保證”對后端提供了很好的信心,而前端測試可以僅專注于 UI 和客戶端操作。 Rest Assured 是開放源代碼,具有許多其他方法,并且添加了庫,使其成為 API 自動化的理想選擇。 ## 逐步指南,用于設置 Rest Assured.io 步驟 1)安裝 Java。 請參閱本[指南](https://www.guru99.com/install-java.html) 步驟 2)下載一個 IDE 開始: [eclipse](https://www.eclipse.org/downloads/) 步驟 3)InstallMaven 并設置您的 Eclipse。 在處參考[。](https://www.guru99.com/maven-jenkins-with-selenium-complete-tutorial.html) ### 設置放心 1. 在您的 IDE 中創建一個 Maven 項目。 我們正在使用 Intellij,但是您可能會在使用的任何 IDE 上獲得類似的結構。 2. 打開您的 POM.xml <center> <figure>![](https://img.kancloud.cn/25/06/250636e3e195a533dfb6e75d77817982_594x324.png) <figcaption style="display: table;">Project structure</figcaption> </figure> </center> 對于 Rest Assured.io:對于 Java 版本< 9 個用戶: 將以下依賴項添加到您的 POM.xml 中: ``` <dependency> <groupId>io.rest-assured</groupId> <artifactId>json-path</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>xml-path</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>json-schema-validator</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> ``` 對于 Rest Assured.io:對于 Java 9+版本的用戶: ``` <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> ``` ### 故障排除: 如果您看到錯誤并且不確定依賴項是否下載正確, 1. 執行 maven 構建以導入所有依賴項,同樣,您會在 guru99 上找到的 Maven 設置方面獲得幫助。 2. 盡管如此,您仍然會看到錯誤,然后先進行 maven 清理,再進行 maven 安裝,并且它應該可以正確構建。 3. 您可以在 Java 類中添加以下行,然后查看沒有編譯錯誤。 ``` import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*; ``` ## 第一個簡單的 Rest Assured 腳本 ### 句法: Rest Assured.io 的語法是最漂亮的部分,因為它非常像 BDD 并且易于理解。 ``` Given(). param("x", "y"). header("z", "w"). when(). Method(). Then(). statusCode(XXX). body("x, ”y", equalTo("z")); ``` ### **說明:** | 碼 | 說明 | | 給定() | “給定”關鍵字,可讓您設置背景,在這里,您傳遞請求標頭,查詢和路徑參數,正文,cookie。 如果請求中不需要這些項目,則這是可選的 | | 什么時候() | “何時”關鍵字標志著您的情況的前提。 例如,“當”您獲得/張貼/放置某些東西時,做其他事情。 | | 方法() | 用任何 CRUD 操作替換它(獲取/發布/放入/刪除) | | 然后() | 你的斷言和匹配條件在這里 | 現在您已經有了語法的設置和一些背景知識,讓我們創建我們的第一個簡單測試。 到目前為止,這種結構對您來說似乎還不錯,隨著您對每一行代碼的進一步解釋,您將了解它的本質。 ### **您將獲取什么?** 打開瀏覽器,然后點擊- [http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195 & PASSWORD = 1234! & Account_No = 1](http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1) 。 確保您看到以下內容。 ![](https://img.kancloud.cn/9c/01/9c01800162085328acd5b06f8f380614_879x376.png) 如果您嘗試獲取請求的響應時瀏覽器出現錯誤, 1. 查看您是否使用過 Https 或 Http。 您的瀏覽器可能具有無法打開不安全網站的設置。 2. 查看是否有代理或防火墻阻止瀏覽器打開網站。 * **注意** –您在此處未使用任何標題,沒有正文,也沒有 cookie。 這是一個 URL,而且您正在從 API 獲取內容,而不是發布或更新任何現有內容,因此使其成為 GET 調用。 記住這一點,以更好地了解我們的第一個測試。 ### 測試目標: 腳本的目標是在 IDE 控制臺上打印與通過 Rest Assured 在瀏覽器上收到的輸出相同的輸出。 讓我們通過以下步驟對此進行編碼: ### 獲取響應主體 **步驟 1)**創建一個名為“ myFirstRestAssuredClass”的類 **步驟 2)**創建一個名為“ getResponseBody”的方法 **步驟 3)**與給定的先前學習的結構類似,何時然后鍵入以下代碼 給定()。 ->不需要標題,沒有查詢或路徑參數。 什么時候()。 ->未設置特定條件 get(' [http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195 & PASSWORD = 1234!& Account_No = 1](http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1) ')。 ->僅需提供網址 然后()。 ->不需要特定的斷言 log()。 all()->獲取所有響應后,記錄響應,標頭,本質上是請求返回給您的所有內容。 ``` public static void getResponseBody(){ given().when().get("http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log() .all(); } ``` 現在請注意,使用的 URL 較長且可讀性較差,如果仔細觀察,您會注意到正在使用 3 個查詢參數,分別是 1. 顧客 ID 2. 密碼 3. 戶口號碼 保證安全,幫助我們分別傳遞每個部分(查詢,路徑,標頭參數),使代碼更易讀和易于維護。 同樣,我們可以根據需要參數化來自外部文件的數據。 對于使用查詢參數,我們返回到語法定義,然后將所有語法作為給定的一部分傳遞。 ``` public static void getResponseBody(){ given().queryParam("CUSTOMER_ID","68195") .queryParam("PASSWORD","1234!") .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").then().log() .body(); } ``` **請注意,我們使用“ body”代替“ all”; 這有助于我們僅提取響應的主體。 **輸出:** <center> <figure>![](https://img.kancloud.cn/b9/a0/b9a0f9c6fd8c044c6be552d03742f57e_755x648.png) <figcaption style="display: table;">Output for getResponseBody</figcaption> </figure> </center> ### 獲取響應狀態代碼 我們編寫腳本的下一個方法將是獲取狀態代碼,并放置一個斷言以驗證該狀態碼。 **步驟 1)**創建一個名為 getResponseStatus()的方法 **步驟 2)**使用與上面相同的請求結構。 復制并粘貼。 **步驟 3)**而不是將其記錄下來,我們使用 Rest Assured 的'getStatusCode'內置方法來獲取狀態碼值 **步驟 4)**為了聲明您的狀態碼為 200,我們使用關鍵字-assertThat()。statusCode(expectedCode) **注意-URL 是用于簡化的變量。 URL 包含整個 API 請求 URL ``` public static void getResponseStatus(){ int statusCode= given().queryParam("CUSTOMER_ID","68195") .queryParam("PASSWORD","1234!") .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode(); System.out.println("The response status is "+statusCode); given().when().get(url).then().assertThat().statusCode(200); } ``` **Output:** <center> <figure>![](https://img.kancloud.cn/b2/20/b220ea66f2a41ab0553abb7572c947a1_559x49.png) <figcaption style="display: table;">Output for getResponseStatus</figcaption> </figure> </center> **業務需求** 自動化的基本規則之一是,我們必須放置檢查點,以便僅在滿足所有必需條件的情況下進行測試。 在 API 測試中,最基本的驗證是檢查請求的狀態碼是否為 2XX 格式。 到目前為止的完整代碼: ``` import java.util.ArrayList; import static io.restassured.RestAssured.*; import static java.util.concurrent.TimeUnit.MILLISECONDS; public class myFirstRestAssuredClass { final static String url="http://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1"; public static void main(String args[]) { getResponseBody(); getResponseStatus(); ; } //This will fetch the response body as is and log it. given and when are optional here public static void getResponseBody(){ given().when().get(url).then().log() .all(); given().queryParam("CUSTOMER_ID","68195") .queryParam("PASSWORD","1234!") .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").then().log().body(); } public static void getResponseStatus(){ int statusCode= given().queryParam("CUSTOMER_ID","68195") .queryParam("PASSWORD","1234!") .queryParam("Account_No","1") .when().get("http://demo.guru99.com/V4/sinkministatement.php").getStatusCode(); System.out.println("The response status is "+statusCode); given().when().get(url).then().assertThat().statusCode(200); } } ``` ***注意:** 1. 200 是此情況的成功響應。 有時,您也需要請求失敗,然后才可以使用 4XX 或 5XX。 請嘗試通過提供無效參數來更改狀態代碼并進行檢查。 2. 當我們斷言一個條件時,除非有錯誤,否則控制臺上將不會進行任何打印。 ## 用于獲取響應的不同部分的腳本 上面的部分已經介紹了獲取響應主體和響應狀態代碼。 值得注意的是,要獲取響應的不同部分,關鍵字“提取”非常重要。 ### 標頭 Rest Assured 是一種非常簡單的語言,獲取標頭也很簡單。 方法名稱是 headers()。 像以前一樣,我們將創建一個獨立的方法來執行相同的操作。 ``` public static void getResponseHeaders(){ System.out.println("The headers in the response "+ get(url).then().extract() .headers()); } ``` 請注意,這里跳過了'given()。when()',而代碼行從 get()開始,這是因為這里沒有進行任何先決條件或驗證來達到請求并獲得響應。 在這種情況下,可以選擇使用相同的選項。 **輸出:** <center> <figure>![](https://img.kancloud.cn/e6/fa/e6fae511c6984f36b8472b17aecaa908_660x344.png) <figcaption style="display: table;">Output for getResponseHeader</figcaption> </figure> </center> **業務需求:** 有時,您需要為后續請求使用授權令牌或會話 cookie,而且大多數情況下,這些詳細信息將作為響應的標頭返回。 ### 響應時間 為了獲得從后端或其他下游系統獲取響應所需的時間,Rest Assured 提供了一種名為“ timeIn”的方法,該方法具有合適的 timeUnit 來獲取返回響應所花費的時間。 ``` public static void getResponseTime(){ System.out.println("The time taken to fetch the response "+get(url) .timeIn(TimeUnit.MILLISECONDS) + " milliseconds"); } ``` **Output:** <center> <figure>![](https://img.kancloud.cn/1b/f4/1bf4d4be31dacfca83f92ae6b21ecc94_591x48.png) <figcaption style="display: table;">Output for getResponseTime</figcaption> </figure> </center> **業務需求:** 測試 API 的一個非常重要的功能是它們的響應時間,以衡量應用程序的性能。 請注意,呼叫所花費的時間可能會花費更多或更少的時間,具體取決于您的互聯網速度,當時的 API 性能,服務器負載以及其他影響時間的因素。 ### 內容類型 您可以獲得使用方法“ contentType()”返回的響應的 content-Type。 ``` public static void getResponseContentType(){ System.out.println("The content type of response "+ get(url).then().extract() .contentType()); } ``` 輸出量 <center> <figure>![](https://img.kancloud.cn/a0/7a/a07a77edca34deab2ba0a4814ac2b3de_607x39.png) <figcaption style="display: table;">Output for getContentType</figcaption> </figure> </center> **業務需求:** 有時,獲取內容類型對于確保任何跨域威脅都沒有安全漏洞,或者只是確保所傳遞的內容符合 API 標準至關重要。 ### 獲取單個 JSON 元素 從給定的響應中,要求您計算總金額,您需要提取每個金額并將其匯總。 **步驟:** **步驟 1)**數量字段位于具有“聲明”鍵的數組內,該數組又位于具有“結果”鍵的列表中 **步驟 2)**放心,提供了一種使用“路徑”在 API 中獲取值的機制 **步驟 3)**達到金額的路徑是“ result.statements.AMOUNT”。 可以將它想像硒中的 Xpath。 **步驟 4)**提取集合中的所有金額,然后循環查找所有值以計算總和 ``` public static void getSpecificPartOfResponseBody(){ ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ; int sumOfAll=0; for(String a:amounts){ System.out.println("The amount value fetched is "+a); sumOfAll=sumOfAll+Integer.valueOf(a); } System.out.println("The total amount is "+sumOfAll); } ``` 注意:由于數量值是字符串數據類型,因此我們將轉換為整數并將其用于求和。 **Output:** <center> <figure>![](https://img.kancloud.cn/b7/08/b70857405b0120623651ec03a5bcdfcb_412x151.png) <figcaption style="display: table;">Output for getSpecificPartOfResponse</figcaption> </figure> </center> ### 摘要: * Rest Assured 是一組 Java 庫,使我們能夠自動化 Rest API 測試 * Rest Assured 是基于 Java 的,對于 Java 的了解足以滿足需要 * 它有助于從復雜的 JSON 結構中獲取請求和響應的值 * 可以使用各種標頭,查詢,路徑參數以及要設置的任何會話或 cookie 來定制 API 請求。 * 它有助于設置斷言語句和條件。 * 當響應為 JSON 類型時,雖然 Rest Assured 很有幫助,但如果內容類型為 HTML 或純文本,則該方法可能無法無縫運行。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看