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

时间:2015-05-19 16:55:24

标签: cucumber phantomjs watir watir-webdriver

我的并行测试与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

我感觉这是一个幻影/网络驱动程序错误...

1 个答案:

答案 0 :(得分:1)

这可能是你的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之前休眠该秒数。这将使并行化错开一点,但它应该消除竞争条件。