【问题标题】:Does the parallel_tests gem run your test suites in sequence?parallel_tests gem 是否按顺序运行您的测试套件?
【发布时间】:2013-03-29 19:37:09
【问题描述】:

我正在阅读parallel_tests 源代码,但还不明白,所以我想我会跳起来在这里问我的问题。

parallel_tests gem 是同时还是按顺序运行你的所有测试? (是否可以同时运行多个测试)

当我运行并行测试时,它看起来像这样:

  1. 找到我所有的测试
  2. 将它们分成偶数堆(每个处理器一个)
  3. 按顺序运行每一堆测试

我想知道这是因为使用四个处理器运行 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...

那么,这是我输出的一个技巧,还是真的一个接一个地运行每组测试。我在想我会得到更好的时间改进,而且这对我需要并行化以使我的测试运行的其他东西有很大的影响。

【问题讨论】:

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


    【解决方案1】:

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

    如果您不相信测试是并行运行的,请使用 top 或其他类似工具(例如 OS X 上的活动监视器)并观察发生了什么。

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

    【讨论】:

    • 谢谢,我查看了 Top 和 low ,发现有一堆单独的 ruby​​ 进程在运行。
    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多