jck28-lucio-【实战】宠物商店接口自动化测试实战

目录

  • 被测产品
  • 需求说明
  • 相关知识点
  • 接口自动化测试实战

被测产品

  • PetStore 宠物商城:
    • 一个在线的小型的商城。
    • 主要提供了增删查改等操作接口。
    • 结合 Swagger 实现了接口的管理。

需求说明

  • 完成宠物商城宠物查询功能接口自动化测试。
    • 编写自动化测试脚本。
    • 完成断言。

相关知识点

image

实战思路

@startmindmap
scale 10

  • 实战思路
    ** 需求分析
    ** 接口测试用例设计
    ** 编写接口自动化测试脚本
    *** 脚本优化-添加日志
    *** 脚本优化-参数化
    ** 生成测试报告
    @endmindmap

宠物商店需求分析

接口测试用例设计

编写接口自动化测试脚本思路

  1. 查询宠物信息。
    @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**