只运行相应源代码已更改的单元测试?

时间:2012-11-15 08:32:17

标签: java junit jenkins regression

我在Jenkins CI服务器上运行单元测试和Selenium测试。众所周知,测试需要很长时间才能在大型项目中运行。

是否有适用于Java的工具/框架只能触发各自源代码已更改的测试?这是因为并非每次提交SCM都会影响源代码的所有区域......

我使用Cobertura进行代码覆盖,使用Surefire进行报告。

编辑:我找到了Atlassian Clover,但我正在寻找一个免费的解决方案。

4 个答案:

答案 0 :(得分:6)

  

我在Jenkins CI服务器上运行单元测试和Selenium测试。   众所周知,测试需要很长时间才能在大型项目中运行。

这是我要解决的问题。将项目拆分为多个逻辑单元(例如,持久层,服务层,Web层)并单独测试它们。这样,只需在Web层发生更改并且每个工件的构建时间变短时运行Selenium测试

答案 1 :(得分:3)

您可以尝试JUnit MaxInfinitest,但它们都是基于IDE的。

答案 2 :(得分:3)

一般情况下,如果不运行测试,就无法可靠地推断出哪些代码涵盖了哪些代码,即使运行测试,执行路径也可能因运行而异。我怀疑像这样的完美分析等同于Halting Problem

但是,您可以使用先前测试运行中的覆盖率或测试用例文件中的导入来推断哪些测试可能会更改代码。

最后,您确实希望运行整个测试套件,但是,对于更改代码运行测试更为重要是正确的,因为1.开发人员知道他们早先搞砸了2.如果您经历了很多更改,首先测试最新版本并进行早期修订只是为了将问题分成两部分。

Google声称*他们的黑客代码存储库在提交时**运行单元测试,并且他们调整了测试框架以确定首先运行哪些测试。我不知道他们的变化是否公开。

*与会议演示的视频对话,我不记得确切的名称或链接

严格提交后

**,如果测试开始失败则自动回滚

答案 3 :(得分:1)

就我个人而言,我认为你正在以错误的方式看待这个问题。更好的方法是根据功能和时间将Junit测试分解为单独的软件包。

对于这样的项目,我为每次提交运行健全性测试,但是这些测试非常有限,涵盖了最基本的功能,然后在这个运行的每晚测试中覆盖更多(看作没有人工作的夜晚,它提供了一个12小时的窗口来测试那天的代码。)

如果您的整个测试套件需要它(但如果它确实会让我感到惊讶),那么您可以运行一个周末测试套件。

要仅测试更改的类会假设这些类不会影响项目的任何其他部分,这可能会导致错误,除非您进行全面测试,否则您将碰巧更改无论如何,受影响的地区。

我知道这在技术上并不能回答你的问题,而是需要考虑的事情。