赛普拉斯重试使测试始终通过
Cypress retries making test always pass
我正在尝试根据 https://docs.cypress.io/guides/guides/test-retries#How-It-Works
使用 Cypress(7.6.0)重试功能
但由于某种原因它似乎不起作用,因为保证总是失败的测试:
describe('Deliberate fail', function() {
it('Make an assertion that will fail', function() {
expect(true).to.be.false;
});
});
当 运行 从命令行将配置重试设置为 1 时,
npx cypress run --config retries=1 --env server_url=http://localhost:3011 -s cypress/integration/tmp/deliberate_fail.js
它似乎通过了,唯一提示正在重试的是文本“Attempt 1 of 2”以及已经截屏的事实:
运行 上的统计数据看起来也不合逻辑:
1 次测试
0 传球
0失败
1 个已跳过(但未在摘要中显示为已跳过)
在 cypress.json 中放置“重试”选项时的行为完全相同,无论是作为单个数字还是 运行Mode 或 openMode 的选项。
并且在“打开”模式下,测试不会重试,只会失败。
我猜我做错了事,但是什么?
我认为你的问题是你没有测试任何东西。赛普拉斯将重试涉及 DOM 的操作,因为 DOM 需要时间来呈现。重试比直接等待更有效,因为它可能发生得更快。
所以我认为因为你只是比较 2 个文字值,true
和 false
,赛普拉斯说,“嘿,这里没有什么可以重试的,这两个值永远不会改变,我要离开这里!
我想说的是,如果你用 DOM 元素设置一个类似的测试,它可能会像你期望的那样运行,但实际上它也会在第一次尝试后停止,因为当它找到 DOM 元素,它将停止重试。重试的目的是允许元素被实例化而不是因为值可能不同而重试。
我承认我在这方面可能是错的,但我肯定说服了自己 - 你怎么看?
找到原因..解决当其中一个测试步骤(it() 步骤)失败时 Cypress 不会中止规范文件的问题,我有解决这个非常老的问题的方法 https://github.com/cypress-io/cypress/issues/518 实施
//
// Prevent it just running on if a step fails
// https://github.com/cypress-io/cypress/issues/518
//
afterEach(function() {
if (this.currentTest.state === 'failed') {
Cypress.runner.stop()
}
});
这意味着 describe() 将在失败时停止,但显然不能很好地进行重试。
我真正希望的用例是在 describe() 级别重试,但这可能会很昂贵,因为上述问题刚刚得到解决,但该解决方案仅适用于 Business 计划中的用户,费用为 300 美元/月. https://github.com/cypress-io/cypress/issues/518#issuecomment-809514077
我正在尝试根据 https://docs.cypress.io/guides/guides/test-retries#How-It-Works
使用 Cypress(7.6.0)重试功能但由于某种原因它似乎不起作用,因为保证总是失败的测试:
describe('Deliberate fail', function() {
it('Make an assertion that will fail', function() {
expect(true).to.be.false;
});
});
当 运行 从命令行将配置重试设置为 1 时,
npx cypress run --config retries=1 --env server_url=http://localhost:3011 -s cypress/integration/tmp/deliberate_fail.js
它似乎通过了,唯一提示正在重试的是文本“Attempt 1 of 2”以及已经截屏的事实:
运行 上的统计数据看起来也不合逻辑: 1 次测试 0 传球 0失败 1 个已跳过(但未在摘要中显示为已跳过)
在 cypress.json 中放置“重试”选项时的行为完全相同,无论是作为单个数字还是 运行Mode 或 openMode 的选项。
并且在“打开”模式下,测试不会重试,只会失败。
我猜我做错了事,但是什么?
我认为你的问题是你没有测试任何东西。赛普拉斯将重试涉及 DOM 的操作,因为 DOM 需要时间来呈现。重试比直接等待更有效,因为它可能发生得更快。
所以我认为因为你只是比较 2 个文字值,true
和 false
,赛普拉斯说,“嘿,这里没有什么可以重试的,这两个值永远不会改变,我要离开这里!
我想说的是,如果你用 DOM 元素设置一个类似的测试,它可能会像你期望的那样运行,但实际上它也会在第一次尝试后停止,因为当它找到 DOM 元素,它将停止重试。重试的目的是允许元素被实例化而不是因为值可能不同而重试。
我承认我在这方面可能是错的,但我肯定说服了自己 - 你怎么看?
找到原因..解决当其中一个测试步骤(it() 步骤)失败时 Cypress 不会中止规范文件的问题,我有解决这个非常老的问题的方法 https://github.com/cypress-io/cypress/issues/518 实施
//
// Prevent it just running on if a step fails
// https://github.com/cypress-io/cypress/issues/518
//
afterEach(function() {
if (this.currentTest.state === 'failed') {
Cypress.runner.stop()
}
});
这意味着 describe() 将在失败时停止,但显然不能很好地进行重试。
我真正希望的用例是在 describe() 级别重试,但这可能会很昂贵,因为上述问题刚刚得到解决,但该解决方案仅适用于 Business 计划中的用户,费用为 300 美元/月. https://github.com/cypress-io/cypress/issues/518#issuecomment-809514077