精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何自動化測試你的接口?

jf_78858299 ? 來源:JAVA旭陽 ? 作者:JAVA旭陽 ? 2023-04-07 15:29 ? 次閱讀

前言

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

什么是Rest Assured?

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

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

安裝Rest Assured

在maven中引入相關依賴

<dependency>
  <groupId>io.rest-assured<span class="hljs-name"groupId>
  <artifactId>rest-assured<span class="hljs-name"artifactId>
  <version>5.3.0<span class="hljs-name"version>
  <scope>test<span class="hljs-name"scope>
<span class="hljs-name"dependency>

Rest Assured結構

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

  1. Given
  • Given是 API 測試的先決條件,可以在其中設置測試所需的一切,例如URL、請求頭或參數,或任何需要滿足的先決條件。
  • 可以在“Given”中設置的內容:URL、請求頭、請求參數和請求正文。
  1. When
  • When是實際向服務器發送 HTTP 請求并獲得響應的時間。可以在When中定義請求方法,如 GETPOSTPUT 等。
  1. Then
  • Then是您檢查從服務器獲得的響應并確保它符合您的預期的地方。在這您可以檢查狀態代碼、響應正文、標頭或任何其他對您的測試很重要的內容。

Show Me Code

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

  1. 請求參數

圖片

  1. 請求頭

圖片

  1. 請求體

圖片

現在我們用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)
  1. 然后在when()中定義請求方法,本例中為POST
.when().post("/getuserdata/")
  1. 然后我們從我們的請求中斷言狀態代碼、標頭、正文和響應時間
.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"
}

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

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

統一抽象封裝

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

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() 方法。查看與我們之前代碼的區別:

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2958

    瀏覽量

    104544
  • API
    API
    +關注

    關注

    2

    文章

    1485

    瀏覽量

    61814
  • 自動化
    +關注

    關注

    29

    文章

    5512

    瀏覽量

    79100
收藏 人收藏

    評論

    相關推薦

    OPhone自動化測試技術概述

    本文將對OPhone平臺上可采用的幾種自動化測試技術進行介紹,并對每種技術的優缺點做簡要的總結。OPhone臺除了為應用程序開發提供豐富的API外,也為開展自動化測試提供了多種途徑。【
    發表于 05-06 08:58

    自動化測試框架思想和構建

    自動化測試一般是指軟件測試自動化,軟件測試就是在預設條件下運行系統或應用程序,評估運行結果,預先條件應包括正常條件和異常條件。本文介紹的是
    發表于 07-18 06:52

    七個步驟實現自動化測試

    本文介紹自動化測試的 7 個步驟:改進自動化測試過程,定義需求,驗證概念,支持產品的可測試性,具有可延續性的設計( design for s
    發表于 07-18 07:42

    七個步驟完成自動化測試

    ),有計劃的部署和面對成功的挑戰。按照以上 7 個步驟,安排的人員、工具和制定自動化測試項目計劃,將會通往一條成功之路。
    發表于 07-19 06:12

    如何對用戶界面進行自動化測試

    能識別圖形界面上的關鍵信息,比如界面上的文字,數值,圖標等。小螞蟻測試(AnTestin)平臺支持對人機接口的屏幕顯示進行自動化檢測,代替人的眼睛觀察,可以識別界面上的關鍵信息,結合其他操作(比如
    發表于 03-06 19:57

    自動化測試系統問答

    和配置管理,學會在開發工具的同時也學會一些開發和測試自動化流程。而在測試過程中,因為開發的工具不是非常系統,所以可以主要從功能點(按照需求列好功能點
    發表于 10-12 19:02

    基于Web的自動化測試框架的研究

    根據web系統測試的特點,為提高軟件測試自動化腳本的可重用性,結合在實際項目中軟件自動化測試的實踐,提出基于Web的
    發表于 11-07 15:58 ?0次下載
    基于Web的<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>框架的研究

    ATE自動化測試系統是什么_ATE自動化測試系統介紹

    本文首先介紹了ATE自動化測試系統發展線路,其次闡述了ATE自動化測試系統的作用及原理、特點、優勢,最后介紹了ATE自動化
    發表于 05-23 16:47 ?3.2w次閱讀

    批生產衛星的桌面電接口自動化測試系統綜述

    批生產衛星的桌面電接口自動化測試系統綜述
    發表于 06-25 15:14 ?15次下載

    什么是自動化測試框架

    自動化測試框架,即是應用于自動化測試所用的框架。按照框架的定義,自動化測試框架要么是提供可重用的
    發表于 04-18 14:44 ?875次閱讀

    接口自動化測試流程講解 企業接口自動化測試步驟

    接口自動化測試是指通過編寫腳本或使用自動化工具,對軟件系統的接口進行測試的過程。
    發表于 07-28 14:54 ?2154次閱讀
    <b class='flag-5'>接口</b><b class='flag-5'>自動化</b><b class='flag-5'>測試</b>流程講解 企業<b class='flag-5'>接口</b><b class='flag-5'>自動化</b><b class='flag-5'>測試</b>步驟

    基于應用程序編程接口(API)的自動化測試(上)

    本文系統介紹了應用程序編程接口(API)的概念及其在軟件開發中的作用與重要性,重點分享自動化API測試的發展歷程與測試對象。
    的頭像 發表于 09-01 11:17 ?594次閱讀

    基于應用程序編程接口(API)的自動化測試(下)

    本文將深入剖析單元測試、模糊測試等當前主流的自動化API測試形式與技術。
    的頭像 發表于 09-20 17:16 ?914次閱讀
    基于應用程序編程<b class='flag-5'>接口</b>(API)的<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>(下)

    電源測試怎么自動化?電源模塊自動化測試系統如何實現?

    納米軟件在電測行業深耕十余年,在行業的大背景下,為了進一步完善自動化測試,開發出了新的智能的電源模塊自動化測試系統ATECLOUD-POW
    的頭像 發表于 12-15 14:40 ?829次閱讀
    電源<b class='flag-5'>測試</b>怎么<b class='flag-5'>自動化</b>?電源模塊<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>系統如何實現?

    開關電源自動化測試設備:如何實現自動化測試

    開關電源自動化測試設備是將測試軟件和測試硬件集成在一個電源測試柜中的ate自動測試設備,其
    的頭像 發表于 08-30 18:19 ?1172次閱讀
    開關電源<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>設備:如何實現<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>?