如何调试随机黄瓜失败?

时间:2013-03-11 10:26:06

标签: javascript ruby debugging cucumber

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

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

有没有任何技巧来调试这种黄瓜的怪异?功能(请记住这些场景总是传递给开发机器,问题出在ci服务器上)。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

  1. 前端的比赛条件。例如,在xhr回调之前启用输入表单会添加默认值。
  2. “乐观”从前端写道。有时,前端工程师通过忽略结果来使涉及PUT / POST请求的操作更具响应性。在这种情况下,没有办法让Cucumber等到请求完成,因此针对数据库中状态更改的测试将与应用程序竞争。
  3. 请求测试夹具中不可用的资源。例如,可能会阻止对第三方API的请求。有时URL在测试环境中没有正确构建,特别是当它们是“手动”构建时,而不是使用Rails助手。
  4. 间歇性黄瓜故障总是难以调试。不要放弃!值得努力弄清楚如何构建一个可测试的,无竞赛的前端。您可以使用capybara-webkit来调试仅限CI的故障。获取在CI上打印出来的javascript控制台输出,然后您可以在javascript中添加打印件以跟踪其状态直到测试失败。您还可以通过hack capybara-webkit打印出有关前端请求的信息。以下是一个示例:https://github.com/joshuanapoli/capybara-webkit/commit/96b645073f7b099196c5d3da4653606e98a453e4