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



上下文我已经使用Java,JUnit和Selenuim WebDriver实现了一个测试套件,以自动测试Web应用程序。 测试套件部署为 Jenkins 中的 Maven 作业,该作业根据对 TestSuite 或 SUT 的更改进行重建。 Jenkins 还为测试用例的许多顶级 maven 作业运行 TestSuite,以使用不同的浏览器按计划和按需持续测试目标系统。 Surefire插件用于使测试结果可见,Emma插件用于测试覆盖率。

当 JUnit @Test失败时(即检测到 SUT 中的错误,而不是测试套件错误),套件会使用 WebDriver 功能获取浏览器的屏幕截图,并将其保存到 Jenkins 工作区下的文件夹中。 屏幕截图文件名是记录在测试日志中的 UUID。 总的来说,这一切都运行良好。

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

很好的问题。我刚刚经历了类似的事情。虽然这不是你要找的,但它确实使屏幕截图在 Jenkins UI 中可用(而不是文件系统访问)。

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

我有一个关于无法查看文件的错误的问题:Jenkins JUnit 附件插件为附件抛出 404

但是,我设法重新编译了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();
    }
};

如果测试碰巧成功,则改为调用"已完成"方法。

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

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

我认为您需要扩展Junit报告。这里已经回答了这个问题。附带说明一下,UI 测试是验收测试,像 cucumber 这样的 BDD 框架非常适合它们。看看Cucumber-JVM,它与Junit紧密集成,并且对将屏幕截图嵌入报告等具有出色的支持。它还为使用此类 jenkins 插件的企业主提供了测试的良好可见性。

最新更新