目前,我们的项目所有测试跑完需要4 分钟左右。
共有 575 个 test 47 个集成测试 354 个功能测试 174 个单元测试
硬件配置 CPU 双核 2.4G 内存 8G
技术框架 UnitTest Spork FactoryGirl Fixtures Sqlite Ruby 1.9.3-p0 Rails 3.2.1
因为有 Spork,所以平时跑单个测试的时候,不觉得慢, 但是跑整体测试的时候,4 分钟时间,足以打乱我的编码节奏。 而且,我最近在重构,经常要全跑一遍。
所以想问问各位,有什么办法可以提高全体测试的运行时间?
好话题,楼主如想获得更多,应该把你的想法说说,介绍更多背景。
你用的是 UnitTest,测试里有没有和外部数据库关联的步骤。比如导入数据库之类的。这方面有 load
既然大家都用,为什么不搞一个测试服务器 服务器的性能和 pc 性能相差很大,万把块钱的货,就不错了,而且跑了你就不用管了,本机应该 做什么还是做什么 而且你们好多人,环境是不一样的,最好的还是有一个统一的服务器,不然部署后再测试/部署会有很多麻烦
@bluecoda require 同一个文件,不会重复加载的。 No matter how many times you require the same feature in your program, only the first time is significant. Ruby will not re-read a file a second time, this is the first fundamental difference from how load works.
@bluecoda 测试服务器是用来专门跑测试的,和 TDD 没有关系,不是按着 TDD 走就可以不测试了
专门的测试人员拿你程序来测,bug 仍然一堆堆,网站什么的,或还在开发阶段你只用本机没有问题 一但上线后,开发人员的本机环境不可能跟生产环境相同,很可能本机装了什么程序而生产机没有,部署后生产环境崩溃,影响很大。如果涉及到金额交易就很危险了
所以一般需要一个测试服务器,和生产环境同步,削弱一些这样的风险,同时也能承担楼主这种跑大量耗时的任务。像我以前做银行的时候,这方面管得就特别严。总之测试服务器是肯定得有的,没有,以后会很乱。
TDD 本来就只要跑你修改的部分影响的用例,只用影响比较大的重构才需要跑一次全部的用例。这个 guard 很好用。如果你意思是怎么只跑你修改部分影响的用例,那就是 guard 之类的工具了。
#22 楼 @azhao 这就是为什么会有 ci 这个东西的原因,也是为什么会有 travis-ci,janky 之类的东西诞生。 但是,@ery 的需求是,想让他重构时跑测试的速度快一点,这一点是 dev 环境的东西,走 ci 环节并不会有太大帮助。 另外,如果想跑得稍微快一点,可以试试看 https://gist.github.com/1688857 这个 patch,但是有时候可能不太稳定,最好不要用到 production