【问题标题】:Cypress Inserting an already authenticated token赛普拉斯插入已经过身份验证的令牌
【发布时间】:2022-02-04 09:32:20
【问题描述】:

我有一个需要 MFA 的应用程序进行测试。我正在尝试通过 Cypress 进行 UI 测试,以访问已通过身份验证的应用程序。

我看过一些关于设置新的赛普拉斯命令来处理登录的帖子,它将身份验证详细信息发送给第 3 方,取回详细信息并使用 cy.setLocalStorage 之类的东西将其放入本地存储。

但是我已经有一个用于 API 测试的外部方法,它可以获取有效的 Bearer 令牌。这适用于应用程序上的 API 调用。所以我想知道,有没有一个地方我可以简单地插入这个有效的令牌来使用赛普拉斯进行我的 UI 测试,或者我是否需要按照下面链接文章中定义的方式来构建 cy.login() 命令?

编辑:应该补充一点,我们实际上有一个服务主体帐户,用于 API 调用以绕过 MFA。

https://auth0.com/blog/end-to-end-testing-with-cypress-and-auth0/

【问题讨论】:

  • 请添加您尝试过的代码。

标签: authentication automated-tests local-storage cypress


【解决方案1】:

如果没有关于确切登录名和您的应用程序的更多信息,如果您的 API 测试令牌相同且足以登录,那么您可能可以将其存储在本地或会话存储中,具体取决于您的应用程序正在查找的位置为有效的令牌。

唯一重要的是,您在第一个 cy.visit 命令之前执行此操作,以向您的应用显示您已经通过身份验证/登录,例如:

describe('Your Test', () => {
  it('Login and page visit', () => {
    // or sessionStorage.setItem()
    localStorage.setItem('your_token_name', yourToken);
    cy.visit('your app url')
  })
})

但是,我不确定 MFA 是否需要您可能未涵盖的其他登录步骤。如果有疑问,您还可以考虑为赛普拉斯测试中使用的测试用户禁用 MFA。

除此之外,正如您已经写过的那样,通过请求登录通常是一种很好的方式,以避免必须测试您无法控制更改的第三方 UI,例如这里的 example for Azure AD Login

【讨论】:

  • 当我在 UI 会话中检查 Chrome 开发工具时,我可以在 Local Storage 部分下看到,在请求 api 中发送的相同令牌被放置在名为 secret 的元素下:在本地存储中。所以我在想也许我需要尝试将我的有效令牌放在这个本地存储元素中。从那以后,我还了解到用于 api 令牌的测试帐户实际上已禁用 MFA。
【解决方案2】:

您还可以将session caching 添加到登录命令中,或者为获取令牌的外部方法添加包装器命令。

请求只触发一次,然后缓存结果,因此每次调用命令时都会恢复相同的令牌。

Cypress.Commands.add('login', (username, password) => {
  cy.session([username, password], () => {
    cy.request({
      method: 'POST',
      url: '/login',
      body: { username, password },
    }).then(({ body }) => {
      window.localStorage.setItem('authToken', body.token)
    })
  })
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2016-09-27
    • 2023-02-24
    • 2016-11-30
    相关资源
    最近更新 更多