bku*_*era 13 continuous-integration cypress
我有时会有 1 或 2 个在 CI 中失败的测试,并且重新运行构建会导致它们通过。
如何自动重新运行这些不稳定的测试,以便我的构建第一次通过?有什么类似mocha的this.retries?
例如,我有一个测试失败,“元素的有效高度为 0x0”大约有 10% 的时间:
cy.visit('/')
cy.get('.my-element').click() // sometimes fails with not visible error
Run Code Online (Sandbox Code Playgroud)
bku*_*era 13
Cypress 现在具有内置的重试支持。
您可以通过配置在 Cypress 5.0 中设置测试重试 cypress.json
{
"retries": 1
}
Run Code Online (Sandbox Code Playgroud)
或者为 runMode 和 openMode 指定不同的选项:
{
"retries": {
"runMode": 1,
"openMode": 3
}
}
Run Code Online (Sandbox Code Playgroud)
runMode 允许您在运行 cypress run 时定义测试重试次数
openMode 允许您在运行 cypress open 时定义测试重试次数
您可以通过测试选项为单个测试或套件打开测试重试:
it('my test', {
retries: 2
}, () => {
// ...
})
// or
describe('my suite', {
retries: 2
}, () => {
// ...
})
Run Code Online (Sandbox Code Playgroud)
如果测试中失败beforeEach,afterEach或在测试体内,就会被重试。beforeAll 和 afterAll 钩子中的失败将不会重试。
对测试重试的官方支持正在进行中,但有一个插件。 cypress-plugin-retries
披露:我是插件的创建者。
将插件添加到 devDependencies
npm install -D cypress-plugin-retries
Run Code Online (Sandbox Code Playgroud)
在顶部cypress/support/index.js:
require('cypress-plugin-retries')
Run Code Online (Sandbox Code Playgroud)
使用环境变量CYPRESS_RETRIES设置重试次数:
CYPRESS_RETRIES=2 npm run cypress
Run Code Online (Sandbox Code Playgroud)
或使用Cypress.env('RETRIES')你的spec文件:
Cypress.env('RETRIES', 2)
Run Code Online (Sandbox Code Playgroud)
或者在每个测试或每个挂钩的基础上,设置重试次数:
注意:此插件添加了 Cypress.currentTest,您只能在此插件的上下文中访问它。
npm install -D cypress-plugin-retries
Run Code Online (Sandbox Code Playgroud)
注意:请参考此 issue 了解官方 cypress 重试支持的更新