【发布时间】:2020-11-25 20:17:32
【问题描述】:
我想根据某些条件以编程方式添加 TestNG Listener 的不同实现。
由于我无法找到任何方法通过@Listeners({}) 注释为它提供某种工厂,并且创建我自己的 TestNG 运行器似乎不可行,所以我选择了IAlterSuiteListener 接口,其中,根据文档:
允许您在您的套件 XML 文件中更改套件(或)测试标记 运行时
为了实现这一点,我创建并注册了一个简单的监听器:
public class CustomListener implements IExecutionListener {
@Override
public void onExecutionStart() {
System.out.println("on start");
}
@Override
public void onExecutionFinish() {
System.out.println("on finish");
}
}
public class AlterSuiteListener implements IAlterSuiteListener {
@Override
public void alter(List<XmlSuite> suites) {
for (XmlSuite suite: suites) {
suite.addListener(String.valueOf(CustomListener.class));
}
}
}
testng.xml
<suite name="all" verbose="1" parallel="tests">
<listeners>
<listener class-name="sandbox.AlterSuiteListener" />
</listeners>
<test name="all" parallel="methods" thread-count="5">
<packages>
<package name="sandbox" />
</packages>
</test>
</suite>
为了确保AlterSuiteListener 有效,我尝试简单地更改一些套件配置(设置测试超时)并且它确实有效。但是,添加监听器没有任何效果。
提前谢谢你。
【问题讨论】: