2

我正在阅读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...

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

4

1 回答 1

1

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

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

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

于 2013-03-29T19:44:41.710 回答