0

我遇到了一个黄瓜测试套件的问题,我想不出任何调试它的方法。

我们有一套相当大的黄瓜特性,它们都传递给开发机器。问题是,当我们在 ci 服务器上运行整个黄瓜套件时,有几个场景失败了,并且当场景尝试填写表格时(显然不在页)。由于随机失败,我认为这是 ajax 请求的时间问题,但似乎并非如此,因为添加非常大的睡眠(尝试了从 1 到 60 秒的所有内容)并没有改变任何东西。这个场景更有趣,因为还有另外 3 个场景运行相同的步骤,但它们以相同的顺序在第一个步骤上失败,并且这些通过,除非我删除第一个场景,在这种情况下,第一个运行这些步骤的步骤是一个失败的。

有什么技巧可以调试黄瓜上的这种怪异现象吗?功能(请记住,这些场景总是在开发机器上传递,问题出在 ci 服务器上)。

谢谢!

4

1 回答 1

0

我也有机会调试仅在 CI 上重现的间歇性测试失败。根据我的经验,问题总是归结为几个基本原因:

  1. 前端的竞争条件。例如,在 xhr 回调之前启用输入表单会添加默认值。
  2. “乐观”从前端写入。有时,前端工程师通过忽略结果来使涉及 PUT/POST 请求的操作更具响应性。在这种情况下,没有办法让 Cucumber 等到请求完成,因此针对数据库中状态更改的测试将与应用程序竞争。
  3. 对测试夹具中不可用的资源的请求。例如,对 3rd 方 API 的请求可能会被 CI 阻止。有时 URL 在测试环境中的构造不正确,特别是当它们是“手工”构建的,而不是使用 Rails 帮助器时。

间歇性 Cucumber 故障总是难以调试。不要放弃!努力弄清楚如何构建一个可测试的、无竞争的前端是值得的。您可以使用 capybara-webkit 调试仅 CI 故障。获取 javascript 控制台输出以在 CI 上打印出来,然后您可以将打印添加到您的 javascript 以跟踪其状态直到测试失败点。您还可以破解 capybara-webkit 以打印有关前端发出的请求的信息。这是一个例子:https ://github.com/joshuanapoli/capybara-webkit/commit/96b645073f7b099196c5d3da4653606e98a453e4

于 2013-03-11T14:10:40.813 回答