使用 phantomjs ECONREFUSED 进行并行测试 Cucumber watir 测试

Parallel-test Cucumber watir testing with phantomjs ECONREFUSED

我在并行测试中遇到 phantomjs 问题,firefox 运行 没问题。我使用 parallel_tests、watir-webdriver 和 Cucumber。

No connection could be made because the target machine actively refused it. - connect(2) for "127.0.0.1" port 8910 (Errno::ECONNREFUSED)

测试 运行 通过:

parallel_cucumber features/parallel_tests -n 3

经过一些调试后,我发现问题出现在第一个进程完成测试时,它以某种方式杀死了所有 phantomjs 浏览器实例。

这是 env.rb 设置:

browser = Watir::Browser.new :phantomjs, args: %w(--ignore-ssl-errors=true)

Before do
  @browser = browser
  @browser.cookies.clear
end

at_exit do
  browser.close
end

我也试过完全不关闭浏览器,但没有运气,它以某种方式自动完成。 Windows 和 CentOS 我都试过了。

phantomjs -v 
2.0.0
Using cucumber 1.3.19
Using selenium-webdriver 2.45.0
Using watir-webdriver 0.6.11
Using parallel 1.4.1
Using parallel_tests 1.3.9

我感觉这是一个 phantomjs/webdriver 错误...

这可能是您的 3 个虚拟实例对端口 8910 的竞争条件。类似于 this 问题。

# env.rb
Before do
  sleep ENV['TEST_ENV_NUMBER'].to_i
  @browser = Watir::Browser.new :phantomjs, args: %w(--ignore-ssl-errors=true)
end

如果我正确阅读 ParallelTests 源代码,环境变量 TEST_ENV_NUMBER 将设置为每个进程的进程索引。所以第一个进程的 TEST_ENV_NUMBER 为 0。只要是这种情况,上面的 Before 挂钩就会在初始化 Watir::Browser 之前休眠该秒数。这会稍微错开并行化,但它应该会消除竞争条件。