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

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

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

如何自動(dòng)化測(cè)試你的接口?

jf_78858299 ? 來(lái)源:JAVA旭陽(yáng) ? 作者:JAVA旭陽(yáng) ? 2023-04-07 15:29 ? 次閱讀

前言

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

什么是Rest Assured?

Rest Assured 是一個(gè)基于 Java 的開(kāi)源庫(kù),主要用于測(cè)試RESTful API。它為編寫(xiě)測(cè)試用例提供了一種簡(jiǎn)單直觀的 DSL(領(lǐng)域特定語(yǔ)言),這使得開(kāi)發(fā)人員可以輕松編寫(xiě)和維護(hù)自動(dòng)化測(cè)試。Rest Assured支持 GET、POST、PUTDELETE、PATCH 等各種 HTTP 方法,并且可以輕松與流行的測(cè)試框架(如 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 個(gè)主要部分:

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

Show Me Code

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

  1. 請(qǐng)求參數(shù)

圖片

  1. 請(qǐng)求頭

圖片

  1. 請(qǐng)求體

圖片

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

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. 首先我們?cè)?code>given() 中設(shè)置前置條件
given().baseUri("http://127.0.0.1:8000")
    .queryParam("version", "1.0")
    .header("Authorization", "yourauthhere")
    .header("Signature", "yoursignaturehere")
    .body(jsonBody)
  1. 然后在when()中定義請(qǐng)求方法,本例中為POST
.when().post("/getuserdata/")
  1. 然后我們從我們的請(qǐng)求中斷言狀態(tài)代碼、標(biāo)頭、正文和響應(yīng)時(shí)間
.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)體?

例如,這將是我們對(duì)之前請(qǐ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ù)情況下,需要測(cè)試許多 API,但前提條件相同,例如 BaseURL、參數(shù)和請(qǐng)求頭等,為了消除代碼中的冗余,我們可以統(tǒng)一抽象封裝一個(gè) RequestSpecification 類作為我們的規(guī)范構(gòu)建器,并在我們的其他測(cè)試中重用它,如下所示:

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)在,您可以在具有相同前提條件的任何其他需要的測(cè)試中重用 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/")

通過(guò)使用 given().spec(),我們的代碼現(xiàn)在變得簡(jiǎn)單多了。

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

    關(guān)注

    19

    文章

    2967

    瀏覽量

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

    關(guān)注

    2

    文章

    1501

    瀏覽量

    62033
  • 自動(dòng)化
    +關(guān)注

    關(guān)注

    29

    文章

    5581

    瀏覽量

    79284
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OPhone自動(dòng)化測(cè)試技術(shù)概述

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

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

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

    七個(gè)步驟實(shí)現(xiàn)自動(dòng)化測(cè)試

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

    七個(gè)步驟完成自動(dòng)化測(cè)試

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

    如何對(duì)用戶界面進(jìn)行自動(dòng)化測(cè)試

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

    自動(dòng)化測(cè)試系統(tǒng)問(wèn)答

    和配置管理,學(xué)會(huì)在開(kāi)發(fā)工具的同時(shí)也學(xué)會(huì)一些開(kāi)發(fā)和測(cè)試自動(dòng)化流程。而在測(cè)試過(guò)程中,因?yàn)殚_(kāi)發(fā)的工具不是非常系統(tǒng),所以可以主要從功能點(diǎn)(按照需求列好功能點(diǎn)
    發(fā)表于 10-12 19:02

    基于Web的自動(dòng)化測(cè)試框架的研究

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

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

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

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

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

    什么是自動(dòng)化測(cè)試框架

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

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

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

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

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

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

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

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

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

    開(kāi)關(guān)電源自動(dòng)化測(cè)試設(shè)備:如何實(shí)現(xiàn)自動(dòng)化測(cè)試

    開(kāi)關(guān)電源自動(dòng)化測(cè)試設(shè)備是將測(cè)試軟件和測(cè)試硬件集成在一個(gè)電源測(cè)試柜中的ate自動(dòng)測(cè)試設(shè)備,其
    的頭像 發(fā)表于 08-30 18:19 ?1288次閱讀
    開(kāi)關(guān)電源<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>測(cè)試</b>設(shè)備:如何實(shí)現(xiàn)<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>測(cè)試</b>?