使用Ruby Test Unit在一个脚本中并行运行多个测试 [英] Run multiple tests in one script in parallel using Ruby Test Unit
问题描述
我在一个ruby脚本中有4个测试,我使用命令
I have 4 tests in one ruby script, which I run using command
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个测试中最慢的+并行执行的时间很短.
What I want to achieve is, run all the 4 tests in parallel instead of it being sequential. Something like 4 threads each running one test, effectively reducing the execution time to the slowest of the 4 tests +little time of the parallel execution.
我遇到了此,但这似乎可以并行运行多个ruby测试文件-如果我具有test1.rb,test2.rb test3.rb,则这三个文件将并行运行.
I came across this, but this seems to run multiple ruby test FILES in parallel - say if i had test1.rb, test2.rb test3.rb, then all the three files would run in parallel.
任何帮助将不胜感激.
推荐答案
我尝试了TestSuite
和Thread
的组合:
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)}
看起来不错,但是我没有进行基准测试.
It looks good, but I made no benchmark tests.
输出(请参阅下文)有点混乱,每个线程都将其消息发布到其他线程的消息中,但是似乎可以正常工作. 因此,也许您必须捕获每个线程的输出才能获得更好的测试日志.
The output (see below) is a bit chaotic, each thread is posting his messages into the message of other threads, but it seem to work correct. So maybe you must catch the output of each thread to get better test logs.
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 Test Unit在一个脚本中并行运行多个测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!