# APIAutoMation_Java **Repository Path**: FuKaiZHANG/apiauto-mation_-java ## Basic Information - **Project Name**: APIAutoMation_Java - **Description**: 基于Java+testNG+Maven+allure+REST Assured+企业微信/钉钉消息通知的API自动化测试框架。将用例读取 字段校验 加载等环节与用例执行分离,实现了数据驱动,变量提取与替换等功能 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-29 - **Last Updated**: 2025-08-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # API自动化测试框架 ## 项目简介 这是一个基于Java的API自动化测试框架,采用TestNG作为测试执行引擎,集成Allure作为测试报告生成工具。框架支持通过YAML文件配置测试用例,具有灵活的参数化、变量提取与替换、断言验证,消息通知等功能。 ## 技术栈 - Java 17 - Maven 项目管理 - TestNG 测试框架 - REST Assured API测试库 - Allure 测试报告 - SnakeYAML YAML解析 - Log4j2 日志管理 - Lombok 代码简化工具 - Jackson JSON处理 ## 项目结构 ``` APIAutoMation/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/zfk/framework/ │ │ │ ├── case_loader/ # YAML测试用例加载器 │ │ │ ├── casefield_validator/ # 测试用例字段校验器 │ │ │ ├── config/ # 配置加载器 │ │ │ ├── listener/ # TestNG监听器 │ │ │ ├── models/ # 数据模型类 │ │ │ ├── notification/ # 消息通知模块 │ │ │ ├── testcasepool/ # 测试用例池 │ │ │ ├── utils/ # 工具类 │ │ │ └── variable_handling/ # 变量处理模块 │ │ └── resources/ │ │ ├── yaml-case/ # YAML格式测试用例 │ │ ├── config.yaml # 项目配置文件 │ │ ├── testng.xml # TestNG配置文件 │ │ └── allure.properties # Allure配置文件 │ └── test/ │ └── java/ │ └── com/zfk/tests/ # 测试类 ├── target/ # 构建输出目录 ├── pom.xml # Maven配置文件 └── README.md # 项目说明文档 ``` ## 核心功能 ### 1. YAML测试用例配置 测试用例通过YAML文件进行配置,支持灵活的参数化和变量提取,下面是示例: ```yaml login_01: url: # /api/auth/login method: #post detail: #正常登录,账号密码正确 headers: #不能为空 # Content-Type: application/json requestType: #json data: #可以为空 # name: admin # password: admin123 expected: #不能为空 statusCode: # 200 #必填字段 jsonBody: #如果响应是json格式 username: admin role: admin extract: #可以为空 # token: $.token ``` ### 2. 变量提取与替换 支持从响应中提取变量并存储到全局变量池中,后续请求可以引用这些变量: - 使用`extract`字段定义需要提取的变量 $.token jsonpath 语法 - 使用`{{variableName}}`语法在请求中引用变量 ### 3. 多种请求类型支持 框架支持多种请求参数类型: - `params`: 查询参数 - `form`: 表单数据 - `json`: JSON数据 - `file`: 文件上传 ### 4. 断言验证 支持对响应结果进行断言验证: - 状态码验证 - JSON响应体字段验证 ### 5. 测试报告 集成Allure测试报告,提供美观的测试结果展示: - 自动生成HTML格式测试报告 - 启动本地服务查看报告, - 12小时后自动关闭服务 ### 6. 消息通知 支持测试完成后发送通知: - 钉钉机器人通知 - 企业微信通知(可选) ## 快速开始 ### 环境要求 - Java 17+ - Maven 3.6+ - Allure 2.24+ (执行机设置allure环境变量) ### 安装步骤 1. 克隆项目代码: ```bash git clone <项目地址> ``` 2. 安装依赖: ```bash mvn clean install ``` 3. 配置项目: - 修改`src/main/resources/config.yaml`中的配置信息 - 根据需要修改`src/main/resources/testng.xml`中的测试套件配置 4. 运行测试: ```bash mvn clean test ``` 5. 查看测试报告: - 控制台会输出报告访问地址,消息通知会打印地址 - 或者直接打开`target/allure-report/index.html` ## 配置说明 ### config.yaml 项目主要配置文件,包含以下配置项: - 项目名称和版本 - 测试负责人 - API服务主机地址 - 数据库连接信息 - 邮件通知配置 - 钉钉/企业微信机器人配置 ```yaml projectName: yourProjectName projectVersion: 1.0.0 #测试人员姓名,用于发送消息通时的测试负责人员 testerName: youName host: http://localhost:8080 #域名+端口 mysqlDb: host: db: user: password: #默认3306 port: 3306 email: #发件人 sendUser: your_email@163.com emailHost: smtp.163.com #授权码 stampKey: your_key # 收件人 sendList: - 15888888888@163.com - 15800000000@163.com #钉钉配置 dingTalk: webhook: #企业微信配置 weChat: #企业微信机器人Webhook地址 webhook: ``` ### testng.xml TestNG测试套件配置文件,可以配置: - 测试套件名称 - 并行执行配置 - 需要执行的测试类 - 监听器配置 ## 测试用例编写 ### 用例字段说明 ```yaml url: #API路径(相对于host),必须以 /开头 method: #HTTP请求方法,支持 get|post|patch|delete|head|options detail: #测试用例描述,不能为空 headers: #请求头信息 ,不能为空,键值对形式 #Header-Name: Header-Value #field: value ...... requestType: #请求参数类型 支持params|form|json|file 不能为空 data: #请求参数,可以为空,键值对形式 field: value ....... expected: #预期响应结果 statusCode: #响应状态码为必填字段 field: value extract: #变量提取规则,键值对形式,可以为空 ``` ### 用例组织 ```yaml src/main/resources/yaml-case/API-Unit: #存放单接口测试yaml用例,可以模块组织下一级文件夹,以接口名命名yaml文件,每个文件包含当前接口的所有测试用例 src/test/java/com/zfk/tests/apiunit: #用来存放对应的class,推荐一个接口一个class,每个类分为两个方法,正常场景和异常场景 src/main/resources/yaml-case/Flow-Chain: #存放业务流程验证的用例 ``` ### test class和断言组织 1. 在`src/test/java/com/zfk/tests/`目录下创建测试类 2. 调用基础请求发送类和相关工具类 ```java //导入两个模型类 import com.zfk.framework.models.CaseData; import com.zfk.framework.models.ResponseData; //导入请求发送工具类 import com.zfk.framework.utils.ApiClient; //导入用例读取,数据提供类 import com.zfk.framework.testcasepool.TestCaseProvider; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; //然后编写测试用例 public class TestLogin { // 手动指定正常用例的 caseId 列表 private static final List successCaseIds = Arrays.asList("login_01"); //指定异常场景用例的caseId 列表 @DataProvider(name = "successTestCaseDataProvider") public Iterator provideSuccessTestCaseData() { return TestCaseProvider.getTestCaseData(successCaseIds); } @Test(dataProvider = "successTestCaseDataProvider") @Description("正常登录场景测试") @Story("登录成功") public void testLoginSuccess(String caseId, CaseData caseData) { ResponseData response = ApiClient.sendRequest(caseId, caseData); // json响应体断言 JsonBodyAssertionUtils.assertResponse(caseData, response); // 响应状态码断言 Assert.assertEquals(response.getStatusCode(), caseData.getExpected().get("statusCode")); // 响应时间断言 Assert.assertTrue(response.getDuration() < 1000); //响应头断言等等 //异常场景的测试方法 ``` 3. 在`testng.xml`中添加测试类配置(指定类 或者指定包) ### 断言实现 #### json断言 目前已经实现了`JsonBodyAssertionUtils`类来断言响应体为json格式的数据。其他响应格式的断言可自行封装 #### 响应状态码断言 ```java Assert.assertEquals(response.getStatusCode(), caseData.getExpected().get("statusCode") ``` #### 响应头断言 ```java Assert.assertEquals(response.getHeaders(), caseData.getExpected().get("headers")); ``` ### 测试结果通知 ```java //已经实现了 DingTalkNotifier.java 和 WeChatNotifier.java 来实现测试消息通知,在src/main/java/com/zfk/framework/utils/MessageTemplate.java 中定义自己需要发送的消息模板 public class MessageTemplate { /** * 测试报告消息模板 */ public static final String TEST_REPORT_TEMPLATE = "【%s】测试报告\n" + "测试人员: %s\n" + "报告地址: %s\n" + "请及时查看自动化测试通知。"; ``` ## 贡献指南 欢迎提交Issue和Pull Request来改进这个框架。 ## 许可证 本项目采用MIT许可证,详情请见[LICENSE](LICENSE)文件。