在Jenkins

时间:2016-11-23 05:51:36

标签: jenkins testng jenkins-plugins allure html-reports-jenkins

什么工作 - 我们目前正在使用testng可通过电子邮件格式和allure为我们当前的测试执行生成格式化报告。这些与我们当地的工作正常。可以在图像中看到/target/report结构,分别为诱惑(/ site)和 testng(/ surefire)报告描述2个不同的文件夹: enter image description here

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

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

同样使用Email ext插件,我可以将.html报告附加到发送给收件人的邮件中,指定附件字段详细信息如下: **/target/surefire-reports/emailable-report.html, **/target/surefire-reports/index.html

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

注意 - 尝试过这些:

  1. 将所有.css文件与.html文件一起附加到附件中,但是,一个是暴力,第二个仍然不起作用。

  2. 另一种方法是将scp报告(/ target)目录发送到Jenkins实例的另一台主机,并通过电子邮件通知共享该计算机上的报告路径并获取格式报告共享。但是,这需要一个额外的资源和依赖它,我们希望避免。

  3. 发布此内容时,我看到HTML publisher插件似乎正在做类似的事情。尝试安装并使用它。但我假设我们正在使用 Jenkins 2.6 ,插件注释为

  4.   

    从版本1.625.3和1.641开始,Jenkins限制了什么   提供静态文件时可以显示内容。这个可以   影响如何使用此插件存档HTML文件。看到   有关详细信息,请参阅内容安全策略。

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

    任何建议都非常受欢迎,请提出更多相关信息。

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

1 个答案:

答案 0 :(得分:1)

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

选项1

  1. IExecutionListener构建一个实现,其中您创建逻辑以基本压缩所需的所有报告并将其作为电子邮件发送。
  2. 在这个监听器中接线,应该注意。
  3. PS:目前在"之前调用IExecutionListener的实现"报告生成阶段。我已将此更改为this提交的一部分。因此,如果你想继续使用这种方法,那么你可能要等到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.
    
        }
    }