如何在junit 5测试失败时截屏

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

有人可以告诉我:当测试方法失败时如何截图(jUnit 5)。我有一个带有

BeforeEach
AfterEach
方法的基础测试类。任何其他带有 @Test 方法的类都会扩展基类。

junit junit5
3个回答
1
投票

嗯,可以编写截屏的 Java 代码,请参见 here 示例。

但我非常想知道你试图用这种方式解决的真正问题。我不确定您是否已经意识到这一点,但 JUnit 的主要目的是为您提供一个在各种环境中运行测试的框架。 当然,您可以在 IDE 中运行 JUnit,这很好,也许您会发现获取屏幕截图很有帮助。但是:“通常”单元测试也会在夜间构建期间运行 - 在“截取屏幕截图”可能没有任何意义的环境中!

除此之外:屏幕短片是一种“极其”无效的信息收集方式!当您失败时,您应该锁定textual日志文件、html/xml 报告等。您希望失败的测试生成易于理解的信息。

所以,真正的答案是:从你现在正在做的事情中退一步,重新考虑非屏幕截图解决方案来解决你真正想要解决的问题! 您不需要对 JUnit 测试失败/通过进行屏幕截图,推荐的方法是使用以下工具自动生成各种报告(测试通过/失败报告、代码覆盖率报告、代码复杂性报告等)/插件。

您可以使用

Cobertura maven 插件

1
投票
Sonarqube 代码质量工具

,以便它们自动为您生成报告。

您可以在此处查找Cobertura-maven-plugin,在

此处

查找Sonarqube了解更多详细信息。 您需要将这些工具与您的 CI(持续集成)环境集成,并确保如果代码未通过一定的质量(在测试覆盖率、代码复杂性等方面),则项目构建(war/ear)应该会自动失败。

我通过扩展做到了这一点,这是我的测试类: public class MyTests2 { public static WebDriver driver; public static WebDriver getDriver(){ return driver; } @RegisterExtension static RunnerExtentsion2 extentsion2 = new RunnerExtentsion2(MyTests2::getDriver); @BeforeEach private void setUp() { System.setProperty("webdriver.chrome.driver", "drivers/chromedriver.exe"); driver = new ChromeDriver(); driver.manage().window().maximize(); } @AfterEach private void tearDown() { driver.quit(); } @Test public void emptyBothNameAndPassAuthNegaTest() { driver.navigate().to("https://www.google.com/"); throw new NoSuchElementException("my exception"); } }


0
投票

public class RunnerExtentsion2 implements AfterTestExecutionCallback { private Supplier<WebDriver> driverSupplier; public RunnerExtentsion2(Supplier<WebDriver> driverSupplier){ this.driverSupplier = driverSupplier; } @Override public void afterTestExecution(ExtensionContext context) throws Exception { Boolean testResult = context.getExecutionException().isPresent(); if (context.getExecutionException().isPresent()) { System.out.println("screenshot"); driverSupplier.get().get(...); Thread.sleep(3000); } }

}

希望有帮助。

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