6

1つの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つのテストすべてを順次ではなく、並行して実行することです。それぞれが1つのテストを実行する4つのスレッドのようなもので、実行時間を4つのテストの中で最も遅い+並列実行のわずかな時間に効果的に短縮します。

私はこれに出くわしましたが、これは複数のルビーテストファイルを並行して実行しているようです-たとえば、test1.rb、test2.rb test3.rbがある場合、3つのファイルすべてが並行して実行されます。

どんな助けでもありがたいです。

4

3 に答える 3

1

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
于 2012-05-11T21:03:01.360 に答える
0
gem install parallel_tests

parallel_test a_test.rb b_test.rb
于 2012-07-03T14:40:58.740 に答える
0

Ruby 1.9.3ではテストを並行して実行できると思われますが、まだ機能していません。

于 2012-05-13T06:37:40.577 に答える