Ruby 网络驱动程序。 Minitest Reporters Gem SpecReporter 和并行 运行 的输出不正确

Ruby Webdriver. Incorrect output with Minitest Reporters Gem SpecReporter and parallel running

我已经用 Minitest、Minitest::Reporters Gem 和一个 Rakefile 配置了一个测试套件。所有 运行 "parallelize_me!" 选项

问题是输出没有正确显示,因为它显示当前正在执行的测试用例 "Suite_X",当测试用例完成时它显示 "test_xxx" 结果。如果你有很多测试套件,最终的输出就很难理解。

我认为如果当前正在执行的测试用例 "Suite_X" 不显示会更好,因为我可以像我已经做的那样将名称放在测试用例本身中:

$ N=4 rake
/home/usuario/.rvm/rubies/ruby-2.2.1/bin/ruby -I"lib:tests" -I"/home/usuario/.rvm/gems/ruby-2.2.1/gems/rake-10.5.0/lib" "/home/usuario/.rvm/gems/ruby-2.2.1/gems/rake-10.5.0/lib/rake/rake_test_loader.rb" "tests/test_helper.rb" "tests/test_suite_a.rb" "tests/test_suite_b.rb" 
Started with run options --seed 33064


# Running tests with run options --seed 33064:

Suite_A
Suite_A
Suite_ASuite_A

  test_search_suite_a_1                                             PASS (25.09s)
.
Suite_B
  test_search_suite_a_2                                             PASS (25.12s)
.
Suite_B
  test_search_suite_a_3                                             PASS (25.65s)
.
Suite_B
  test_search_suite_a_4                                             PASS (25.67s)
.
Suite_B
  test_search_suite_b_4                                             PASS (13.05s)
.  test_search_suite_b_3                                             PASS (12.64s)
.  test_search_suite_b_1                                             PASS (13.58s)
.  test_search_suite_b_2                                             PASS (16.41s)
.
Finished in 41.52647s
8 tests, 0 assertions, 0 failures, 0 errors, 0 skips


Finished tests in 41.526445s, 0.1926 tests/s, 0.0000 assertions/s.


8 tests, 0 assertions, 0 failures, 0 errors, 0 skips

Minitest Reporters: Mean Time Report (Samples: 13, Order: :avg :desc)
Avg: 16.581905858 Min: 0.0          Max: 33.548447061 Last: 0.0          Description: Suite_A
Avg: 14.896940034 Min: 0.0          Max: 30.567633492 Last: 15.852995213 Description: Suite_B

这是因为 parallelize_me 使用线程,而 Minitest::Reporter gem 不处理这种情况。如果你愿意,你可以在他们的报告期间向线程添加同步,但这可能会很痛苦,因为我很确定报告者 gem 处理一系列回调,所以你基本上必须同步每个测试运行哪种方式达不到目的。

或者,您可以让每个线程打印到不同的 IO 并根据需要处理它们(例如在 运行 末尾打印)

在我看来,你最好不要将 Reporter 与 parallelize_me

一起使用