我正在使用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/Linux
。
我通过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
退出后,它们仍处于打开状态。我很困惑这种失败的间歇性。还有其他人遇到过同样的问题吗?任何建议,推荐,链接等都非常感谢。谢谢。
答案 0 :(得分:0)
我不知道这是否能解决您的问题,但它可以解释您使用netstat所看到的内容。请注意,显示的状态为TIME_WAIT
。查看netstat上的文档表明这是一个在端口关闭后显示一段时间的常见状态
TIME_WAIT客户端在活动关闭后进入此状态
注意:套接字处于TIME_WAIT状态很长时间是正常的 一段的时间。 RFC793中指定的时间是Maximum的两倍 段寿命(MSL)。 MSL指定为2分钟。所以,一个插座 可能处于TIME_WAIT状态长达4分钟。一些系统 为MSL实现不同的值(少于2分钟)。
请注意,它来自this MS support page,所以MSL的长度可能不同于Debian Linux上的2分钟,但其余部分基于协议规范,因此将适用于任何操作系统正确实现该规范
您的代码打开和关闭“浏览器”的次数是多少次?宾语?也许这与此有关?你可以用连接来运行吗?使用真正的浏览器,我们倾向于在测试运行开始时打开浏览器,并且只在最后关闭它,主要是为了节省浏览器本身的启动/关闭时间。如果您没有为测试做到这一点,您可能需要进行实验,看看它是否能解决您的问题。