目录
- 被测产品
- 需求说明
- 相关知识点
- 接口自动化测试实战
被测产品
- PetStore 宠物商城:
- 一个在线的小型的商城。
- 主要提供了增删查改等操作接口。
- 结合 Swagger 实现了接口的管理。
需求说明
- 完成宠物商城宠物查询功能接口自动化测试。
- 编写自动化测试脚本。
- 完成断言。
相关知识点
实战思路
@startmindmap
scale 10
- 实战思路
** 需求分析
** 接口测试用例设计
** 编写接口自动化测试脚本
*** 脚本优化-添加日志
*** 脚本优化-参数化
** 生成测试报告
@endmindmap
宠物商店需求分析
- 被测产品:宠物商店系统 - 查询宠物信息
- 宠物商店接口文档:https://petstore.swagger.io/
接口测试用例设计
- 宠物查询单接口用例
编写接口自动化测试脚本思路
- 查询宠物信息。
@startmindmap
scale 3
- 思路
** 获取接口信息
*** swagger 接口文档
*** 前端抓包
** 单步调通接口
** 添加断言,确认流程正常
@endmindmap
脚本优化 - 参数化
使用 parametrize 实现宠物状态的参数化
package com.restassured;
import io.restassured.response.Response;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.HashMap;
import java.util.Map;
import static io.restassured.RestAssured.given;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
public class QueryTest {
//1、获取接口信息
//get:https://petstore.swagger.io/v2/pet/findByStatus
// 请求参数:status=available
//2、编写测试用例
//3、断言
@Test
public void search(){
String findByStatusURL = "https://petstore.swagger.io/v2/pet/findByStatus";
Map<String,Object> queryParams = new HashMap<>(){
{
put("status","available");
}
};
Response response = given().log().all()
//请求携带信息
.queryParams(queryParams)
.when()
//请求路径
.get(findByStatusURL)
.then().log().all()
//响应体处理
.statusCode(200)
//获取响应体Response
.extract().response();
//响应体Response
String body = response.getBody().toString();
System.out.println(body);
assertNotEquals("[]",body);
}
@ParameterizedTest
@MethodSource("com.restassured.source.SearchSource#searchParams")
public void searchParams(String status){
String findByStatusURL = "https://petstore.swagger.io/v2/pet/findByStatus";
Map<String,Object> queryParams = new HashMap<>(){
{
put("status",status);
}
};
Response response = given().log().all()
//请求携带信息
.queryParams(queryParams)
.when()
//请求路径
.get(findByStatusURL)
.then().log().all()
//响应体处理
.statusCode(200)
//获取响应体Response
.extract().response();
//响应体Response
String body = response.getBody().toString();
System.out.println(body);
assertNotEquals("[]",body);
}
}
allure.properties
allure.results.directory=target/allure-results
生成测试报告
<!-- allure报告 -->
<allure.version>2.21.0</allure.version>
<aspectj.version>1.9.19</aspectj.version>
<allure.maven.version>2.12.0</allure.maven.version>
<allure.cmd.download.url>
https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline
</allure.cmd.download.url>
<!-- allure报告-->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-junit5</artifactId>
<version>${allure.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<!-- allure报告-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<argLine>
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
</argLine>
</configuration>
<plugin>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-maven</artifactId>
<version>${allure.maven.version}</version>
<configuration>
<reportVersion>${allure.version}</reportVersion>
<allureDownloadUrl>${allure.cmd.download.url}/${allure.version}/allure-commandline-${allure.version}.zip</allureDownloadUrl>
</configuration>
</plugin>
package com.restassured.source;
import java.util.stream.Stream;
public class SearchSource {
/**
* available,pending,sold
* @return
*/
public static Stream searchParams(){
return Stream.of(“available”,“pending”,“sold”);
}
}
## 总结
* 通过 Swagger 文档获取接口信息。
* 使用 given-when-then 发出携带请求参数的 GET 请求。
* 断言响应符合是否符合预期。
* 使用参数化方式实现一条用例可执行多个测试数据。
* 生成 Allure 测试报告。
## 源码地址
**gitlab.stuq.ceshiren.com**