TestNG XML 配置详解与实践示例
TestNG XML 文件结构解析
TestNG 框架通过 testng.xml 文件实现灵活的测试套件配置。该文件遵循特定 DTD 规范,可定义测试执行的范围、顺序、并发策略及参数化设置。完整的配置参考如下:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="MySuite" parallel="classes" thread-count="5" configfailurepolicy="skip">
<!-- 引入其他 suite 文件 -->
<suite-files>
<suite-file path="integration-tests.xml"/>
<suite-file path="unit-tests.xml"/>
</suite-files>
<!-- 全局参数设置 -->
<parameter name="env" value="staging"/>
<parameter name="browser" value="chrome"/>
<!-- 方法选择器:支持自定义过滤逻辑 -->
<method-selectors>
<method-selector>
<selector-class name="com.example.CustomMethodSelector" priority="2"/>
</method-selector>
</method-selectors>
<!-- 测试用例分组定义 -->
<test name="RegressionTest" enabled="true" preserve-order="false">
<!-- 局部参数覆盖全局参数 -->
<parameter name="timeout" value="60000"/>
<groups>
<define name="smoke">
<include name="login"/>
<include name="dashboard"/>
</define>
<run>
<include name="smoke"/>
<exclude name="performance"/>
</run>
<dependencies>
<group name="e2e" depends-on="setup"/>
</dependencies>
</groups>
<!-- 指定要执行的测试类及其方法 -->
<classes>
<class name="com.example.LoginTests">
<methods>
<include name="validLogin"/>
<include name="invalidCredentials"/>
</methods>
</class>
<class name="com.example.DashboardTests">
<methods>
<include name="loadOverviewPage"/>
<exclude name="exportLargeReport"/>
</methods>
</class>
</classes>
<!-- 监听器注册 -->
<listeners>
<listener class-name="com.example.ReportListener"/>
<listener class-name="com.example.RetryAnalyzer"/>
</listeners>
</test>
</suite>
关键节点属性说明
suite 标签属性
- name: 套件名称,必填项。
- parallel: 并行模式,支持
false,methods,tests,classes,instances。 - thread-count: 线程池大小,默认为 5。
- configfailurepolicy: 配置方法失败后的行为,
skip(跳过)或continue(继续)。 - time-out: 设置方法级超时时间(毫秒)。
- data-provider-thread-count: DataProvider 并发线程数,默认 10。
- object-factory: 自定义对象工厂类,用于实例化测试类。
- allow-return-values: 是否允许测试方法返回值,默认 false。
test 标签属性
- name: 测试块名称,报告中可见。
- enabled: 是否启用当前测试块,可用于临时禁用。
- preserve-order: 是否保持 XML 中声明的方法顺序执行。
- verbose: 控制台输出详细程度,取值 1~5。
groups 分组机制
支持动态定义和运行测试组,提升测试组织灵活性:
<define>: 定义命名组并包含指定方法。<run>: 指定本次运行包含或排除的组。<dependencies>: 设置组之间的依赖关系。
实际应用示例
以下是一个典型的功能回归测试配置:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Functional Suite" parallel="classes" thread-count="3">
<test name="Smoke Regression">
<parameter name="base.url" value="https://api.example.com"/>
<groups>
<run>
<include name="smoke"/>
</run>
</groups>
<classes>
<class name="com.tests.auth.LoginFlowTest"/>
<class name="com.tests.order.CreateOrderTest">
<methods>
<include name="placeNewOrder"/>
<include name="verifyOrderStatus"/>
</methods>
</class>
</classes>
</test>
</suite>
此配置将以类级别并行方式运行标记为 "smoke" 的测试,并限制最多使用 3 个线程。