一、@Test 注解常用属性
-
priority-
作用:定义测试方法执行顺序(数值越小优先级越高)
-
示例:
@Test(priority = 1) public void setup() { /* 初始化操作 */ } @Test(priority = 2) public void testLogin() { /* 主测试逻辑 */ }
-
-
groups-
作用:将测试方法分组,支持按组执行
-
示例:
@Test(groups = {"P0"}) public void criticalTest() { /* 关键路径测试 */ } @Test(groups = "P1") public void edgeCaseTest() { /* 边界测试 */ }
-
二、TestNG XML 文件详解
1. 常用标签说明
| 标签 | 作用 | 示例片段 |
|---|---|---|
<suite> | 定义测试套件(最高层级) | <suite name="RegressionSuite" parallel="tests" thread-count="3"> |
<test> | 定义测试模块(可包含多个类) | <test name="LoginTests" preserve-order="true"> |
<groups> | 定义组策略(选择/排除) | <groups><run><include name="smoke"/></run></groups> |
<classes> | 指定要运行的测试类 | <classes><class name="com.tests.LoginTest"/></classes> |
<packages> | 按包名运行测试(自动扫描) | <packages><package name="com.tests.*"/></packages> |
<parameter> | 定义全局参数(可在测试类中通过@Parameters获取) | <parameter name="env" value="staging"/> |
2. 完整 XML 示例
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="FullRegression" verbose="1">
<parameter name="baseUrl" value="https://api.example.com"/>
<test name="SmokeTests">
<groups>
<run>
<include name="smoke"/>
<exclude name="wip"/> <!-- 排除进行中的测试 -->
</run>
</groups>
<classes>
<class name="com.tests.LoginTest"/>
<class name="com.tests.SearchTest"/>
</classes>
</test>
<test name="PaymentTests" parallel="methods" thread-count="2">
<packages>
<package name="com.tests.payment.*"/>
</packages>
</test>
</suite>
3. 执行 XML 的命令
# 基础命令 mvn test "-Dsurefire.suiteXmlFiles=src/testng.xml"
4. XML 文件存放路径
推荐项目结构:
src/ └── testng.xml # XML配置文件
三、必备依赖清单(pom.xml)
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>org.skyscreamer</groupId>
<artifactId>jsonassert</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.57</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<!-- <configuration>-->
<!-- <suiteXmlFiles>-->
<!-- <suiteXmlFile>src/ApiTest.xml</suiteXmlFile>-->
<!-- </suiteXmlFiles>-->
<!-- </configuration>-->
</plugin>
</plugins>
</build>
四、用例的xml书写
举例:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="RegressionSuite" verbose="1">
<!-- 测试模块1:登录相关 -->
<test name="LoginTests" parallel="methods" thread-count="3">
<classes>
<class name="com.tests.LoginTest"/>
<class name="com.tests.TokenRefreshTest"/>
</classes>
</test>
<!-- 测试模块2:支付流程 -->
<test name="PaymentTests">
<packages>
<package name="com.tests.payment.*"/>
</packages>
</test>
<!-- 测试模块3:按组执行
只运行 com.tests 包下带有 @Test(groups = "security") 注解的方法-->
<test name="SecurityTests">
<groups>
<run>
<include name="security"/>
</run>
</groups>
<classes>
<class name="com.tests.*"/>
</classes>
</test>
</suite>
name | "RegressionSuite" | 定义测试套件名称(显示在报告中) | ✅ 必填 |
verbose | "1" | 控制控制台日志详细程度(1-10,数字越大越详细) | ❌ 可选 |
parallel | "tests"/"methods"/"classes" | 是否并行执行(默认false) | ❌ 可选 |
thread-count | "5" | 并行时的线程数(需配合parallel使用) |
自上而下顺序执行
<test name="LoginTests"> <!-- 第一个执行 --> <test name="PaymentTests"> <!-- 第二个执行 --> <test name="SecurityTests"><!-- 第三个执行 -->
728

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



