Gruntjs Cucumber.js:再试一次

Gruntjs Cucumber.js:再试一次,gruntjs,cucumber,protractor,e2e-testing,cucumberjs,Gruntjs,Cucumber,Protractor,E2e Testing,Cucumberjs,尽管我知道测试应该可靠地运行,但我的经验告诉我:这不可能总是通过合理的努力来完成(也不需要完成;请参阅下面的计算) 特别是,如果针对需要持续改进的现有Web应用程序引入测试,则很难构建可靠的E2E测试。但是,相比之下,构建偶尔崩溃的测试非常容易,而且足够了(只要它们在预期/断言方面可靠地失败) 如果您使用量角器进行E2E测试,您可能也经历过这种情况 统计数据告诉我,已知有25%几率崩溃的测试,在运行两次时有6.25%几率崩溃两次,在运行三次时有1.56%几率崩溃三次,在运行四次时有0.39%几率

尽管我知道测试应该可靠地运行,但我的经验告诉我:这不可能总是通过合理的努力来完成(也不需要完成;请参阅下面的计算)

特别是,如果针对需要持续改进的现有Web应用程序引入测试,则很难构建可靠的E2E测试。但是,相比之下,构建偶尔崩溃的测试非常容易,而且足够了(只要它们在预期/断言方面可靠地失败)

如果您使用量角器进行E2E测试,您可能也经历过这种情况

统计数据告诉我,已知有25%几率崩溃的测试,在运行两次时有6.25%几率崩溃两次,在运行三次时有1.56%几率崩溃三次,在运行四次时有0.39%几率崩溃四次,在运行五次时有0.10%几率崩溃五次(以此类推)

因此,运行一组这样的测试,直到它们中的每一个都能够在没有错误的情况下终止,这并不是什么大问题

我的要求是一次又一次地运行Cucumber.js场景,直到它在单个功能运行期间第一次成功,然后接受后续运行的测试通过/失败结果。

我试图在之后构建一个钩子来重新运行场景,但没有找到从钩子中调用场景的方法。除此之外,我没有找到放弃崩溃场景运行的方法

请告诉我我有哪些选择。我在用呼噜声、量角器和黄瓜


由于我们的测试套件非常庞大,仍在快速增长,并通过自动构建过程运行,因此我需要一种尽可能可靠地运行不可靠测试的方法。

角度故障的常见原因是没有等待所有挂起的请求完成。在我的页面构造函数中,我插入一个等待此Javascript返回true的命令:

"return angular.element(document.body).injector().get(\'$http\').pendingRequests.length == 0;"
在继续之前。在继续我的测试之前,仔细地显式地等待JavaScript完成,它们的可靠性相当高


尽管如此,仍然存在重新运行的框架。下面是一个示例。

我认为这将导致无法管理的测试套件。你将如何区分真正的失败和因薄片而导致的失败?您将只能运行每个测试一个固定的次数,然后放弃,否则您的套件将永远运行。我的经验是,您应该尽可能少地重试测试,因为这样做会使开发人员更容易编写不可靠的测试。“您如何区分真正的失败和由于不可靠而导致的失败?”如果我确保在测试条件不正确的情况下测试永远不会通过(注意“Then”一词)一个场景的步骤,如果应用程序做了一些测试错误的事情,则使“然后”步骤可靠地不通过),很容易区分:一旦测试没有通过,我就需要手动检查测试的场景。另一方面,如果情况并非如此,我可以(就像)确信(就像我运行了一个永不崩溃的测试一样)场景中的一切都正常。“你只能运行每个测试固定次数,然后放弃,否则你的套件将永远运行。”自动尝试10次(最多)后放弃这没什么大不了的:您总是可以手动运行场景,看看是否可以重现意外行为。因为我知道通常每个测试在运行两到三次时不会在每次运行中崩溃,所以这对我来说是绝对好的。偶尔崩溃,但仍然可靠地没有通过应用程序的错误行为测试,总比根本没有测试要好。“我的经验是,你应该尽可能少地重试测试,因为这样做会让开发人员更容易编写不可靠的测试。”我100%同意你的看法。但是:有一个或多个有点古怪的测试要比根本没有测试好得多。不幸的是,Cucumber+Gragrator(基于JavaScript)没有任何重新运行的框架。