parallel_tests gem是否按顺序运行测试套件?

时间:2013-03-29 19:37:10

标签: ruby-on-rails ruby testunit parallel-testing

我正在阅读parallel_tests来源,但还不了解它,所以我想我会跳到追逐并在这里问我的问题。

parallel_tests gem是否同时或按顺序运行甜蜜中的所有测试? (是否可以同时运行多个测试)

当我运行并行测试时,似乎就是这样:

  1. 找到我的所有测试
  2. 将它们分成均匀的堆(每个处理器一个)
  3. 按顺序运行每一堆测试
  4. 我想知道这是因为使用四个处理器运行rake parallel:test(75分钟)和rake test(85分钟)之间的时差差异很小。

    并行测试的输出使它看起来像是按顺序运行测试组。

    我的输出如下:

    首先会指出它找到了我所有的处理器:

    rake parallel:test[functional]
    
    4 processes for 223 tests, ~ 55 tests per process
    

    然后它似乎按顺序运行每个测试子集:

    ......
    841 tests, 3605 assertions, 0 failures, 3 errors, 0 skips
    
    Test run options: --seed 15002
    oaded suite -e
    
    ...............
    Finished in 1928.494289 seconds.
    
    542 tests, 2296 assertions, 0 failures, 0 errors, 0 skips
    
    Test run options: --seed 30455
    oaded suite -e
    ....
    etc...
    

    那么,这是我的输出技巧,还是它真正依次运行每组测试。我认为我会更好地改善时间,而且这对我需要并行化以使我的测试运行的其他东西有很大影响。

1 个答案:

答案 0 :(得分:1)

如果您的测试需要大量的设置/拆卸代码或争用像IO这样的资源,那么您可能无法通过并行化来获得显着的性能提升。 parallel_test确实并行运行你的测试,但它按顺序缓冲输出,因为如果4个进程只是直接写入STDOUT并且消息相互交错,那将很难理解。

如果您不确定测试是并行运行,请启动top或其他一些此类工具(例如,OS X上的活动监视器)并观察正在发生的事情。< / p>

这不是你的问题的答案,但你可能会有更多的收获来优化你的841测试,需要半小时才能更快地运行,而不是尝试并行化它们。