浏览 4017 次
锁定老帖子 主题:让测试并行起来吧
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||||
发表时间:2009-07-18
deep-test http://github.com/qxjit/deep-test/tree/master 貌似出自ThoughtWorks同学们之手. 从readme里可以看出,这是一个十分强悍的并行测试库.以下两点功能挺诱人: 1. 只需一行配置, 便可以为每个测试Agent自动生成测试数据库(从test库dump), Agent运行完毕,自动删除相应的数据库. DeepTest::TestTask.new "task_name" do |t| t.listener = "DeepTest::Database::MysqlSetupListener" end 2. 并行测试不仅仅能在一台机器的不同进程运行,还可以进行分布式处理(使用druby),用多台机器来同时运行测试. 一切看起来都十分好,不过,由于deep-test对rspec的版本依赖问题,我修改了很多地方,但还是没有在项目中跑起来. 以后空了再仔细研究. 有使用过的同学希望能够分享. parallel_specs http://github.com/grosser/parallel_specs/tree/master 这是一个十分简单的plugin.也是我最终采用的.他的原理是使用Process.fork, 分配出一些子进程, 将所有的spec文件平均的分配到各个进程, 然后运行"script/spec"命令. 这种方式的好处就是没有任何额外的依赖. parallel_specs使用也十分简单: 首先修改database.yml: test: adapter: mysql database: xxx_test<%= ENV['TEST_ENV_NUMBER'] %> username: root 这个TEST_ENV_NUMBER是根据并行测试的进程数来指定的. 这里,注意的是,如果并行进程数是1的话, TEST_ENV_NUMBER是"". 行进程数是2的话, TEST_ENV_NUMBER是"2". 接下来,就是为并行进程手动创建数据库, xxx_test, xxx_test2, xxx_test3...... That's all~:)现在,我们就可以使用rake来调用并行测试任务 rake spec:parallel[1] rake spec:parallel #(default = 2) rake spec:parallel[3] ... 下面是我在项目中实际测试的结果:(测试有320个*_spec.rb文件, 3429个examples)
测试机器是扣肉双核,从结果可以很明显的看出,增加到2个并行测试进程对测试速度的提升十分明显. 由于只有两个物理运算单元,所以3,4...更多的并行对速度并没有太多的改进. 如果继续增加CPU的数量,测试速度还能得到更高的提升. 不过,使用parallel_specs存在一个问题--CI上无法做覆盖率测试. 后来想干脆CI上分成两个project来跑,但似乎这种方法太土了,而且也没有必要使用parallel_specs了. 有待研究... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||||||||
返回顶楼 | |||||||||||
发表时间:2009-07-18
我觉得测试里比较耗时的是数据库 …… 用内存数据库效果更好
|
|||||||||||
返回顶楼 | |||||||||||
发表时间:2009-07-19
是的。耗时主要在数据库访问上。
内存数据库,我倒真没想过用这个方案,不过貌似有不少额外的工作。 研究研究。谢谢提醒。 |
|||||||||||
返回顶楼 | |||||||||||
发表时间:2009-07-20
有时为了保证测试环境和开发、生产的特性一致,减少非必要的环境差异问题发生,就放弃了sqlite+mem dir的组合 ,直接接用mysql来做testing,并发就真的很符合需求了。
几时cucumber也能并发跑scenario就爽了,期待下。 |
|||||||||||
返回顶楼 | |||||||||||
发表时间:2009-07-20
最后修改:2009-07-20
rainchen 写道 几时cucumber也能并发跑scenario就爽了,期待下。
有人在做这个事情--http://github.com/brynary/testjour/tree/master 写道 It parallelizes Cucumber runs over SSH and handles MySQL database management |
|||||||||||
返回顶楼 | |||||||||||
发表时间:2009-07-20
woody_420420 写道 rainchen 写道 几时cucumber也能并发跑scenario就爽了,期待下。
有人在做这个事情--http://github.com/brynary/testjour/tree/master 写道 It parallelizes Cucumber runs over SSH and handles MySQL database management 这是假设数据库是服务器端唯一有状态的部件 如果不是的话,比如说如果还有个共享文件夹什么的,就SUI掉了 其实还是构建级的并发比较靠谱 |
|||||||||||
返回顶楼 | |||||||||||