有人可以告诉我:当测试方法失败时如何截图(jUnit 5)。我有一个带有
BeforeEach
和 AfterEach
方法的基础测试类。任何其他带有 @Test 方法的类都会扩展基类。
嗯,可以编写截屏的 Java 代码,请参见 here 示例。
但我非常想知道你试图用这种方式解决的真正问题。我不确定您是否已经意识到这一点,但 JUnit 的主要目的是为您提供一个在各种环境中运行测试的框架。 当然,您可以在 IDE 中运行 JUnit,这很好,也许您会发现获取屏幕截图很有帮助。但是:“通常”单元测试也会在夜间构建期间运行 - 在“截取屏幕截图”可能没有任何意义的环境中!
除此之外:屏幕短片是一种“极其”无效的信息收集方式!当您失败时,您应该锁定textual日志文件、html/xml 报告等。您希望失败的测试生成易于理解的信息。
所以,真正的答案是:从你现在正在做的事情中退一步,重新考虑非屏幕截图解决方案来解决你真正想要解决的问题! 您不需要对 JUnit 测试失败/通过进行屏幕截图,推荐的方法是使用以下工具自动生成各种报告(测试通过/失败报告、代码覆盖率报告、代码复杂性报告等)/插件。
您可以使用
Cobertura maven 插件,以便它们自动为您生成报告。
您可以在此处查找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");
}
}
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);
}
}
}
希望有帮助。