You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:48:03