我的团队现在对这个问题持续数周的困惑。我们有一个使用LiveServerTestCase
的测试套件,它运行我们拥有的所有基于Selenium的测试。特别是一次测试有时会无缘无故地随机失败 - 我可以在另一个文件中更改注释,测试会失败。更改其他一些评论将再次修复测试。我们使用Firefox webdriver进行Selenium测试:
self.driver = Firefox()
在我们的Docker容器中进行本地测试永远不会重现错误。这很可能是因为当tests.py
在Travis CI之外运行时,使用的是与Firefox()
不同的Web驱动程序。 Web驱动程序就是这样:
self.driver = WebDriver("http://selenium:4444/wd/hub", desired_capabilities={'browserName':'firefox'})
对于本地测试,我们使用Selenium容器。
失败的测试是一系列子测试,每个测试都测试我们拥有的过滤搜索功能;每个子测试都是不同的过滤查询。每个子测试的顺序是:
"function = int main()"
)在Travis CI中运行时,此测试通常会通过,如前所述,此测试始终在本地运行时通过。在Web浏览器中手动与站点交互时无法重现该错误。但是,偶尔,Travis CI的测试输出中会出现这种错误:
- Broken pipe from ('127.0.0.1', 39000)
- Broken pipe from ('127.0.0.1', 39313)
39000
和39313
并不总是数字 - 每次运行新的Travis CI构建时,这些都会发生变化。这些似乎是端口号,但我不确定它们实际上是什么。
我们在获取过滤器的结果列表之前就有time.sleep(sec)
行。增加睡眠时间通常会与临时修复损坏的管道错误相关联。然而,测试非常善变,改变睡眠时间可能与修复错误无关;有些时候睡眠时间已减少或从分测验中取出,测试将通过。在任何情况下,由于管道损坏,过滤器无法执行并且断言失败。
一个可能有趣的细节是,无论子测试的顺序如何,如果发生损坏的管道错误,它始终是第一个失败的子测试。但是,如果第一个子测试通过,则所有子测试将始终通过。
所以,我的问题是:这里到底发生了什么,我们如何确保这个随机错误停止发生?如果这是一个模糊/混乱的问题,请道歉,但不幸的是,这是问题的本质。
答案 0 :(得分:1)
看起来您的问题可能类似于this fellow遇到的问题。这可能是你的超时问题。您可能希望使用显式等待,或尝试在比较数据之前等待加载特定元素。我的测试中遇到了类似的问题,我的Selenium测试会在页面加载完成之前尝试轮询图像以查看它是否存在。就像我说的,这可能不是同一个问题,但可能有所帮助。古德勒克!
答案 1 :(得分:0)
我自己也碰到了这个问题,这是由于django的内置服务器没有使用python的日志记录系统。这已在1.10中修复,但在撰写本文时尚未发布。在我的情况下,可以将消息保留在日志中,直到升级为止;比添加超时和增加构建时间更好。