Условно добавяне на TestNG Listener?

Искам програмно да добавя различни реализации на 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