使用Ruby Test Unit在一个脚本中并行运行多个测试

我在一个ruby脚本中有4个测试,我使用命令运行

ruby test.rb 

输出看起来像

 Loaded suite test Started .... Finished in 50.326546 seconds. 4 tests, 5 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 100% passed 

我想要实现的是,并行运行所有4个测试而不是顺序测试。 像4个线程一样运行一个测试,有效地将执行时间减少到4个测试中最慢的时间+并行执行的时间很少。

我遇到了这个 ,但这似乎并行运行多个ruby测试文件 – 比如说如果我有test1.rb,test2.rb test3.rb,那么所有三个文件将并行运行。

任何帮助将不胜感激。

我尝试了TestSuiteThread的组合:

 gem 'test-unit' require 'test/unit' require 'test/unit/ui/console/testrunner' # we're running the tests, so we don't want Test::Unit to automatically run everything for us. See http://www.natontesting.com/2009/07/21/stop-rubys-testunit-suite-files-running-all-your-tests/ Test::Unit.run = true class MyTest < Test::Unit::TestCase def test_1() assert_equal( 2, 1+1) end def test_2() assert_equal( 2, 4/2) end def test_3() assert_equal( 1, 3/2) end def test_4() assert_equal( 1.5, 3/2.0) end end #create TestSuites. test_1 = Test::Unit::TestSuite.new("Test 1") test_1 << MyTest.new('test_1') #Same a bit shorter test_2 = Test::Unit::TestSuite.new("Test 2") << MyTest.new('test_2') test_3 = Test::Unit::TestSuite.new("Test 3") << MyTest.new('test_3') test_4 = Test::Unit::TestSuite.new("Test 4") << MyTest.new('test_4') #run the suites Thread.new{Test::Unit::UI::Console::TestRunner.run(test_1)} Thread.new{Test::Unit::UI::Console::TestRunner.run(test_2)} Thread.new{Test::Unit::UI::Console::TestRunner.run(test_3)} Thread.new{Test::Unit::UI::Console::TestRunner.run(test_4)} 

它看起来不错,但我没有进行基准测试。

输出(见下文)有点混乱,每个线程都将他的消息发布到其他线程的消息中,但它似乎工作正常。 因此,您可能必须捕获每个线程的输出以获得更好的测试日志。

 Loaded suite Test 4Loaded suite Test 1Loaded suite Test 2Loaded suite Test 3 Started Started . Started . Started . . Finished in 0.328125 seconds. Finished in 0.328125 seconds. 1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications Finished in 0.765625 seconds. Finished in 0.546875 seconds. 100% passed 1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 3.05 tests/s, 3.05 assertions/s 100% passed 1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 3.05 tests/s, 3.05 assertions/s 100% passed 100% passed 

据说可以在Ruby 1.9.3中并行运行测试,但我还没有完成它的工作。

 gem install parallel_tests parallel_test a_test.rb b_test.rb