将 TestNG 屏幕截图输出到 Jenkins

Posted

技术标签:

【中文标题】将 TestNG 屏幕截图输出到 Jenkins【英文标题】:Output TestNG screenshot to Jenkins 【发布时间】:2015-06-16 16:44:05 【问题描述】:

我正在寻找在 Jenkins 中输出 TestNG/Selenium 屏幕截图的解决方案。理想情况下,当 Jenkins 作业运行时,我希望将图像嵌入到控制台输出中或显示链接,以便用户可以在单独的窗口中查看屏幕截图。

这是我现在正在使用的一个函数:

@AfterMethod
public void takeScreenShotOnFailure(ITestResult testResult) throws IOException 
    if (testResult.getStatus() == ITestResult.FAILURE) 
        System.out.println("Status: " + testResult.getStatus());
        System.out.println("<img src=\"data:image/png;base64," + 
        ((TakesScreenshot)driver).getScreenshotAs(OutputType.BASE64) + "\" ></img>");
    

问题在于 Jenkins 将输出显示为纯文本。我尝试将输出复制到 html 页面中,它看起来不错。因此,Jenkins 呈现信息的方式似乎导致 Firefox/Chrome 将 html 代码显示为纯文本。知道如何解决这个问题吗?或者有没有更好的方法让 TestNG 的截屏功能与 Jenkins 一起使用?

【问题讨论】:

【参考方案1】:

您使用 jenkins 项目配置页面的“构建后操作”中的“归档工件”选项归档屏幕截图。要首先归档,您需要为项目设置自定义工作区。自定义工作区应指向根目录或包含截图文件夹的文件夹。然后归档后所有截图将显示为项目页面中的链接。这里的“报告”将是包含截图或任何文件的文件夹。报告在“QTP”文件夹下这是在自定义工作区中提到的。请在存档工件选项中使用斜杠而不是反斜杠。

项目页面:

在 jenkins 中使用自定义工作区

使用构建后操作归档工件

【讨论】:

【参考方案2】:

也许您可以使用 html 发布者插件。 https://wiki.jenkins-ci.org/display/JENKINS/HTML+Publisher+Plugin

生成一个包含文本和图像的基本 html 文件,它将在您的工作页面上显示为可点击的链接。 该镜像将与所有其他构建数据一起存储在 Jenkins 中。

【讨论】:

OP 想要在作业运行时得到结果。 这可能是一个可行的解决方案,但是应该在哪里生成 html 文件?如果我的代码生成一个 html 文件并将其放置在与为 HTML 发布者配置的目录相同的目录中,构建页面上会出现一个链接吗?或者还有什么我应该做的吗? 只需将 html 文件和您的屏幕截图放在当前作业工作区的任何位置即可。添加 html 发布者后期构建步骤,并使用 html 和屏幕截图文件的名称和位置对其进行配置。 html 发布者将获取文件的副本,将它们存储在 Jenkins master 上,并在构建页面的左侧创建一个链接。 对不起,我的意思是:将截图和 html 放在当前作业工作区的专用子目录中。配置 html 发布者插件以复制整个目录,并发布 html 文件。【参考方案3】:

Jenkins 控制台输出无法显示图像。但它将链接显示为链接 - 您可以从控制台输出单击它到相应的站点。

因此,您可以修改您的takeScreenShotOnFailure 以将图像从从属计算机移动到一个普通的 ftp 文件夹并在控制台输出中提供链接。 您应该可以立即看到图像。

它支持 http/ftp 链接。

【讨论】:

以上是关于将 TestNG 屏幕截图输出到 Jenkins的主要内容,如果未能解决你的问题,请参考以下文章

TestNG 中的非静态驱动程序和屏幕截图侦听器

如何使用 Java 截屏自动化测试? [关闭]

如何在 testNG 报告中包含失败屏幕截图

电脑怎么全屏截图

如何在 Jenkins 中将屏幕截图附加到 XCUITest 报告。只有通过 XCODE 运行才能看到截图

C语言 服务项进行全屏幕截图 但是截图后是黑屏怎么办?