Allure 没有在 onTestFailure() 方法中添加附件?

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

当任何测试失败时,我尝试将屏幕截图添加到魅力报告中。该文件会在相应的文件夹 (/allure-results) 中创建,但附件不会添加到报告中。实际上,不要注意屏幕截图的创建 - 因为我确定在此 (

onTestFailure
) 方法中没有将任何附件添加到报告中,每次任何测试失败时都会调用该方法。

我的项目结构:

该项目使用 Cucumber 实现,并通过 TestNG 执行。 因此,“Cucumber-Step-Class”

DemoTest
扩展了基础测试,提供了从 testng.XML 文件执行测试的可能性:

@Listeners({TestEventsListener.class})
public class BaseTest extends AbstractTestNGCucumberTests {

    @Override
    @DataProvider(parallel = true)
    public Object[][] scenarios() {
        return super.scenarios();
    }

    @Test(description = "Runs Cucumber Scenarios", dataProvider = "scenarios")
    public void runScenario(PickleWrapper pickleWrapper, FeatureWrapper featureWrapper) {
        TestNGCucumberRunner testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
        testNGCucumberRunner.runScenario(pickleWrapper.getPickle());
    }
}

DemoTest

@CucumberOptions(
        features = {"classpath:scenarios/demo/demo.feature"},
        glue = "xxx.steps",
        plugin = {"io.qameta.allure.cucumber6jvm.AllureCucumber6Jvm"}

)
public class DemoTest extends BaseTest {

....

    @Given("Open the demo login page")
    public void openTheDemoLoginPage() {
        WebDriver driver = DriverProvider.getInstance().getDriver();
        driver.get("https://google.com");
        Utils.delayMillisec(5000);
        AllureReporter.makeScreenshot(driver); << there is attachment added to the allure report successfully, so this feature is works out of onTestFailure() method
    throw new RuntimeException();// "call" the `TestEventsListener::onTestFailure` method
    }

测试事件监听器:


public class TestEventsListener implements ITestListener {

    @Override
    public void onTestFailure(ITestResult result) {
        Logging.info("Test failed: " + result); < ----- this log is output, so the method is definitely called
        Allure.addAttachment("Attachment", "Added"); < --- unsuccessful attempt 1
        AllureReporter.makeScreenshot(driver); < ---- unsuccessful attempt 2
    }

要点:

屏幕截图在

/allure-results
文件夹中创建,但未作为结果中的附件添加到 allure 中。所以我想在调用此方法之前测试已停止并形成诱惑结果。我不明白为什么,以及如何解决它(在没有 Cucumber 的简单 TestNG 项目中,这种方式效果很好)

java selenium-webdriver testng allure
1个回答
0
投票

您正在使用 TestNG 侦听器,但当 Allure Test 上下文已关闭时,它会调用方法

onTestFailure()
,并且您无法再添加附件。

尝试实现 Allure Test Listener,如下例所示:

public class AllureAttachmentListener implements TestLifecycleListener {

    @Override
    public void beforeTestStop(TestResult result) {
        // Attach your files...
    }

为了注册您的监听器,您应该在路径

io.qameta.allure.listener.TestLifecycleListener
下创建文件
test/resources/META-INF/services
,文件的内容应该是您的完整类路径。

有关更多信息,请参阅此问题

的答案中的解释
© www.soinside.com 2019 - 2024. All rights reserved.