我一直在尝试在大型Selenium网格上运行我们的黄瓜测试,我们遇到了消息No connection could be made because the target machine actively refused it. - connect(2) (Errno::ECONNREFUSED)
的间歇性错误。大约5%的测试随机出现错误,并不总是失败的测试。
我正在使用Amazon EC2实例运行我的网格,我有57个节点设置连接到也在亚马逊环境中运行的Selenium HUB。测试正在firefox 27.0.1上运行,每个节点配置为一次运行多达5个firefox实例。 Node和HUB实例正在运行Windows Server 2008 R2。节点实例在服务中运行Selenium网格jar,以便它可以在没有会话的情况下与桌面交互。 Windows服务可以访问会话0,这允许它在没有任何人登录的情况下显示浏览器。
此外,为了并行运行黄瓜测试,我使用了parallel_tests gem(https://github.com/grosser/parallel_tests)。
为了简化我们基础架构的设置和拆除过程,我使用Bamboo来自动化该过程。
我正在使用selenium服务器jar版本2.39.0。我使用的Selenium web驱动程序gem是版本2.38.0。我也使用gem watir-webdriver 0.6.4来驱动我们的测试,以及页面对象0.9.4。
我考虑过的一些解决方案涉及重新运行失败的测试,但我还没有找到一种简单的方法来并行重新运行失败的测试,我已经确定最好的解决方案是解决连接错误。
这是错误的完整堆栈跟踪:
无法建立连接,因为目标计算机主动拒绝它。 - 连接(2)(Errno :: ECONNREFUSED) C:/Ruby193/lib/ruby/1.9.1/net/http.rb:763:在
open' C:/Ruby193/lib/ruby/1.9.1/net/http.rb:763:in
块中连接' C:/Ruby193/lib/ruby/1.9.1/timeout.rb:69:intimeout' C:/Ruby193/lib/ruby/1.9.1/timeout.rb:100:in
timeout' C:/Ruby193/lib/ruby/1.9.1/net/http.rb:763:在connect' C:/Ruby193/lib/ruby/1.9.1/net/http.rb:756:in
do_start'中 C:/Ruby193/lib/ruby/1.9.1/net/http.rb:745:在start' C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1285:in
请求中 (eval):1:在process_watir_call' ./features/step_definitions/wizard_steps.rb:149:in
/ ^我选择时区“([^”] *)/' 功能\ SendSMS1147.feature:34:在`我选择时区“(UTC + 11:00)符拉迪沃斯托克”'
请注意,错误不仅发生在此步骤中,而是在不同时间在各种不同的步骤中发生,当此测试单独运行时,它会通过。
解决此错误的最佳方法是什么?