加速测试 test:recent on drb server

加速测试 test:recent on drb server

rspec可以加上参数--drb,加快测试速度。如果不用rspec,标准方法写测试,每次执行rake,加载环境会损耗相当多的时间。每次测试都要对着屏幕发呆18秒,这是在是太蠢了…… 跟踪发现最主要耗时操作是调用了两次 Rails::Initializer.run(:process, ...) (似乎第一次是加载RAILS环境,第二次是加载测试库)

我简单的写了2个RAKE任务,用DRB来解决这个问题。


app/lib/tasks/test_server.rake
require 'drb/drb'


class TestServer

  def run(stdout, stderr)
    $stdout = stdout
    $stderr = stderr

#    puts ">>>> rake test:recent"
#    time_begin = Time.now

    # test:recent on DRb server
    Rake::Task["test:recent"].invoke

#    time_elapse = Time.now - time_begin
#    puts "  << cost #{time_elapse}s"
  end
end


# rake test:server
# rake test:remote
namespace :test do

  desc 'Run test server on DRb'
  task :server => :environment do
    DRb.start_service("druby://localhost:8999", TestServer.new)
    puts "ready"
    DRb.thread.join
  end

  desc 'Run recent tests on remote server.'
  task :remote do
    DRb.start_service
    remote = DRbObject.new_with_uri("druby://localhost:8999")
    remote.run($stdout, $stderr)
  end

end



先启动服务
rake test:server

然后用下面的命令,实现 rake test:recent 的快速版
rake test:remote



思路很简单,加载环境的动作,都丢在DRb server
第一次 rake test:remote 还是要加载库环境,但以后再访问就不用了

在DRB只实现了 rake test:recent 这个频率最高的动作,如果需要,可以自己去扩展



期待更好的建议

你可能感兴趣的:(thread,Rails,rspec)