Сохраняйте локальное хранилище между тестами, чтобы избежать повторной аутентификации - PullRequest
0 голосов
/ 17 мая 2018

Мне интересно, возможно ли сохранить состояние localStorage между тестами. Главным образом потому, что я хочу избежать повторной аутентификации в каждом тесте. Я понимаю, что могу создать команду, которая отправляет запрос API нашему бэкэнду, чтобы избежать прохождения потока аутентификации, но по разным причинам это не сработает в моей ситуации.

Я спрашиваю, возможно ли иметь такой рабочий процесс:

  1. Перейти на страницу входа: аутентифицировать ответ и сохранить сеанс в локальном хранилище
  2. Как-то сохранить локальное хранилище ...
  3. Пройдите другие тесты как аутентифицированный пользователь

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Вот что я в итоге сделал:

  1. Перейти на страницу авторизации: аутентификация На данный момент у нас есть данные, которые мы хотим сохранить между тестами в localStorage, но нам не разрешен белый список localStorage. Тем не менее, нам разрешено белый список файлов cookie

У меня есть такой код внутри моего 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);
  });

});
  1. Таким образом, мы вызываем cy.persistSession(key) после входа в систему, что означает, что у нас есть вся аутентификация, сохраненная в виде файлов 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;
  }
});
  1. Теперь в любое время нам нужны наши токены аутентификации в других наших тестах, прежде чем их запускать, мы cy.restoreSession(key), и мы должны быть хорошими!
0 голосов
/ 08 ноября 2018

Вот полезная ссылка, которая решает мою проблему, подобную вашей: Сохраняйте куки с помощью нескольких тестов

мой код вроде:

const login = () => { cy.visit('http://0.0.0.0:8080/#/login'); cy.get('#username').type('username'); cy.get('#password').type('1234password$'); cy.get('#login-button').click(); }

describe('UI', () => { // beforeEach(login); beforeEach(() => { login(); Cypress.Cookies.preserveOnce('session_id', 'remember_token'); });

});

надежда может помочь вам.

0 голосов
/ 23 мая 2018

Все, что вы можете сделать в JS, вы можете сделать в тесте на кипарис. Если у вас есть какой-то способ хранения кредитов (токен аутентификации и т. Д.) В локальном хранилище, я не вижу причин, почему вы не можете этого сделать. Если Cypress очищает ваше локальное хранилище между тестами, перед каждым тестом вам придется записывать ловушку beforeEach, которая сохраняет аутентифицированный токен (жестко запрограммированный вами) в локальное хранилище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...