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

use*_*582 13 java junit regression jenkins

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

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

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

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

Sea*_*oyd 6

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

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

  • 当然可以,但是 Jenkins 如何知道服务层工件已更改并且只应执行这些测试?这个问题不是和我原来的问题一样吗,即Jenkins如何知道要执行哪些相关测试? (2认同)
  • @user1340582 再次,我建议将您的项目拆分为多个maven模块,当然这些模块将单独编译 (2认同)

Dim*_*nek 5

一般来说,如果不运行测试,您就无法可靠地推断出哪些代码被哪个测试覆盖,即使您确实运行了测试,执行路径也可能因运行而异。我怀疑像这样的完美分析相当于停止问题

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

最后,您确实想要运行整个测试套件,但是,您是对的,对更改的代码运行测试更重要,因为 1. 开发人员知道他们之前搞砸了,2. 如果您经历了很多更改,它会使首先测试最新版本并转到早期版本只是为了解决问题。

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

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

**严格在提交之后,如果测试开始失败则自动回滚