2015-02-07 77 views
1

我使用的是Ruby 2.1.0,watir-webdriver,rspec,taza和PhantomJS 1.9.8。操作系统是Linux tester 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1+deb7u1 i686 GNU/LinuxPhantomJS间歇性拒绝连接

我通过Watir::Browser.new运行PhantomJS并提供以下命令行参数:--ignore-ssl-errors=true --ssl-protocol=any --debug=true --cookies-file=/tmp/cookies.txt

有一个单一的spec文件在开始的时候会间歇性地失败(我会说,很可能会失败):Connection refused - connect(2) for "127.0.0.1" port 8910。与此同时,netstat -tulpan显示了这一点:

... 
tcp  0  0 127.0.0.1:43695   127.0.0.1:8910   TIME_WAIT - 
tcp  0  0 127.0.0.1:43723   127.0.0.1:8910   TIME_WAIT - 
tcp  0  0 127.0.0.1:43743   127.0.0.1:8910   TIME_WAIT - 
tcp  0  0 127.0.0.1:43677   127.0.0.1:8910   TIME_WAIT - 
tcp  0  0 127.0.0.1:43740   127.0.0.1:8910   TIME_WAIT - 
... 

大约90个端口总数。他们在rspec已经退出后仍然开放。我对这种失败的间歇性感到困惑。有其他人遇到同样的问题吗?任何意见,建议,链接等,非常感谢。谢谢。


UPD:我接过定睛一看,发现在某个时间点PhantomJS开始下降连接,从收入的webdriver: - > [SYN],< - [RST,ACK]。该进程仍然在内存中,但由于PhantomJS不保存任何错误日志,我完全不知道是什么原因。

+0

是的这是真的看起来像PhantomJS的某种问题。奇怪的是,你只有一个spec文件,似乎有问题,有点让你想知道是否有什么不同的事情发生在网页上,或导致Phantom JS的客户端JS代码。 – 2015-02-14 10:26:01

回答

0

我不知道这是否会解决您的问题,但它可能解释您看到的netstat。请注意,显示的状态是TIME_WAIT。检讨netstat的资料显示,这是要显示在一段时间的共同状态的端口关闭后

TIME_WAIT客户端后主动关闭

注意进入此状态:这是正常的插座中TIME_WAIT状态长时间处于 时间段。时间在RFC793中指定为最大段数的两倍。段寿命(MSL)。 MSL被指定为2分钟。因此,套接字 可能处于TIME_WAIT状态长达4分钟。一些系统 为MSL实现不同的值(小于2分钟)。

注意,来自this MS support page,让您的MSL的长度可能超过2分钟,你是在Debian Linux上,但其余的是基于协议的规范不同,所以会适用于任何操作系统实现该规范正确

您的代码打开和关闭“浏览器”对象多少次?也许这与此有关?你可以运行它的连接吗?使用真正的浏览器时,我们倾向于在测试运行开始时打开浏览器,并且只在最后关闭它,主要是为了节省浏览器本身的启动/关闭时间。如果你没有为你的测试做这件事,你可能想试验一下,看看它是否能解决你的问题。

+0

感谢您的回答。就是这样 - 我只启动浏览器一次,大量打开的端口可能是核心问题(如果存在一些限制)。这个测试与我的预期没有什么不同,但他们通过了,而这个测试没有。 – 2015-02-10 03:48:41

+0

以及webdriver和phantomjs之间的连接是由webdriver处理的。(watir只是调用webdriver api并传递适当的参数),所以我会为你编辑和添加一些webdriver标签,也许某个更高级的专家可以提供帮助。 – 2015-02-10 17:46:38