RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

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

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

前言

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

什么是Rest Assured?

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

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

安裝Rest Assured

在maven中引入相關(guān)依賴

<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結(jié)構(gòu)

Rest Assured代碼的整體結(jié)構(gòu)分為 3 個主要部分:

  1. Given
  • Given是 API 測試的先決條件,可以在其中設(shè)置測試所需的一切,例如URL、請求頭或參數(shù),或任何需要滿足的先決條件。
  • 可以在“Given”中設(shè)置的內(nèi)容:URL、請求頭、請求參數(shù)和請求正文。
  1. When
  • When是實際向服務(wù)器發(fā)送 HTTP 請求并獲得響應(yīng)的時間??梢栽?code>When中定義請求方法,如 GET、POST、PUT 等。
  1. Then
  • Then是您檢查從服務(wù)器獲得的響應(yīng)并確保它符合您的預(yù)期的地方。在這您可以檢查狀態(tài)代碼、響應(yīng)正文、標(biāo)頭或任何其他對您的測試很重要的內(nèi)容。

Show Me Code

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

  1. 請求參數(shù)

圖片

  1. 請求頭

圖片

  1. 請求體

圖片

現(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() 中設(shè)置前置條件
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. 然后我們從我們的請求中斷言狀態(tài)代碼、標(biāo)頭、正文和響應(yīng)時間
.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();

如何提取響應(yīng)體?

例如,這將是我們對之前請求的回應(yīng):

{
  "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ī)范構(gòu)建器,并在我們的其他測試中重用它,如下所示:

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)在變得簡單多了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2966

    瀏覽量

    104702
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1499

    瀏覽量

    61962
  • 自動化
    +關(guān)注

    關(guān)注

    29

    文章

    5562

    瀏覽量

    79239
收藏 人收藏

    評論

    相關(guān)推薦

    OPhone自動化測試技術(shù)概述

    本文將對OPhone平臺上可采用的幾種自動化測試技術(shù)進行介紹,并對每種技術(shù)的優(yōu)缺點做簡要的總結(jié)。OPhone臺除了為應(yīng)用程序開發(fā)提供豐富的API外,也為開展自動化測試提供了多種途徑?!?/div>
    發(fā)表于 05-06 08:58

    自動化測試框架思想和構(gòu)建

    自動化測試一般是指軟件測試自動化,軟件測試就是在預(yù)設(shè)條件下運行系統(tǒng)或應(yīng)用程序,評估運行結(jié)果,預(yù)先條件應(yīng)包括正常條件和異常條件。本文介紹的是
    發(fā)表于 07-18 06:52

    七個步驟實現(xiàn)自動化測試

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

    七個步驟完成自動化測試

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

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

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

    自動化測試系統(tǒng)問答

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

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

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

    ATE自動化測試系統(tǒng)是什么_ATE自動化測試系統(tǒng)介紹

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

    批生產(chǎn)衛(wèi)星的桌面電接口自動化測試系統(tǒng)綜述

    批生產(chǎn)衛(wèi)星的桌面電接口自動化測試系統(tǒng)綜述
    發(fā)表于 06-25 15:14 ?15次下載

    什么是自動化測試框架

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

    接口自動化測試流程講解 企業(yè)接口自動化測試步驟

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

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

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

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

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

    電源測試怎么自動化?電源模塊自動化測試系統(tǒng)如何實現(xiàn)?

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

    開關(guān)電源自動化測試設(shè)備:如何實現(xiàn)自動化測試?

    開關(guān)電源自動化測試設(shè)備是將測試軟件和測試硬件集成在一個電源測試柜中的ate自動測試設(shè)備,其
    的頭像 發(fā)表于 08-30 18:19 ?1250次閱讀
    開關(guān)電源<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>設(shè)備:如何實現(xiàn)<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>?
    RM新时代网站-首页