将Surefire测试结果链接到Jenkins内的WebDriver屏幕截图

Mar*_*mer 5 java webdriver junit4 surefire jenkins

Context 我使用Java,JUnit和Selenuim WebDriver实现了一个测试套件,以自动化Web应用程序的测试.Test Suite在Jenkins中部署为Maven作业,可以重建对TestSuite或SUT的更改.Jenkins还运行TestSuite,为测试案例提供了许多顶级maven作业,以便按计划和按需不断地使用不同的浏览器测试目标系统.Surefire插件用于显示测试结果,Emma插件用于测试覆盖率.

当JUnit @Test失败时(即检测到SUT中的错误,而不是测试套件错误),该套件会将浏览器的屏幕截图保存到Jenkins工作区下的文件夹中.屏幕截图文件名是UUID,记录在测试日志中.这一切都非常有效.

问题 通过Jenkins UI钻入工作区可以看到屏幕截图.然而,这是一种笨拙的机制.我想在Jenkins UI中找到一种方法,将Surefire结果和/或控制台输出超链接到特定的屏幕截图.例如,通过单击日志中的UUID.

Dan*_*ton 3

很好的问题。我刚刚经历过实施类似的事情。虽然这并不完全是您想要的,但它确实可以在 Jenkins UI 中提供屏幕截图(而不是文件系统访问)。

您需要的第一件事是 Jenkins JUnit 附件插件: https://wiki.jenkins-ci.org/display/JENKINS/JUnit+Attachments+Plugin

我有一个关于无法查看文件的错误的现有问题: Jenkins JUnit Attachments Plugin throws 404 for Attached files

不过,我成功地重新编译了 Maven 插件并使其正常工作。我很乐意提供说明,或向您发送编译后的 .hpi 文件(仅一行更改)。

基本上,我在测试中包含此代码,以便在测试失败时捕获屏幕截图(并将其保存在正确的目录中(根据附件插件的要求)。它还在失败的测试后命名屏幕截图:

@Rule
public TestRule watcher = new TestWatcher() {
    @Override
    public void finished(Description description) {
        driver.quit();
    }

    @Override
    public void failed(Throwable e, Description description) {
        try {
            File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

            String filePathRoot = "C:\\_Jenkins\\workspace\\" + jenkinsJobName + "\\target\\surefire-reports\\";
            String fullFilePath = filePathRoot + description.getClassName() + "\\" + description.getMethodName() + ".jpg";

            FileUtils.copyFile(screenshot, new File(fullFilePath));
        } catch(Exception ex) {
            System.out.println(ex.toString());
            System.out.println(ex.getMessage());
        }

        driver.quit();
    }
};
Run Code Online (Sandbox Code Playgroud)

如果测试成功,则调用“finished”方法。

最终结果是每当测试失败时附加到 jenkins 构建的屏幕截图。

注:我的所有测试都在 Windows 7 VM(从属)上运行,因此您看到的任何路径都是专门针对 Windows 的。