亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java基于Rest?Assured自動(dòng)化測(cè)試接口詳解

 更新時(shí)間:2023年03月21日 08:26:38   作者:JAVA旭陽  
Rest Assured 是一個(gè)基于 Java 的流行的用于測(cè)試 RESTful API 的庫。這篇文章主要介紹了Java如何基于Rest?Assured實(shí)現(xiàn)自動(dòng)化測(cè)試接口,需要的可以參考一下

前言

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

什么是Rest Assured

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

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

安裝Rest Assured

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

<dependency>
  <groupId>io.rest-assured</groupId>
  <artifactId>rest-assured</artifactId>
  <version>5.3.0</version>
  <scope>test</scope>
</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)求正文。

2.When

When是實(shí)際向服務(wù)器發(fā)送 HTTP 請(qǐng)求并獲得響應(yīng)的時(shí)間??梢栽?code>When中定義請(qǐng)求方法,如 GETPOST、PUT 等。

3.Then

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

Show Me Code

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

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

2.請(qǐng)求頭

3.請(qǐng)求體

現(xiàn)在我們用Rest Assured這個(gè)框架來測(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)

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

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

3.然后我們從我們的請(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/")

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

結(jié)論

本文簡(jiǎn)單介紹了Rest Assured這個(gè)開源的接口測(cè)試框架是干嘛的,以及如何使用的,希望對(duì)大家有幫助。

以上就是Java基于Rest Assured自動(dòng)化測(cè)試接口詳解的詳細(xì)內(nèi)容,更多關(guān)于Java Rest Assured自動(dòng)化測(cè)試接口的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot Pom文件依賴及Starter啟動(dòng)器詳細(xì)介紹

    SpringBoot Pom文件依賴及Starter啟動(dòng)器詳細(xì)介紹

    這篇文章主要介紹了SpringBoot Pom文件的依賴與starter啟動(dòng)器的作用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • Java中ThreadLocal的使用

    Java中ThreadLocal的使用

    這篇文章主要介紹了Java中ThreadLocal的使用,靜態(tài)內(nèi)部類的加載是在程序中調(diào)用靜態(tài)內(nèi)部類的時(shí)候加載的,和外部類的加載沒有必然關(guān)系, 但是在加載靜態(tài)內(nèi)部類的時(shí)候 發(fā)現(xiàn)外部類還沒有加載,那么就會(huì)先加載外部類 ,加載完外部類之后,再加載靜態(tài)內(nèi)部類,需要的朋友可以參考下
    2023-09-09
  • spring Security的自定義用戶認(rèn)證過程詳解

    spring Security的自定義用戶認(rèn)證過程詳解

    這篇文章主要介紹了spring Security的自定義用戶認(rèn)證過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 兩種JAVA實(shí)現(xiàn)短網(wǎng)址服務(wù)算法

    兩種JAVA實(shí)現(xiàn)短網(wǎng)址服務(wù)算法

    這篇文章介紹了兩種JAVA實(shí)現(xiàn)短網(wǎng)址服務(wù)算法,一種是基于MD5碼的,一種是基于自增序列的,需要的朋友可以參考下
    2015-07-07
  • Core Java 簡(jiǎn)單談?wù)凥ashSet(推薦)

    Core Java 簡(jiǎn)單談?wù)凥ashSet(推薦)

    下面小編就為大家?guī)硪黄狢ore Java 簡(jiǎn)單談?wù)凥ashSet(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Java中finalize()詳解及用法

    Java中finalize()詳解及用法

    這篇文章主要介紹了Java中finalize()詳解及用法的相關(guān)資料,final是Java的關(guān)鍵字,它所表示的是“這部分是無法修改的”,需要的朋友可以參考下
    2017-03-03
  • BeanDefinition基礎(chǔ)信息講解

    BeanDefinition基礎(chǔ)信息講解

    今天小編就為大家分享一篇關(guān)于BeanDefinition基礎(chǔ)信息講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • JDBC用IDEA連接SQLServer數(shù)據(jù)庫的超實(shí)用教程

    JDBC用IDEA連接SQLServer數(shù)據(jù)庫的超實(shí)用教程

    JDBC是Java連接數(shù)據(jù)庫的一種接口,它由各個(gè)數(shù)據(jù)庫廠商為開發(fā)者提供的接口,要使用它需要到相應(yīng)廠商下載對(duì)應(yīng)的jar包,下面這篇文章主要給大家介紹了關(guān)于JDBC用IDEA連接SQLServer數(shù)據(jù)庫的超實(shí)用教程,需要的朋友可以參考下
    2023-05-05
  • Java 程序內(nèi)部是如何執(zhí)行的?

    Java 程序內(nèi)部是如何執(zhí)行的?

    這篇文章主要介紹了Java 程序內(nèi)部是如何執(zhí)行的,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java面向?qū)ο蠡A(chǔ)_final詳細(xì)介紹

    java面向?qū)ο蠡A(chǔ)_final詳細(xì)介紹

    本文將詳細(xì)介紹java final 對(duì)象的使用,需要了解更多的朋友可以參考下
    2012-11-11

最新評(píng)論