Cypress 跨测试保存本地存储以避免重新身份验证

Cypress 跨测试保存本地存储以避免重新身份验证,cypress,Cypress,我想知道是否可以跨测试保存localStorage的状态。 主要是因为我想避免在每次测试中重新验证。我意识到我可以创建一个命令,将API请求发送到我们的后端,以避免通过身份验证流,但由于各种原因,这在我的情况下不起作用 我想问的是,是否可能有这样一个工作流: 转到登录页面:验证返回响应并将会话保存到本地存储 以某种方式保持本地存储 作为经过身份验证的用户进行其他测试 在JS中可以执行的任何操作都可以在cypress测试中执行。如果您有办法在本地存储中存储cred(auth令牌等),我看不出有什么

我想知道是否可以跨测试保存localStorage的状态。 主要是因为我想避免在每次测试中重新验证。我意识到我可以创建一个命令,将API请求发送到我们的后端,以避免通过身份验证流,但由于各种原因,这在我的情况下不起作用

我想问的是,是否可能有这样一个工作流:

  • 转到登录页面:验证返回响应并将会话保存到本地存储
  • 以某种方式保持本地存储
  • 作为经过身份验证的用户进行其他测试

  • 在JS中可以执行的任何操作都可以在cypress测试中执行。如果您有办法在本地存储中存储cred(auth令牌等),我看不出有什么理由不能这样做。如果cypress在测试之间清除本地存储,那么您必须在每次测试之前编写一个beforeach钩子,将经过身份验证的令牌(由您硬编码)保存到本地存储。

    在JS中可以执行的任何操作都可以在cypress测试中执行。如果您有办法在本地存储中存储cred(auth令牌等),我看不出有什么理由不能这样做。如果cypress在测试之间清除本地存储,则必须在每次测试之前编写一个beforeach钩子,将经过身份验证的令牌(由您硬编码)保存到本地存储中。

    以下是我最后要做的:

  • 转到登录页面:验证 此时,我们有了希望在localStorage中的测试之间保持的数据,但不允许将localStorage列入白名单。 然而,我们被允许
  • 在我的
    support/commands.js
    中有一些类似的代码充当助手

    const sessionKeys = {
      authTokens: 'auth.tokens',
      sessionConfig: 'session.config',
    };
    
    // The concatenation of username and cid will be the key to set the session
    Cypress.Commands.add('persistSession', (key) => {
    
      const authTokens = localStorage.getItem(key);
    
      cy.setCookie(key, authTokens);
    });
    
    Cypress.Commands.add('restoreSession', (key) => {
      cy.getCookie(key).then(authTokens => {
        localStorage.setItem(key, authTokens.value);
      });
    
    });
    
  • 因此,我们在登录后调用
    cy.persistensession(key)
    ,这意味着我们将所有身份验证保存为cookie,这些cookie在
    support/index.js
    中以代码的形式列出
  • 像这样:

    Cypress.Cookies.defaults({
      whitelist: function(cookie){
        // Persist auth stuff
        const reAuthTokens = new RegExp('.*auth\.tokens');
        if(reAuthTokens.test(cookie.name)){
          return true;
        }
    
        return false;
      }
    });
    
  • 现在,在运行其他测试之前,任何时候我们都需要在其他测试中使用auth令牌,我们
    cy.restoreSession(key)
    ,我们应该很好
    下面是我最后做的:

  • 转到登录页面:验证 此时,我们有了希望在localStorage中的测试之间保持的数据,但不允许将localStorage列入白名单。 然而,我们被允许
  • 在我的
    support/commands.js
    中有一些类似的代码充当助手

    const sessionKeys = {
      authTokens: 'auth.tokens',
      sessionConfig: 'session.config',
    };
    
    // The concatenation of username and cid will be the key to set the session
    Cypress.Commands.add('persistSession', (key) => {
    
      const authTokens = localStorage.getItem(key);
    
      cy.setCookie(key, authTokens);
    });
    
    Cypress.Commands.add('restoreSession', (key) => {
      cy.getCookie(key).then(authTokens => {
        localStorage.setItem(key, authTokens.value);
      });
    
    });
    
  • 因此,我们在登录后调用
    cy.persistensession(key)
    ,这意味着我们将所有身份验证保存为cookie,这些cookie在
    support/index.js
    中以代码的形式列出
  • 像这样:

    Cypress.Cookies.defaults({
      whitelist: function(cookie){
        // Persist auth stuff
        const reAuthTokens = new RegExp('.*auth\.tokens');
        if(reAuthTokens.test(cookie.name)){
          return true;
        }
    
        return false;
      }
    });
    
  • 现在,在运行其他测试之前,任何时候我们都需要在其他测试中使用auth令牌,我们
    cy.restoreSession(key)
    ,我们应该很好
    这里有一个有用的链接,可以解决我和你一样的问题:通过多次测试保存cookie

    我的代码如下:

    const login=()=>{
    参观http://0.0.0.0:8080/#/login');    
    cy.get('#username')。键入('username');
    cy.get('#password')。键入('1234密码$');
    cy.get(“#登录按钮”)。单击();
    }
    描述('UI',()=>{
    //每次登录前;
    在每个之前(()=>{
    登录();
    perpress.Cookies.preserveOnce('session_id','membere_token');
    });
    });
    

    希望可以帮助你。

    这里有一个有用的链接,可以解决我和你一样的问题:通过多次测试保存cookie

    我的代码如下:

    const login=()=>{
    参观http://0.0.0.0:8080/#/login');    
    cy.get('#username')。键入('username');
    cy.get('#password')。键入('1234密码$');
    cy.get(“#登录按钮”)。单击();
    }
    描述('UI',()=>{
    //每次登录前;
    在每个之前(()=>{
    登录();
    perpress.Cookies.preserveOnce('session_id','membere_token');
    });
    });
    
    希望可以帮助您。

    您可以使用该软件包在测试之间保存本地存储,因此您只能登录一次:

    在support/commands.js中:

    导入“cypress localstorage命令”;
    
    在您的测试中:

    之前(()=>{
    //在这里做你的登录
    cy.saveLocalStorage();
    });
    在每个之前(()=>{
    恢复性存储();
    });
    
    您可以使用该软件包在测试之间保存本地存储,因此您只能登录一次:

    在support/commands.js中:

    导入“cypress localstorage命令”;
    
    在您的测试中:

    之前(()=>{
    //在这里做你的登录
    cy.saveLocalStorage();
    });
    在每个之前(()=>{
    恢复性存储();
    });
    
    太棒了!为meExcellent工作!为我工作