当前位置:   article > 正文

Java基于Rest Assured自动化测试接口详解

Java基于Rest Assured自动化测试接口详解

前言

不知道大家的项目是否都有对接口API进行自动化测试,反正像我们这种小公司是没有的。由于最近一直被吐槽项目质量糟糕,只能研发自己看看有什么接口测试方案。那么在本文中,我将探索如何使用 Rest Assured 自动化 API 测试,Rest Assured 是一个基于 Java 的流行的用于测试 RESTful API 的库。

什么是Rest Assured

Rest Assured 是一个基于 Java 的开源库,主要用于测试 RESTful API。它为编写测试用例提供了一种简单直观的 DSL(领域特定语言),这使得开发人员可以轻松编写和维护自动化测试。Rest Assured 支持 GETPOSTPUTDELETEPATCH 等各种 HTTP 方法,并且可以轻松与流行的测试框架(如 TestNG 和 JUnit)集成。

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

安装Rest Assured

在maven中引入相关依赖

1

2

3

4

5

6

<dependency>

  <groupId>io.rest-assured</groupId>

  <artifactId>rest-assured</artifactId>

  <version>5.3.0</version>

  <scope>test</scope>

</dependency>

Rest Assured结构

Rest Assured代码的整体结构分为 3 个主要部分:

1.Given

  • Given是 API 测试的先决条件,可以在其中设置测试所需的一切,例如URL、请求头或参数,或任何需要满足的先决条件。
  • 可以在“Given”中设置的内容:URL、请求头、请求参数和请求正文。

2.When

When是实际向服务器发送 HTTP 请求并获得响应的时间。可以在When中定义请求方法,如 GETPOSTPUT 等。

3.Then

Then是您检查从服务器获得的响应并确保它符合您的预期的地方。在这您可以检查状态代码、响应正文、标头或任何其他对您的测试很重要的内容。

Show Me Code

我们现在通过一个例子来演示下如何使用Rest Assured,首先我们看下postman的例子:

1.请求参数

2.请求头

3.请求体

现在我们用Rest Assured这个框架来测试下上面postman的这个接口。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

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() 中设置前置条件

1

2

3

4

5

given().baseUri("http://127.0.0.1:8000")

    .queryParam("version", "1.0")

    .header("Authorization", "yourauthhere")

    .header("Signature", "yoursignaturehere")

    .body(jsonBody)

2.然后在when()中定义请求方法,本例中为POST

1

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

3.然后我们从我们的请求中断言状态代码、标头、正文和响应时间

1

2

3

4

5

6

.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

2

3

4

{

  "name": "alvin",

  "role": "SDET"

}

以下是我们如何提取这些数据:

1

2

3

JsonPath responseBody = response.jsonPath();

String fullName = responseBody.getString("name");

String role = responseBody.getString("role");

统一抽象封装

在大多数情况下,需要测试许多 API,但前提条件相同,例如 BaseURL、参数和请求头等,为了消除代码中的冗余,我们可以统一抽象封装一个 RequestSpecification 类作为我们的规范构建器,并在我们的其他测试中重用它,如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

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() 方法。查看与我们之前代码的区别:

1

2

3

4

5

6

7

8

9

10

11

12

// 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(),我们的代码现在变得简单多了。

  1. ​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
  2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
  3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
  4. 分享他们的经验,还会分享很多直播讲座和技术沙龙
  5. 可以免费学习!划重点!开源的!!!
  6. qq群号:485187702【暗号:csdn11

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/869773
推荐阅读
相关标签
  

闽ICP备14008679号