Asp.net 持续集成和自动化测试策略

Asp.net 持续集成和自动化测试策略,asp.net,continuous-integration,teamcity,Asp.net,Continuous Integration,Teamcity,我在一家使用持续集成(TeamCity)的公司工作。每次有人检查CI软件时,都会启动构建并运行所有单元/自动测试。问题是我们有超过7000个单元测试和756个自动化测试(用于测试JavaScript,因为我们有一个非常复杂的UI逻辑来进行计算等)。正如您可以想象的那样,每次有人执行签入时,整个过程都需要2个多小时才能完成所有步骤(构建UnitTest自动测试),因此我需要等待那么久才能得到结果,以了解签入是否破坏了自动测试或单元测试。最糟糕的情况是,当一个以上的人签入某个内容,以便TeamCit

我在一家使用持续集成(TeamCity)的公司工作。每次有人检查CI软件时,都会启动构建并运行所有单元/自动测试。问题是我们有超过7000个单元测试和756个自动化测试(用于测试JavaScript,因为我们有一个非常复杂的UI逻辑来进行计算等)。正如您可以想象的那样,每次有人执行签入时,整个过程都需要2个多小时才能完成所有步骤(构建UnitTest自动测试),因此我需要等待那么久才能得到结果,以了解签入是否破坏了自动测试或单元测试。最糟糕的情况是,当一个以上的人签入某个内容,以便TeamCity开始排队构建,在我可以得到有效结果(udated)之前,我可以等待半天!我们应该采取什么策略来加快这一进程?即使有一点变化,也可以运行所有自动化测试,这是一种最佳做法吗?

连续集成最适合于像或这样的分布式版本控制系统

每个开发人员都可以经常签入他们的本地存储库,而无需一直触发整个集成和UI测试仪式


在本地完成功能后,可以将其签入到中央存储库。因此,CI服务器只有在添加了新功能和/或修复程序后才能运行所有耗时的测试。

我将从两个方面来分解您的测试套件,目的是让您和您的团队能够进行登记,喝杯咖啡,回到办公桌后从team city获得一些有意义的反馈

  • 在每次提交时确定您真正想要测试的内容,将剩余的测试移动到一个按计划间隔运行的套件中(每小时、每夜-任何适合您的测试)

  • 如果一致同意运行每个提交的测试集仍然很大,则需要在并行运行的多个节点上设置和分布测试


  • 你可能还想增强你的CI机器,这取决于你的东西的性质,在tmpfs(RAM磁盘)中有测试的工作目录。

    我将从理论上讲,我还没有把它付诸实践,但我的目标是在今年夏天结束前完成CI

    从我所看到的那些在开发人员中赢得我最大尊重的人所做的陈述中,我所看到的关于测试策略的CI最常见的元素是将测试分为长时间运行和短时间运行

    然后,您需要配置标准签入启动解决方案基本验证的短期运行测试。然后在夜间构建和部署构建中,您只需要运行完整的测试套件来验证回归测试



    旁白/备选答案:鉴于我尚未为自己设置CI,我从未理解TeamCity的商业模式,即他们基于构建代理进行定价。现在我明白了为什么如果您的测试套件花费那么长的时间,那么多个构建代理就真的开始起作用了,能够同时运行5个构建就变得更加重要了。所以一个选择就是花更多的钱,并在现在的子弹洞上贴上一个创可贴。

    < P>你考虑过使用预先测试的约定吗?如果您运行远程运行构建(没有提交到VCS),您可以确保没有破坏VCS中的任何内容(只是因为您还没有提交)。你可以毫无问题地继续工作。如果构建成功,您可以提交您的更改(即使您在相同的文件中做了一些其他更改)-如果您通过TeamCity的插件提交,它将提交您发送到服务器进行测试的代码

    这样,您就不必等到TeamCity的构建完成后才继续使用它


    免责声明:我是TeamCity开发人员。

    我认为他们不希望更改其源代码版本控制,目前是P4V:-(还有其他建议吗?+1不管怎样,在你的陈述是正确的时候,Massimiliano的痛点在他想要推送到主存储库的任何时候都是显而易见的。虽然DVCS可以让他的开发体验更好,他可以在本地签入,而不是等待提交,但这并不能缓解OPs问题以任何形式。@Massimiliano听起来很奇怪,如果您想在提交P4V CVS之间对您的工作进行版本化,您可以在本地使用Mercurial或Git,而不会出现任何问题,也不需要更改您的解决方案,因为它们完全在文件系统之外工作。只需确保您在解决方案r之上的文件夹级别创建存储库即可oot文件夹,以防止在解决方案中意外添加文件。