testng.xml 是 TestNG 的 XML 配置文件,用于灵活定义测试套件、用例、类、分组、参数和监听器等,支持环境适配与策略调度。

基础结构:suite + test + classes
最简配置只需定义一个 suite,里面包含一个 test,再指定要运行的测试类:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Smoke Suite">
<test name="Login Tests">
<classes>
<class name="com.example.tests.LoginTest"/>
<class name="com.example.tests.DashboardTest"/>
</classes>
</test>
</suite>
说明:
• suite 是最高层级容器,可包含多个 test;
• test 表示一个逻辑测试单元(如“登录模块测试”),支持并行执行;
• classes 下的每个 class 对应一个含 @Test 方法的 Java 类。
按组(Groups)运行测试
用 @Test(groups = "smoke") 标记方法后,在 XML 中通过 <groups> 精准控制执行范围:
<suite name="Regression Suite">
<test name="Smoke Only">
<groups>
<run>
<include name="smoke"/>
</run>
</groups>
<classes>
<class name="com.example.tests.AllTests"/>
</classes>
</test>
</suite>
支持 include/exclude,例如同时跑 smoke 和 api,但排除 flaky:
<include name="smoke"/><include name="api"/><exclude name="flaky"/>
传参(Parameters)给测试方法
在 XML 中定义参数,Java 方法用 @Parameters("browser") 接收:
<suite name="CrossBrowser Suite">
<parameter name="browser" value="chrome"/>
<test name="Chrome Test">
<classes>
<class name="com.example.tests.LoginTest"/>
</classes>
</test>
</suite>
也支持为每个 test 单独设参(优先级更高):
<test name="Firefox Test"> <parameter name="browser" value="firefox"/> <classes>...</classes> </test>
添加监听器和方法选择器
比如加自定义报告监听器或只运行满足条件的方法:
<suite name="Custom Suite" verbose="1">
<listeners>
<listener class-name="org.uncommons.reportng.HTMLReporter"/>
<listener class-name="com.example.listeners.TestRetryListener"/>
</listeners>
<test name="Retryable Tests">
<method-selectors>
<method-selector>
<selector-class name="com.example.selectors.RetryMethodSelector"/>
</method-selector>
</method-selectors>
<classes>...</classes>
</test>
</suite>
注意:
• verbose="1" 输出更多日志(1~10,数值越大越详细);
• 监听器类必须有无参构造函数;
• 方法选择器需继承 IMethodSelector 并实现逻辑。










