Условно добавить прослушиватель TestNG?

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

Заранее спасибо.


person ihorppp    schedule 19.10.2020    source источник


Ответы (1)


Я нашел решение с помощью ITestNGListenerFactory:

public class ConditionalListenerFactory implements ITestNGListenerFactory, ITestNGListener {
    public ConditionalListenerFactory() {
    }

    public ITestNGListener createListener(Class<? extends ITestNGListener> aClass) {
        if(condition()) {
            return new CustomListener();
        }
    }
}

А затем регистрация слушателя через @Listeners({ConditionalListenerFactory.class})

person ihorppp    schedule 25.11.2020