Run multiple tests in one script in parallel using a Ruby testing unit

I have 4 tests in one ruby ​​script, which I run with the command

ruby test.rb 

appearance looks like

 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 

What I want to achieve is to run all 4 tests in parallel, and not be sequential. Something like 4 threads, each of which performs one test, effectively reducing the execution time to the slowest of the 4 tests + little parallel execution time.

I came across this , but it seems that it runs several test FILES files in parallel - say, if I had test1.rb, test2.rb test3.rb, then all three files will work in parallel.

Any help would be appreciated.

+6
source share
3 answers

I tried a combination of TestSuite and 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)} 

This looks good, but I have not tested the tests.

The result (see below) is a bit chaotic, each thread sends its messages to the message of the other threads, but it seems to work correctly. Therefore, perhaps you should catch the output of each thread in order to get the best 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 
+1
source

Maybe you can run tests in parallel in Ruby 1.9.3, but I still have no way to work.

0
source
 gem install parallel_tests parallel_test a_test.rb b_test.rb 
0
source

Source: https://habr.com/ru/post/915521/


All Articles