使用单个Jenkins作业构建和运行单元测试的不同子集

时间:2015-10-02 14:10:44

标签: unit-testing jenkins junit

作为序言,由于“遗留”原因,我们的设置有点不寻常。我完全有可能与此对抗。我希望得到一个专家意见,是否有可能让我当前的设置工作或建议采用不同的方法。

环境

JUnit中具有超过10K单元测试的Java应用程序。由于遗留原因,整个单元测试运行需要很长时间(最终目标是修复问题的根源,但这不会很快发生)。

应用程序分为多个模块,每个模块都有自己的单元测试。按模块执行测试需要花费一定的时间,因此,如果有人提交代码以使用模块的代码重新发送子树并且只执行模块的测试,则可以快速获得结果。

当前Jenkins设置

JUnit工作

这是可以为任何模块运行测试的单个参数化作业。该作业将参数作为运行测试的正则表达式以及指示其运行的模块的参数,以用于通知目的。它检出整个 repo树,然后根据参数进行运行。

完成运行后,此作业将对JUnits进行分析,发布报告并发送电子邮件通知。

回购观察员

每个模块的一个回购观察者。观察者仅检出它想要监视的repo子树。当检测到更改时,它会触发JUnit作业,告诉它要运行哪些测试以及这是什么组件。

问题

一般情况下,设置运行良好,完全符合我的需要,但它打破了Jenkins和JUnit插件的一些不错的预期功能。

  1. 由于同一作业不断执行单元测试的不同子集,因此单元测试之间作业比较的作业不提供任何值。如果不在作业之间手动扫描,则无法确定新故障或单元测试的新修复方面的变化。
  2. 改变历史的事情非常相似: 每个回购手表都按照自己的时间表运行。假设我们对模块A进行了更改,并对模块B进行了更改,彼此之间的时间非常接近。如果观察者A首先触发,则由观察者A触发的JUnit作业将“声明”两个变化。当观察者B触发的JUnit作业运行时,它不会检测到仓库中的任何新变化。这会对电子邮件通知造成严重破坏,因为第二个JUnit工作不知道谁破坏了构建。
  3. 在一天结束时,我相信我正在寻找一种方法来在Jenkins中为同一工作建立非顺序作业之间的依赖关系,或者采用完全不同的方法。

    谢谢!

1 个答案:

答案 0 :(得分:0)

好的,让我们看看我是否用基本语言做到了这一点, 您想跟踪哪些变更集导致的故障?

在这种情况下,我会建议以下内容:再次简单来说 - 您需要根据当前的设置进行调整。

  1. 设置管理结果的作业

  2. 此作业应参数化以获取名称或更改编号并发布所有结果。

  3. 应在每次测试运行完成后触发此作业以合并所有结果

  4. 现在,如果引入了新的测试或失败,则相同的作业可以跟踪它并通过电子邮件发送导致失败的人。

    詹金斯是非常强大和非常通用的所以几乎每个secanrio如果没有插件与groovy它可以解决。所以我建议拿一支笔把它映射到电路板上并创建它的过程,而不仅仅是一个工作。