使用Ruby Test Unit在一个脚本中并行运行多个测试 [英] Run multiple tests in one script in parallel using Ruby Test Unit

查看:138
本文介绍了使用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.

任何帮助将不胜感激.

推荐答案

我尝试了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)}

看起来不错,但是我没有进行基准测试.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆