Cypress学习文档

沉淀cypress对常用html组件定位的文档


测试用例失败后重试

<p>[TOC]</p> <h1>1.重试的介绍</h1> <h2>为什么要重试</h2> <p>使用 Cypress 进行自动化测试时,仍然会存在一些难以验证的行为,并使得测试变得不稳定(不可靠) 有时会由于不可以预测的情况(如,外部依赖项中断,随机网络错误等)而导致测试失败</p> <h2>其他导致不可靠测试的因素</h2> <p>前端动画 API 调用 测试服务器/数据库的可用性 依赖资源的可用性 网络问题</p> <h2>重试的优势</h2> <p>通过重试,Cypress 能够重试失败的测试用例,以帮助减少测试脆弱性和持续集成(CI)构建失败的情况 从而节省团队宝贵的时间和资源,使团队可以专注于最重要的事情</p> <h2>备注</h2> <p>Cypress 5.0 之前需要通过插件 cypress-plugin-retries 来完成重试的作用 Cypress 5.0 开始就自带重试的配置项了</p> <h1>2.通过插件来完成重试(不推荐使用)</h1> <h2>安装 cypress-plugin-retries</h2> <pre><code>npm install --save-dev cypress-plugin-retries</code></pre> <h2>在 cypress/support/index.js 下增加如下代码</h2> <pre><code>require('cypress-plugin-retries’)</code></pre> <h2>在 package.json 的 scripts 代码块下增加如下代码</h2> <pre><code> { "scripts" : { "retryCases":"CYPRESS_RETRIES=2 cypress run" } }</code></pre> <h2>使用</h2> <p>在 Cypress 安装目录下运行下面命令,所有测试用例若失败都会自动重试 2 次</p> <pre><code>yarn retryCases</code></pre> <h1>3.Cypress 自带的重试功能介绍</h1> <h2>前言</h2> <p>默认情况下,测试将在失败时不重试,需要在配置中启用测试重试才能使用此功能 启用测试重试后,可以将测试配置为具有 X 次重试次数 例如,测试重试配置了2次重试,则 Cypress 将最多重试2次(共运行3次),然后再标记为失败测试</p> <h3>注意</h3> <p>当再次运行每个测试时,以下 hook 函数也将重新运行</p> <p>beforeEach afterEach 但 before 和 after 不会触发</p> <h2>重试的工作流程</h2> <p>假设 Cypress 设置了重试两次</p> <p>第一次运行时若成功,则继续往下运行其他的测试用例 第一次运行若失败 ,则会重试运行第一次 重试运行第一次若成功,则继续往下运行其他的测试用例 若重试运行第一次还失败,则重试运行第二次 若重试运行第二次仍然失败,则将此 测试用例标记为失败 注:能够在命令日志中查看尝试的次数,并根据需要扩展每次尝试以进行检查和调试</p> <h2>配置重试功能</h2> <h2>全局配置</h2> <h3>前言</h3> <p>通常需要为 cypress run 和 cypress open 分开定义不同的重试次数 默认在 cypress.json 中进行配置 <strong>runMode:</strong>定义运行 cypress run 时的重试次数 <strong>openMode:</strong>定义运行 cypress open 时的重试次数</p> <h2>cypress.json 分开定义</h2> <pre><code>{ "retries": { // Configure retry attempts for `cypress run` // Default is 0 "runMode": 2, // Configure retry attempts for `cypress open` // Default is 0 "openMode": 0 } </code></pre> <h2>cypress.json 合并定义</h2> <pre><code>{ "retries": 2 }</code></pre> <p>这样无论是 cypress run 命令还是 cypress open 命令,重试次数都是 2</p> <h2>自定义配置</h2> <h3>测试用例级别</h3> <pre><code> context('测试用例级别', function () { it('栗子1', { // 无论是 runMode 还是 openMode 都重试 2 次 retries: 2, defaultCommandTimeout: 1000 }, function () { cy.get('#id') }); it('栗子2', { // 分开指定重试次数 retries: { runMode: 2, openMode: 1 }, defaultCommandTimeout: 1000 }, function () { cy.get('#id') });</code></pre> <h2>测试用例集级别</h2> <pre><code> context('测试用例集级别', { // 此 context 下面的所有测试用例(it)重试次数都是 1 retries: 1, defaultCommandTimeout: 1000 }, function () { it('栗子1', function () { cy.get('#id') }) it('栗子2', function () { cy.get('#id') }) }</code></pre> <h1>Reference</h1> <p>[1]. <a href="https://docs.cypress.io/guides/guides/test-retries#Configure-Test-Retries">ref1</a></p>

页面列表

ITEM_HTML