我们对代码进行了一系列不错的单元测试,这些单元测试运行时间不到2分钟。我们还使用TeamCity进行构建并在每次签入后运行测试。但是,我们仍然遇到问题,开发人员“忘记”在提交之前运行所有测试导致TeamCity失败,如果此签入在下午6点完成可能会打破一夜。
“忘记”是一个通用术语,还有一些其他常见的原因,即使记住运行测试也可能导致TeamCity失败。如。
- >开发人员只检查他/她工作区中的一些修改过的文件 - >在eclipse之外修改了一个文件,这样eclipse的团队同步透视不会将其检测为脏。
您如何在组织中处理此问题?
我们正在考虑为开发人员引入“签入程序”,这将是一个自动运行所有单元测试然后提交工作区中所有“脏”文件的自动化工具。你有过这种过程的经验吗?您是否了解可能有助于此过程的任何工具?我们的开发环境是使用Eclipse的PyDev插件的Python。
答案 0 :(得分:6)
在我之前工作的一个团队中,我们达成协议,任何打破测试的人都会在第二天早上为整个团队购买培根三明治。它的极端,但它的工作完美!
答案 1 :(得分:4)
我认为这更像是一个社会问题,而不是自动化系统的缺陷。
是的,您可以改进系统,但是对于那些考虑其提交含义并在达到提交之前对其进行测试的人来说,它们将无法匹敌。
答案 2 :(得分:3)
对于mercurial,你可以使用钩子,它将运行测试并且只允许推动成功。但这可能需要大量时间进行推送(但开发人员无论如何都必须运行这些测试)。
或者您可以拥有自己的一组bash脚本,这些脚本将运行test并且只运行commit命令。例如,对于django和svn commit,它看起来就像这样简单:
./manage.py test && svn commit $@
或者还有另一种方式:如果有人提交代码,但没有通过测试,他会付一些钱。很快人们就会记得测试,因为他们不喜欢付钱的想法; - )
答案 3 :(得分:3)
TeamCity对pretested commit有一些支持;如果您的开发团队正在使用支持的IDE,您可能会考虑这一点。
在我的公司,我们并不担心太多 - 我们的模式看起来像这样。
(a)每个开发人员在TeamCity中都有自己的项目配置,其根目录指向他们自己的沙箱。他们被允许在这里做任何他们喜欢的事情。
(b)开发团队有一个集成沙箱,可以交付所有更改。项目封装了在源控制系统中监视此分支的配置。 Dev Leads可以在这里制定规则,但这个规则几乎总是“它必须保持绿色”。我必须看一下干净版本的确切百分比 - 它不是一个完美的记录,但它足够高,以至于我从未想过要坚持让开发人员对运行测试更加自律。
(c)实际交付来自主流,它将保持绿色(tm)。 Dev lead负责在明确定义的时间表上提供与主流集成的干净快照。这个项目实际上是生成交付给测试的安装程序,进入托管的位等等。
你可能采取比我们更激进的政策的一个原因是我们的构建周期很慢 - 大约四个小时。如果我们的数量级较小,成功率较低,我可能会争论不同的情况。
答案 4 :(得分:0)
对于git,你可以:http://francoisgaudin.com/2011/02/16/run-django-tests-automatically-before-committing-on-git/
在提交Git之前自动运行Django测试
由于我经常忘记在提交前进行单元测试,所以我花了一个 当我发现回归3时,很多时候都在寻找糟糕的提交 稍后提交。
然而,在每个测试之前自动运行测试非常容易 承诺。在.git / hooks / pre-commit中,输入:
python manage.py
test exit $?
然后chmod 755这个文件就完成了。我真的很喜欢git: - )
在提交之前不要忘记采购你的virtualenv。
请注意,测试是在您的工作树上运行而不是提交 本身,所以如果你只提交工作树的一部分,它可能会失败 你的提交通过了测试。