【发布时间】:2016-10-11 17:26:07
【问题描述】:
背景:
我们有一个用 Java 编写的相当大的 REST API,我们正在使用单元测试和功能测试的组合进行测试。测试时需要许多变化,特别是在功能级别。虽然单元测试存在于树中,但功能测试位于单独的代码存储库中。
我们目前使用 Jacoco 进行测试覆盖,使用 TestNG 运行我们的单元测试,但我相信我的问题的答案应该适用于其他工具组合。
我们在 Jenkins 中有几个不同的工作,这些工作由签入主项目触发。其中包括运行 Coverity 等工具的作业以及几个不同的功能测试作业。这些作业由初始提交触发,在所有下游作业成功完成之前,该提交不被视为“绿色”。
问题:
我们如何获取覆盖率报告(如 Jacoco 二进制文件和 TestNG xml 文件)并将它们结合起来以显示我们所有测试的总代码覆盖率?具体来说,如果它们存在于同一个作业/目录中,我们知道如何组合它们,但这些文件分布在可能在不同时间运行的多个 Jenkins 作业中。
根据我的经验,最普遍接受的处理方法是使用 Promoted Builds Plugin 触发所有作业,然后在完成后将其工件拉到触发作业。但是,当您尝试汇总的工作不止一两个时,我觉得这种扩展性不太好。当您的主项目(旧版本等)可能有多个变体时尤其如此。
我知道可以在 Jenkins 中对文件进行指纹识别,这样我们就知道 -.jar 与作业 A、B 和 C 中使用的版本相同。是否存在一个插件可以根据是否存在不同的指纹文件?
另一种解决方案(可能从 ant/groovy 脚本运行)是将测试数据推送到与 git 提交哈希绑定的某个目录,并在基于汇总作业的情况下检索所有此类数据在基础项目的 git commit 哈希上。
有没有简单的方法来做到这一点?有没有人想出更好的其他方法来解决这个问题?
谢谢,
迈克尔
【问题讨论】:
标签: java unit-testing jenkins functional-testing