TestNG使用它最常用的注解
1. 注解:@Test:标识方法是一个基于TestNG的测试用例
常用属性:
enabled = false 标识它不是一个测试用例
priority = -1 默认的测试用例的执行顺序是基于方法名的ASCII码,priority可以改变用例的执行顺序,值越小优先级越高。
invocationCount = 2 控制测试用例的执行次数
dependsOnMethods={"方法名"} 解决测试用例之间的依赖关系
2. 前后置注解
例如:连接数据库、打开浏览器
Before 注解
@BeforeSuite@BeforeTest@BeforeClass@BeforeMethod
After 注解
@AfterSuite@AfterTest@AfterClass@AfterMethod
3. TestNG 的断言
Assert.assertEquals("登陆成功", "登陆成功");
Assert.assertTrue(true);
常用断言说明
assertEquals
用于校验实际结果与预期结果是否一致。
Assert.assertEquals(actual, expected);
示例:
Assert.assertEquals("登陆成功", "登陆成功");
assertTrue
用于校验条件是否为 true。
Assert.assertTrue(condition);
示例:
Assert.assertTrue(true);
4. 批量执行所有的测试用例:TestNG 配置文件 testng.xml
示例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="码尚商城">
<test name="注册模块">
<classes>
<class name="com.api.register.TestRegister" />
</classes>
</test>
<test name="登陆模块">
<classes>
<class name="com.api.login.TestLogin2" />
<class name="com.api.login.TestLogin" />
</classes>
</test>
</suite>
说明
<suite>:测试套件,可以包含多个测试模块。<test>:测试模块,用于组织一组测试类。<classes>:定义当前模块下需要执行的测试类。<class>:指定具体执行的 TestNG 测试类。- 运行
testng.xml后,TestNG 会按照配置批量执行所有测试用例。

5. TestNG 实现数据驱动(正例和反例)
1. 第一种方式
第一步:在 testng.xml 中定义参数的值
<test name="登陆模块">
<classes>
<class name="com.api.login.TestLogin2" />
<parameter name="username" value="admin"/>
<parameter name="password" value="123"/>
</classes>
</test>
第二步:在测试用例上面通过以下注解来引入参数
@Parameters(value={"username","password"})
2. 第二种方式
package com.api.login;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class TestLogin2 {
// 测试登录的用例
@Test(dataProvider = "getData")
public void testLogin2(String username, String password) {
System.out.println("用户名:" + username + ",密码:" + password);
}
// 获取数据方法
@DataProvider
public Object[][] getData() {
Object[][] data = {
{"admin", "123"},
{"李四", "123"},
{"王五", "123"}
};
return data;
}
}
说明
@DataProvider
TestNG 提供的数据驱动注解,用于为测试方法提供测试数据。
@Test(dataProvider = "getData")
指定当前测试方法使用 getData() 方法返回的数据进行参数化执行。
@Test(dataProvider = "getData")
数据格式
@DataProvider 返回值必须是二维数组:
Object[][] data = {
{"admin", "123"},
{"李四", "123"},
{"王五", "123"}
};
每一行代表一组测试数据:
| username | password |
|---|---|
| admin | 123 |
| 李四 | 123 |
| 王五 | 123 |
执行结果
测试方法会执行 3 次:
用户名:admin,密码:123
用户名:李四,密码:123
用户名:王五,密码:123
数据驱动测试优点
- 测试逻辑与测试数据分离
- 减少重复代码
- 提高测试用例复用性
- 方便扩展大量测试数据
- 常用于登录、注册、查询等场景
6. TestNG + Allure 生成精美的测试报告
第一步:在 pom.xml 里面增加 Allure 的依赖(第三方库)
<!-- allure -->
<!-- aspectjweaver maven 坐标 -->
<!-- 构建 allure 的插件,AOP 拦截测试结果 -->
第二步:生成临时 JSON 报告
直接运行 testng.xml 即可。
注意:这里有一个问题,每次执行时不会自动清空原来的 JSON 报告,因此可能会导致历史数据被累计到新报告中。
第三步:生成临时 JSON 报告以及 HTML 格式的 Allure 报告(并自动清理旧数据)
通过 Maven 命令运行:
1. 清理并执行测试
mvn clean test
说明:
- 先清空旧的测试结果数据
- 再执行测试用例
- 生成最新的 Allure JSON 数据
2. 生成 Allure 报告
mvn io.qameta.allure:allure-maven:serve
说明:
- 根据测试结果生成 Allure HTML 报告
- 自动启动本地 Web 服务
- 在浏览器中打开测试报告
执行流程
执行测试
↓
生成 allure-results(JSON 数据)
↓
mvn io.qameta.allure:allure-maven:serve
↓
生成 HTML 报告
↓
浏览器展示测试结果
Allure 优势
- 界面美观
- 支持测试步骤展示
- 支持失败截图
- 支持附件上传
- 支持趋势分析
- 支持 TestNG/JUnit/Pytest 等主流测试框架
- 支持 CI/CD 集成(Jenkins、GitLab CI 等)
【参考】https://www.bilibili.com/video/BV1G38iz2ErT
【参考】https://www.cnblogs.com/df888/p/15803356.html
【参考】https://testng.org/

7937

被折叠的 条评论
为什么被折叠?



