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

p8ekf7hl  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(172)

有没有人可以告诉我:如何在测试方法失败时进行屏幕截图(jUnit 5)。我有一个带有BeforeEachAfterEach方法的基本测试类。任何其他带有@Test方法的类都扩展了基类。

plicqrtu

plicqrtu1#

好吧,可以写java代码来截图,比如here
但我非常想知道您试图用这种方式解决的真实的问题。我不确定您是否已经意识到这一点,但JUnit的主要目的是为您提供一个在各种环境中运行测试的框架。
当然,你可以在IDE中运行JUnit,这很好,也许你会发现截图很有帮助。但是:“通常”单元测试也会在夜间构建时运行-在“截图”可能没有任何意义的环境中!
除此之外:screenshorts是一种极其无效的收集信息的方法!当你失败时,你应该锁定文本日志文件,html/xml报告,无论什么。你希望失败的测试生成的信息可以很容易地消化。
所以,这里的真实的答案是:从你现在正在做的事情中退一步,重新考虑你真正想要解决的问题的非截图解决方案!

xggvc2p6

xggvc2p62#

您不需要对JUnit测试失败/通过进行屏幕截图,而推荐的方法是使用以下工具/插件自动生成各种报告(测试通过/失败报告,代码覆盖率报告,代码复杂性报告等)。
您可以使用Cobertura maven pluginSonarqube code quality tool来自动生成报告。
您可以在here中查找Cobertura-maven-plugin,在here中查找Sonarqube以获取更多详细信息。

**您需要将这些工具与您的CI(持续集成)环境集成,并确保如果代码没有通过某些质量(在测试覆盖率,代码复杂性等方面),那么项目构建(war/ear)应该自动失败。

jtoj6r0c

jtoj6r0c3#

我通过扩展做到了这一点,下面是我的测试类:

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");
    }
}

字符串
以下是我的截图taker类:

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);
        }
    }
}

相关问题