【问题标题】:Remembering to run tests before commit记住在提交之前运行测试
【发布时间】:2011-03-30 12:06:31
【问题描述】:

我们的代码有一套不错的单元测试,这些单元测试在 2 分钟内运行。我们还使用 TeamCity 进行构建并在每次签入后运行测试。但是,我们仍然会遇到开发人员“忘记”在提交之前运行所有测试的问题,从而导致 TeamCity 失败,如果此签入是在下午 6 点完成的可能会整夜破碎。

“忘记”是一个通用术语,还有其他几个常见原因导致即使记住运行测试也可能导致 TeamCity 失败。如。

-> 开发人员仅在他/她的工作区中签入一些已修改的文件。
-> 在 eclipse 之外修改了一个文件,因此 eclipse 的团队同步透视图不会检测到它是脏的。

您如何在您的组织中处理此问题?

我们正在考虑为开发人员引入“签入程序”,这将是一个自动化工具,可以自动运行所有单元测试,然后在您的工作区中提交所有“脏”文件。你有过这样的过程吗?您是否知道任何可以促进此过程的工具?我们的开发环境是使用 Eclipse 的 PyDev 插件的 Python。

【问题讨论】:

  • 这可能有帮助,也可能没有帮助,我只将它用于 Visual Studio 和包含单元测试的 msbuild 脚本。有一个 Eclipse 插件在签入之前会进行构建(如果需要,可以进行单元测试)。看起来 Eclipse 也有类似的东西。 jetbrains.com/teamcity/features/…

标签: python unit-testing build-automation teamcity


【解决方案1】:

在我们达成一项协议之前,我曾在其中一个团队工作,即任何打破测试的人都可以在第二天早上为整个团队购买培根三明治。它的极端,但它完美地工作!

【讨论】:

    【解决方案2】:

    我认为这更多是一个社会问题,而不是自动化系统的缺陷。

    是的,您可以改进现有的系统,但对于那些考虑其提交的含义并在提交之前对其进行测试的人来说,它们是无法匹敌的。

    【讨论】:

    • 我同意这一点,培训可以做很多事情。我们也一直在尝试使用各种反馈机制,并且在这方面做得更好。但是每周至少会出现一次故障。因此,我想知道是否要求每个人始终执行多步骤签入流程是不是太过分了,我们应该有一个工具来解决这个问题。
    • +1。奇怪的是,我在过去 24 小时内盯着一个坏掉的主干看,因为有人犯了然后离开了。我的团队在“承诺和确保”流程方面做得很好,但最近开始下滑。我们与之合作的另一个更大的小组给了人们 1 小时的时间来解决他们的构建问题,否则更改将被还原。在与您的团队进行培训和讨论时,他们需要参与到共同开发树的承诺中,这意味着您承诺并确保更改是有效的。否则,你会妨碍你的队友完成他们的工作。
    【解决方案3】:

    对于 mercurial,您可以使用钩子,它将运行测试并且只允许推送成功。但这可能需要大量时间来推送(但开发人员无论如何都必须运行这些测试)。

    或者您可以只拥有自己的一组 bash 脚本,它们将运行测试,然后才运行提交命令。例如对于 django 和 svn commit,它看起来就像这样简单:

    ./manage.py test && svn commit $@
    

    或者还有另一种方式:如果有人提交代码,但没有通过测试,他会支付一些款项。很快人们就会记得测试,因为他们不喜欢付钱的概念;-)

    【讨论】:

    • 我做了一个别名 alias svnci="bundle exec rspec spec && svn ci -m "
    【解决方案4】:

    TeamCity 对pretested commit 有一些支持;如果您的开发团队正在使用受支持的 IDE,您可能会对此进行调查。

    在我的公司里,我们并不太担心 - 我们的模式看起来像这样。

    (a) 每个开发人员在 TeamCity 中都有自己的项目配置,根指向他们自己的沙箱。他们可以在这里做任何他们喜欢做的事情。

    (b) 开发团队有一个集成沙箱,所有更改都在其中交付。项目封装了在源代码控制系统中监视此分支的配置。开发主管可以在这里制定规则,但该规则几乎总是“必须保持绿色”。我必须查看干净构建的确切百分比 - 这不是一个完美的记录,但它足够高,以至于我从未坚持要求开发人员在运行测试时更加自律。

    (c) 实际交付来自主流,应保持绿色 (tm)。开发主管负责按照明确定义的时间表向主流提供完整的集成快照。这个项目是实际生成交付测试的安装程序、进入托管的位等的项目。

    您可能会采用比我们更激进的策略获得方法的一个原因是我们的构建周期很慢 - 大约四个小时。如果我们的规模小一个数量级,成功率低,我可能会提出另一种情况。

    【讨论】:

    • 你是用 subversion 还是 DVCS 来做这个的?如果颠覆,你如何管理开发者沙箱?
    • 策略是在我们使用 Perforce 时形成的;每个沙箱都映射到一个分支。
    【解决方案5】:

    对于 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 :-)

    在提交之前不要忘记 source 你的 virtualenv。

    请注意,测试是在您的工作树上运行的,而不是在提交上 本身,所以如果你只提交工作树的一部分,它可能会失败 当您的提交通过测试时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2011-04-30
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 2020-03-04
      • 2020-03-21
      相关资源
      最近更新 更多