当任何测试失败时,我尝试将屏幕截图添加到魅力报告中。该文件会在相应的文件夹 (/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 项目中,这种方式效果很好)
您正在使用 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
,文件的内容应该是您的完整类路径。
有关更多信息,请参阅此问题
的答案中的解释