Я хочу программно добавить различные реализации 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
работает, я попытался просто изменить конфигурацию пакета (установив время ожидания теста), и это действительно работает. Однако добавление слушателя не дает никакого эффекта.
Заранее спасибо.