在Docker容器上执行测试时,黄瓜ConcurrentEventListener实现机制不起作用

问题描述 投票:0回答:1

我已经实现了黄瓜事件的事件监听器:

public class AdccEventListener implements ConcurrentEventListener {
private static boolean stepFailed = false;


@Override
public void setEventPublisher(EventPublisher publisher) {
    System.out.println("register handlers!!!");
    publisher.registerHandlerFor(TestCaseStarted.class, this::scenarioStartedHandler);
    publisher.registerHandlerFor(TestCaseFinished.class, this::scenarioFinishedHandler);
    publisher.registerHandlerFor(TestStepStarted.class, this::stepStartedHandler);
    publisher.registerHandlerFor(TestStepFinished.class, this::stepFinishedHandler);
}

private void scenarioStartedHandler(TestCaseStarted event) {
    stepFailed = false;
}

private void scenarioFinishedHandler(TestCaseFinished event) {
    BaseTestUtils.reportInfoMessage("Scenario finish name is: " + event.getTestCase().getName() + " end of Scenario statement!");
    if (stepFailed) {
        Result result = event.getResult();
        setPrivateField(result, "status", Status.FAILED);
    }
}

private void stepStartedHandler(TestStepStarted event) {
    if (event.getTestStep() instanceof PickleStepTestStep) {
        PickleStepTestStep testStep = (PickleStepTestStep) event.getTestStep();
        BaseTestUtils.reportInfoMessage("step name is: " + testStep.getStep().getText() + " end of statement!");
        ThreadLocalEvent.setStep(testStep);
    }
}

private void stepFinishedHandler(TestStepFinished event) {
    if (event.getTestStep() instanceof PickleStepTestStep) {
        PickleStepTestStep testStep = (PickleStepTestStep) event.getTestStep();
        Result result = event.getResult();
        ThreadLocalEvent.setResult(result);
        if (result.getStatus().equals(Status.FAILED)) {
                if (!testStep.getStep().getKeyWord().startsWith("Given")) {
                    stepFailed = true;
                    setPrivateField(result, "status", Status.PASSED);
                }
        }
    }
}

private void setPrivateField(Object subject, String fieldName, Object value) {
    try {
        Field f = subject.getClass().getDeclaredField(fieldName);
        f.setAccessible(true);
        f.set(subject, value);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

我已将事件侦听器声明为RunTests类的CucumberOptions中的插件。

@CucumberOptions(plugin = {"pretty", "html:target/cucumber", "json:target/cucumber.json", "com.radware.bdd.AdccEventListener"},
    glue = {"com.radware.tests"},
    features = {"src/test/resources/Features"},
    strict = true,
    tags = {"@Functional"})

现在,当我在本地工作站上执行测试时,一切都很好。我正在获取在侦听器中发布的所有事件。

但是,当在Docker容器上执行同一项目时,侦听器不会获得任何事件。F。 e。开始步骤,结束步骤事件。

任何想法可能导致它在容器下无法正常工作吗?

谢谢。Stas

events cucumber listener event-listener
1个回答
0
投票

我发现了问题。

[当从Jenkins或Docker容器启动Maven测试时,传递了CucumberOptions参数。参数之一是“ --plugin”。因此我的本地定义被覆盖。

解决方案是将我的自定义插件“ com.radware.bdd.AdccEventListener”添加到通过cli命令传递的选项中。

© www.soinside.com 2019 - 2024. All rights reserved.