Искам програмно да добавя различни реализации на 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
работи, опитах просто да променя някои конфигурации на пакета (задаване на време за изчакване на теста) и наистина работи. Добавянето на слушател обаче няма ефект.
Благодаря ви предварително.