7

我正在 Rails 上创建一个网站,到目前为止一直在使用 travis-ci 进行持续集成。我也在尝试使用 wercker 进行持续集成和部署。wercker 上的测试步骤失败了,因为它运行了超过 25 分钟,我突然想到,由于某种原因,我的测试可能花费了异常长的时间。

我正在开发的网站规模很大,但并不庞大。我使用 rspec 和 capybara 进行测试,使用 webkit 进行集成测试。我编写了相当彻底的集成测试,试图确保我涵盖了每个功能。在 travis-ci 上,整个过程需要 25-30 分钟才能运行(包括安装包)。

对于这个论坛来说,这可能是一个模糊的问题,但我还是想得到一些意见。测试套件运行半小时或更长时间是不可接受的吗?对于一组集成测试,您通常会经历哪些测试套件时间?

4

1 回答 1

10

商业网站有集成测试套件是很正常的,即使是精心设计的套件,如果它们在开发人员机器上的单个进程中运行,则需要一个小时或更长时间才能运行。因此,您没有给我们任何理由认为您正在编写太多测试或编写它们以致它们运行异常缓慢。但是,等待了解您的提交是否良好的时间太长了。以我的经验,半小时太长,15' 是边际;如果运行所有测试需要很长时间,那么触发构建的人将开始其他事情或在构建运行时四处走动,然后将不得不进行上下文切换或在构建中断时不在身边。更长的构建也会增加给定构建中的平均提交次数,这使得在构建中断时更难归咎于责任。

因此,让您的 CI 构建尽可能快地运行。大话题,但有几个起点:

  • gem 是在一个parallel_tests盒子上尽可能快地运行您的套件(单元测​​试和 Cucumber)的方式(这只会让您到目前为止,但现在可能已经足够了)。
  • 这是另一个用于跨框拆分 Cucumber 场景的 gem(我没有使用过):https ://github.com/cloudcastle/cucumber_in_groups
  • Travis CI、CircleCI 和可能的其他托管持续集成服务提供了跨盒子拆分测试的方法。

拥有一个覆盖大部分或全部代码的单元测试套件也很有帮助,并且运行速度比集成测试快得多(几秒钟或最多几分钟),以便在集成测试运行之前捕获大多数错误。

于 2014-05-08T11:57:03.710 回答