0

工作原理- 我们目前正在使用testng可发送电子邮件的格式,并allure为我们当前的测试执行生成格式化报告。这些与我们当地的工作正常。该/target/report结构可以在图像中看到,分别描绘了 allure(/site) 和testng(/surefire)报告的 2 个不同文件夹: 在此处输入图像描述


尝试- 当我们尝试使用与本地相同的步骤使用Jenkins实现 CI 时,测试执行得很好,并且相应的报告也正在生成。

使用TestNG插件并指定模式**/target/surefire-reports/testng-results.xml可以很好地显示 testNG 结果图。

还使用电子邮件分机插件,我可以将 .html 报告附加到发送给收件人的邮件中,指定附件字段详细信息为: **/target/surefire-reports/emailable-report.html, **/target/surefire-reports/index.html


什么不起作用- 我们最终收到带有 HTML 报告的电子邮件,但这些没有格式化,可能是因为与这些链接的所有 CSS 都被遗漏了。有没有办法克服这个问题?


注意 -尝试过这些:

  1. 在附件中附加所有 .css 文件和 .html 文件,但是,一个是蛮力的,第二个它仍然不起作用。

  2. 一种方法也是scp从 Jenkins 实例到另一个主机的报告(/目标)目录,并通过电子邮件通知共享该机器上报告的路径,并共享格式化的报告。但是这需要额外的资源和对它的依赖,这是我们想要避免的。

  3. 在发布此内容时,我看到一个似乎在做类似事情的HTML 发布者插件。尝试安装并使用它。但我假设因为我们正在使用Jenkins 2.6并且插件说明读取

从版本 1.625.3 和 1.641 开始,Jenkins 限制了在提供静态文件时可以显示的内容类型。这会影响使用此插件归档的 HTML 文件的显示方式。有关详细信息,请参阅配置内容安全策略。

我们没有Publish HTML Reports在后期构建操作中获得选项。


任何建议都非常受欢迎,请务必要求提供更多信息。

编辑:除了上面的注释 2,我们设置中使用的 Jenkins 实例是 docker slave,显然使生成的报告或目标不是持久的。

4

1 回答 1

1

这是您可以考虑做的事情。

选项1

  1. 为IExecutionListener构建一个实现,在其中创建逻辑以基本上压缩所有您想要的报告并将其作为电子邮件发送。
  2. 连接这个监听器,这应该小心。

PS:目前 IExecutionListener 的实现是在报告生成阶段“之前”调用的。作为提交的一部分,我已对此进行了更改。因此,如果您想继续使用这种方法,那么您可能想等到 TestNG 发布新版本(应该在几天内发生)

选项 2

  • 构建一个包装报告器(实现IReporter)并仅连接到这个报告器。
  • 在此报告器中,您明确实例化您希望在报告阶段调用的所有报告器。有关可能的示例,请参见下文。
public class ChainedReporter implements IReporter {

    private List<IReporter> reporters = new ArrayList<>;

    public ChainedReporter() {
        reporters.add(new FooReporter() );//Here FooReporter is a custom reporter. Replace it with yours.
        reporters.add(new BarReporter() );//Here BarReporter is a custom reporter. Replace it with yours.
    }
    public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
        for (IReporter reporter : reporters) {
            reporter.generateReport(xmlSuites, suites, outputDirectory);
        }
        //By now we have ensured that all the reporting logic has been triggered and we have reports generated.
        zipReports(); //  This method would take care of creating zipped files of all the reports.
        emailReports(); // This emthod would take care of emailing the actual reports.

    }
}
于 2016-11-27T05:34:12.837 回答