2012-05-11 11 views
6

Tôi có 4 bài kiểm tra trong một kịch bản ruby, mà tôi chạy bằng lệnhRun nhiều thử nghiệm trong một kịch bản song song sử dụng của Ruby thử nghiệm đơn vị

ruby test.rb 

các đặt ra trông giống như

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 

Những gì tôi muốn đạt được là, chạy tất cả 4 bài kiểm tra song song thay vì nó được tuần tự. Một cái gì đó giống như 4 chủ đề mỗi chạy một thử nghiệm, có hiệu quả làm giảm thời gian thực hiện để chậm nhất của 4 bài kiểm tra + ít thời gian thực hiện song song.

Tôi đã xem qua this, nhưng điều này dường như chạy nhiều FILES thử nghiệm ruby ​​song song - giả sử nếu tôi có test1.rb, test2.rb test3.rb thì tất cả ba tệp sẽ chạy song song.

Mọi trợ giúp sẽ được đánh giá cao.

+0

Tôi có thể xác nhận rằng parallel_tests hoạt động ở cấp tệp, không phải là những gì bạn muốn ở đây, nhưng rất tốt ở những gì nó làm. – x1a4

Trả lời

1

Tôi đã thử một sự kết hợp của 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)} 

Nó có vẻ tốt, nhưng tôi đã không kiểm tra điểm chuẩn.

Kết quả (xem bên dưới) hơi hỗn loạn, mỗi luồng sẽ đăng thông điệp của mình vào thông điệp của các chủ đề khác, nhưng dường như nó hoạt động chính xác. Vì vậy, có thể bạn phải nắm bắt đầu ra của mỗi luồng để có được nhật ký kiểm tra tốt hơn.

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 
+0

Xem thêm http://stackoverflow.com/questions/56087/does-ruby-have-real-multithreading cho các chuỗi trong ruby. – knut

+0

cảm ơn phản hồi chi tiết của bạn. Điều này có vẻ như nó sẽ làm việc, tôi vẫn còn bị mắc kẹt với lỗi này mặc dù. '/opt/local/lib/ruby/gems/1.8/gems/rake-0.9.2/lib/rake/ext/module.rb:36:in' const_missing ': hằng số không khởi tạo MyTest (NameError) ' – Amey

+0

không bao giờ bận tâm ! Đây là siêu tuyệt vời! :) Cảm ơn rất nhiều – Amey

0

Giả sử có thể chạy thử nghiệm song song trong Ruby 1.9.3, nhưng tôi chưa có công việc đó.

0
gem install parallel_tests 

parallel_test a_test.rb b_test.rb 
+0

Điều này yêu cầu các bài kiểm tra phải nằm trong các tệp khác nhau –