Cucumber-js: 实施 --retry

创建于 2017-01-19  ·  33评论  ·  资料来源: cucumber/cucumber-js

如果有一个功能可以重试测试套件 X 次,并且如果该测试在任何一次运行中都通过则通过测试,那就太好了

help wanted

最有用的评论

关于个人对此功能的分歧(这个论点可能像工程世界中的制表符与空格一样毫无结果),如果 Cucumber 作为工具规范正在实现这一点,我们也应该在此工具的 JS 版本中支持这一点。

它在现实世界中也有广泛的测试套件和复杂的应用程序,无法 100% 抵御 flakeyness,因此变得非常昂贵。 绝对可以通过工程之旅来改进它,但我怀疑是否有许多公司拥有丰富的资源来支持这样的工作,并获得任何不错的投资回报率。

在现实世界中,能够通过添加良好的跟踪来重试失败的测试以识别主动行动的脆弱性是非常有价值的。

如果我们重新考虑关闭此问题的决定,我将不胜感激,正如之前所述,我非常乐意在一些指导下解决此问题。

所有33条评论

@ericyliu它在黄瓜 3 中出现。不知道为什么黄瓜 2 仍在 RC 中……它已经推出 2 年了

@charlierudolph或任何人,如果您有任何指示,我很乐意拿起并

我推测的方法是,在场景运行结束时,我们可以判断它是否失败并重新运行它(为重试计数保留一些状态)。 我在哪里可以钩到这个?

除此之外,我希望在整个过程结束时能够访问所有场景的列表,他们重试的次数和他们的最终状态,所以这可以 a) 记录和 b) 如果需要,转储到磁盘.

关闭,因为我个人不希望实现这一点,因为我不同意它。 我不喜欢提供可用于处理闪烁测试而不是修复闪烁原因的功能。

👏👏👏

@charlierudolph有时无法处理闪烁的测试。 例如,在我们的环境中,我们的应用程序访问了 23 个不同的服务,并且由于我们不拥有这些服务,因此它们中的任何一个都可能在任何给定时间关闭。 --retry 标志允许我们重新运行测试,因此临时服务中断(当他们重新启动服务时)不会导致我们的测试套件失败。

关于个人对此功能的分歧(这个论点可能像工程世界中的制表符与空格一样毫无结果),如果 Cucumber 作为工具规范正在实现这一点,我们也应该在此工具的 JS 版本中支持这一点。

它在现实世界中也有广泛的测试套件和复杂的应用程序,无法 100% 抵御 flakeyness,因此变得非常昂贵。 绝对可以通过工程之旅来改进它,但我怀疑是否有许多公司拥有丰富的资源来支持这样的工作,并获得任何不错的投资回报率。

在现实世界中,能够通过添加良好的跟踪来重试失败的测试以识别主动行动的脆弱性是非常有价值的。

如果我们重新考虑关闭此问题的决定,我将不胜感激,正如之前所述,我非常乐意在一些指导下解决此问题。

添加到此cucumber-js already具有rerun功能,这基本上只是重试但效率较低,因为它必须作为单独的进程运行(这使我能够正确理解它)。 重试是一个更好的解决方案。

抄送@charlierudolph

它在现实世界中也有广泛的测试套件和复杂的应用程序,无法 100% 抵御 flakeyness,因此变得非常昂贵。

我绝对讨厌 flakey 测试。 在我当前的项目中,我试图摆脱在 CI 上运行任何 flakey 测试,而是将它们保存为手动运行,如果由于不稳定而失败,您可以重新运行它或手动检查它。 这取决于找到你的片状来源并限制必须处理它的测试数量。

要添加到此黄瓜 js 已经具有重新运行功能,这基本上只是重试但效率较低,因为它必须作为单独的进程运行(这使我能够正确理解它)。 重试是一个更好的解决方案

Rerun 的构建使您可以轻松地专注于需要修复的测试。 是的,您可以使用它来重试失败的场景。

我 100% 同意片状测试是需要避免的。 话虽如此,测试的脆弱性通常不受团队控制。 这是我的情况;

我正在使用 Cucumber、Nightwatch、Selenium 和 Browserstack 在 Web 应用程序上运行端到端测试。 通常,由于 Selenium、Browserstack 或我正在测试的浏览器的固有脆弱性,场景会失败。涉及鼠标移动的交互因此而臭名昭著。 对我来说,能够在没有至少一小部分片状的情况下运行我的所有场景是很少见的。

我不能让 Selenium、Browserstack 或浏览器不那么脆弱,这只是我必须使用的工具的性质。 我需要的解决方案是,如果我的场景失败,可以重试几次。

我认为我们应该重新考虑这一点。 Cucumber-Ruby 现在有了。

同意。 这是 Ruby 实现的代码。 可能对 JS 实现有用。 https://github.com/cucumber/cucumber-ruby/pull/920/files

大家好,Cucumber-JS 现在有“重试”功能吗? 尽管我同意应该修复脆弱的测试,但经验表明,在涉及许多外部依赖项的大型项目中工作并不总是可行的。
归根结底,如果由于缺少重试逻辑而无法通过自动化覆盖这种脆弱的测试用例,那么无论如何都必须对其进行手动测试。
我相信使用重试逻辑应该留给 Cucumber 用户选择。
我知道“重新运行”功能,但使用它会增加额外的复杂性,因为必须单独重新运行测试才能让 Cucumber runner 透明地为您执行此操作。

@charlierudolph和@aslakhellesoy。 这个功能有什么进展吗?

据我所知,没有人在研究它。 如果有人提供拉取请求,我会考虑添加它。

@aslakhellesoy感谢您这么快回复。 这是我们目前真正需要的东西,因为我们需要自动化的设备之一有点不稳定,在这种情况下,除了重新运行失败的场景之外,没有真正实用的替代方案。
我的想法是使用每个场景标签来指定重试次数,但至少作为一个起始实现,可能只是一个命令行参数。
我将在接下来的几天内尝试查看代码。

那很好啊! 请尝试使其行为与 Cucumber-Ruby 中的行为相同。 如果它与此不同,我们可能不会合并它,因为整合/一致性是我们正在努力的目标。

@aslakhellesoy ,我已经将基本重试功能实现为 CLI --retry 选项。 我已经在我们的项目中对其进行了测试,并且运行良好。 我需要权限来推送我的工作分支并打开 PR 来讨论实现。 让我知道,谢谢。

@hurrikam伟大的工作.. 👏👏👏
我也很期待使用这个。 我正在使用 nightwatch-cucumber,他们正在等待在 Cucumber js 中修复此问题。 参考编号https://github.com/mucsi96/nightwatch-cucumber/issues/213

@charlierudolph你能帮忙解决这个问题吗? 我现在不能提交我的 PR。

@hurrikam你可以创建一个 fork 并将你的代码推https://help.github.com/articles/fork-a-repo/

@charlierudolph请参阅PR-1114
正如标题中所提到的,这是极简主义的实现(确实很少更改代码),可以在不破坏现有格式化程序和报告的情况下使该功能正常工作。

我在 Cucumber Ruby 存储库中进行了一些关于是否应该报告每次运行不稳定测试的旧对话,可能会为之前的运行引入“不稳定”结果状态。 不确定这是否已经完成,缺点是将同一测试用例的所有尝试都记录到日志中。

让我们讨论一下。

@hurrikam我的团队已经对 PR 进行了分叉,因此我们可以获得此功能。 到目前为止,它运行得非常好。 我希望你能尽快合并它,因为标志是一个巨大的帮助!

@Nick-Lucas 太棒了 - 你有吗?

@thomaswmanion是的,我们正在积极使用该功能。 我们有一个后端,有时会在通过作业队列时有点窒息,所以它是一个救星。

对于任何想要使用 PR 的人,您可以将您的 package.json 指向我的叉子(或将其从我的叉子上):

  "dependencies": {
    "cucumber": "https://github.com/Nick-Lucas/cucumber-js.git#feature/issue-727-retry",
  },

Cucumber 是预先构建的,因此它可以安装到 node_modules 中。 不用说,绝对没有保修或支持,因为该功能甚至还不是预测试版

编辑:

我现在已经离开了我的公司并将 fork 交给了他们的 github: https :

好的!!!! 感谢@Nick-Lucas - 理解系统环境在本质上可能是片状的!

这个需要合并到Master,这个不是关闭的。

@thomaswmanion是的,我们正在积极使用该功能。 我们有一个后端,有时会在通过作业队列时有点窒息,所以它是一个救星。

对于任何想要使用 PR 的人,您可以将您的 package.json 指向我的叉子(或将其从我的叉子上):

  "dependencies": {
    "cucumber": "https://github.com/Nick-Lucas/cucumber-js.git#feature/issue-727-retry",
  },

Cucumber 是预先构建的,因此它可以安装到 node_modules 中。 不用说,_绝对没有保修或支持_,因为该功能甚至还不是预测试版

编辑:

我现在已经离开了我的公司并将 fork 交给了他们的 github: https :

运行测试时如何运行重试功能?

@ricardgarcia只需使用--retry选项,请参阅https://github.com/owncloud/phoenix/pull/1207/files
我们在这里使用来自我的 PR 的分支https://github.com/cucumber/cucumber-js/pull/1205直到它希望有一天合并

嗨@individual-it,非常感谢您的回复。 如果我使用 webdriverIO 在 Cucumber-js 上运行我的测试,它应该工作吗?
我试过“--retry 1”命令,但没有重试。

@ricardgarciahttps://github.com/cucumber/cucumber-js/pull/1205 中所述,要使用此功能,您可以使用

"cucumber": "cucumber/cucumber-js#issue-727-retry"

因为更改尚未合并到主黄瓜回购中。

是的 @jain-neeeraj 我在 package.json 中使用了这个版本,但它没有用,但正如我提到的,我在 webdriverIO 上使用黄瓜运行测试,所以下面的框架“wdio-cucumber-framework”。 它应该以某种方式工作吗? 如果我使用 Cucumber-js 框架,如何运行测试以进行重试?

@ricardgarcia让我们在 gitter https://gitter.im/cucumber/cucumber-js 上进行协作,我应该能够帮助您解决这个问题。

@charlierudolph是否有可能将其合并到 master 中?

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

charlierudolph picture charlierudolph  ·  33评论

osher picture osher  ·  16评论

mobygeek picture mobygeek  ·  21评论

jbpros picture jbpros  ·  28评论

charlierudolph picture charlierudolph  ·  14评论