Java基于Rest Assured自动化测试接口怎么配置

开发技术 作者:iii 2024-04-26 18:05:01
今天小编给大家分享一下Java基于Rest Assured自动化测试接口怎么配置的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这...

今天小编给大家分享一下Java基于Rest Assured自动化测试接口怎么配置的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    什么是Rest Assured

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

    安装Rest Assured

    在maven中引入相关依赖

    <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.请求参数

    Java基于Rest Assured自动化测试接口怎么配置

    2.请求头

    Java基于Rest Assured自动化测试接口怎么配置

    3.请求体

    Java基于Rest Assured自动化测试接口怎么配置

    现在我们用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)

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

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

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

    .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基于Rest Assured自动化测试接口怎么配置”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注捷杰建站行业资讯频道。

    原创声明
    本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    本文链接:http://www.jiecseo.com/news/show_18240.html
    java rest assured