Запуск нескольких тестов в одном скрипте параллельно с помощью Ruby Test Unit

у меня есть 4 теста в одном скрипте ruby, который я запускаю с помощью команды

ruby test.rb

out put выглядит как

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, тогда все три файла будут работать параллельно.

любая помощь будет оценили.

3 ответов


я попробовал комбинацию 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)}

это выглядит хорошо, но я не сделал контрольных тестов.

вывод (см. ниже) немного хаотичен, каждый поток отправляет свои сообщения в сообщение других потоков, но, похоже, работает правильно. Поэтому, возможно, вы должны поймать вывод каждого потока, чтобы получить лучшие журналы тестов.

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