如何自动化测试你的接口?

网友投稿 152 2024-01-26

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

自动化 API 测试,复制Rest Assured 是一个基于 Java 的流行的用于测试 复制RESTful API 的库什么是Rest Assured?复制Rest Assured 是一个基于 Java 的开源库,主要用于测试。

复制RESTful API它为编写测试用例提供了一种简单直观的 DSL(领域特定语言),这使得开发人员可以轻松编写和维护自动化测试复制Rest Assured支持 复制GET、复制POST、复制PUT、

复制DELETE、复制PATCH 等各种 HTTP 方法,并且可以轻松与流行的测试框架(如 复制TestNG 和 复制JUnit)集成github地址 :复制https://github.com/rest-assured/rest-assured。

安装Rest Assured在maven中引入相关依赖复制io.rest-assured

>rest-assured5.3.0test

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

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

When复制When是实际向服务器发送 HTTP 请求并获得响应的时间可以在复制When中定义请求方法,如 复制GET、复制POST、复制PUT 等Then复制Then是您检查从服务器获得的响应并确保它符合您的预期的地方。

在这您可以检查状态代码、响应正文、标头或任何其他对您的测试很重要的内容Show Me Code我们现在通过一个例子来演示下如何使用复制Rest Assured,首先我们看下复制postman的例子:请求参数

请求头

请求体

现在我们用复制Rest Assured这个框架来测试下上面postman的这个接口复制import io.restassured.builder.RequestSpecBuilder; import io.restassured.response.Response;

import io.restassured.specification.RequestSpecification; importorg.testng.annotations.Test; importstatic

io.restassured.RestAssured.given; importstatic org.hamcrest.Matchers.equalTo; importstatic org.hamcrest.Matchers.lessThan;

publicclassTestRestAssured{ @TestpublicvoidtestMyApi() { 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(); } } 首先我们在复制given() 中设置前置条件

复制given().baseUri("http://127.0.0.1:8000") .queryParam("version", "1.0") .header("Authorization"

, "yourauthhere") .header("Signature", "yoursignaturehere") .body(jsonBody) 然后在复制when()中定义请求方法,本例中为

复制POST复制.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(); 如何提取响应体?

例如,这将是我们对之前请求的回应:复制{ "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; importstatic org.hamcrest.Matchers.equalTo; importstatic org.hamcrest.Matchers.lessThan;

publicclassTestRestAssured{ publicstatic RequestSpecification requestSpecification() { return

new RequestSpecBuilder().setBaseUri("http://127.0.0.1:8000") .addQueryParam("version", "1.0"

) .addHeader("Authorization", "yourauthhere") .addHeader("Signature", "yoursignaturehere"

) .build(); } @TestpublicvoidtestMyApi() { 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(),我们的代码现在变得简单多了。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring事务失效的十种常见场景
下一篇:如何构建用于Skydel GNSS模拟仿真的SNMP代理方式?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~