Cypress启用重试功能后首次测试用例无限循环执行问题求助
Cypress对接Azure OAuth2登录重试死循环解决方案
通过Azure API直接获取认证凭证,跳过前端跳转
不要通过前端点击跳转的方式走Azure登录流程,直接调用Azure OAuth2的密码授权接口获取token,将token写入应用对应的本地存储或cookie中,让应用直接识别为已登录状态,从根源避免登录跳转问题。
示例代码如下:// cypress/support/commands.js 新增自定义登录命令 Cypress.Commands.add('azureLogin', () => { cy.request({ method: 'POST', url: 'https://login.microsoftonline.com/<替换为你的Azure租户ID>/oauth2/v2.0/token', form: true, body: { grant_type: 'password', client_id: '<替换为你的应用注册客户端ID>', client_secret: '<替换为你的应用客户端密钥,无密码授权需求可省略>', scope: 'openid profile <替换为你的应用申请的权限 scope>', username: '<替换为测试用账号邮箱>', password: '<替换为测试用账号密码>' } }).then(res => { // 根据你的应用登录态存储逻辑写入对应位置 window.localStorage.setItem('access_token', res.body.access_token) window.localStorage.setItem('id_token', res.body.id_token) }) })使用
cy.session()持久化登录状态
将登录逻辑用cy.session()包裹,Cypress会自动缓存登录会话信息,页面重载、测试重试、跨用例执行都不会丢失登录态,无需重复执行登录逻辑。
示例代码如下:// 测试用例文件前置钩子 beforeEach(() => { cy.session('azure-auth-session', () => { cy.azureLogin() }, { cacheAcrossSpecs: true // 开启后可跨测试文件复用登录会话 }) cy.visit('/') })关闭重试全页重置配置(适配前端登录场景)
如果你需要保留前端跳转登录的测试用例,可修改配置关闭重试时的全页面重置逻辑,避免会话丢失:// cypress.config.js 新增配置 const { defineConfig } = require('cypress') module.exports = defineConfig({ e2e: { experimentalRetryBehavior: false } })注意:该配置会让测试重试时保留当前页面上下文,适合无需重置状态的测试场景
内容的提问来源于stack exchange,提问作者makis
相关产品推荐
相关产品推荐

