Управление profile данными

Управление profile данными в WebdriverIO

WebdriverIO предоставляет мощные возможности для тестирования веб-приложений, включая работу с данными профиля пользователя. В тестах часто требуется эмулировать действия пользователя с учётом его персональных настроек и данных, таких как куки, локальное хранилище и сессии. Это позволяет создать более реалистичные тестовые сценарии, где взаимодействие с приложением происходит с учётом состояния пользователя.

Куки (cookies) — это небольшие фрагменты данных, которые веб-приложение сохраняет на устройстве пользователя для хранения информации о сессии, предпочтениях или настройках. WebdriverIO позволяет управлять куки через API, предоставляемое браузером.

Работа с куками

В WebdriverIO можно работать с куками через команды getCookies, setCookies и deleteCookies. Эти команды позволяют получать, добавлять и удалять куки в процессе выполнения теста.

Получение всех кук:

browser.getCookies().then(cookies => {
  console.log(cookies);
});

Добавление новой куки:

browser.setCookies({ name: 'user_session', value: '12345', domain: 'example.com' });

Удаление куки:

browser.deleteCookies('user_session');

Локальное хранилище и сессии

Локальное хранилище и сессии позволяют хранить данные на стороне клиента. Эти данные могут быть использованы для хранения состояния приложения между сессиями или только в рамках текущей сессии.

Локальное хранилище

WebdriverIO предоставляет возможность работать с локальным хранилищем через browser.execute() или методы из пакета @wdio/devtools-service.

Запись данных в локальное хранилище:

browser.execute(() => {
  localStorage.setItem('user', JSON.stringify({ id: 1, name: 'Test User' }));
});

Чтение данных из локального хранилища:

browser.execute(() => {
  return JSON.parse(localStorage.getItem('user'));
}).then(user => {
  console.log(user);
});

Сессии

Сессионные данные хранятся в объекте sessionStorage и могут быть использованы для управления состоянием данных на протяжении одной сессии пользователя. Однако в отличие от локального хранилища, данные в sessionStorage исчезают при закрытии браузера.

Запись данных в сессионное хранилище:

browser.execute(() => {
  sessionStorage.setItem('cart', JSON.stringify([{ item: 'Book', quantity: 2 }]));
});

Чтение данных из сессионного хранилища:

browser.execute(() => {
  return JSON.parse(sessionStorage.getItem('cart'));
}).then(cart => {
  console.log(cart);
});

Управление данными профиля с использованием WebdriverIO

В процессе тестирования может потребоваться восстановление состояния профиля пользователя, например, после перезагрузки страницы или между тестами. Использование куки, локального хранилища и сессий позволяет обеспечить сохранение данных между тестами и их восстановление в нужный момент.

Эмуляция профиля пользователя

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

Пример восстановления состояния профиля:

beforeEach(() => {
  browser.setCookies({ name: 'user_session', value: 'abcd1234', domain: 'example.com' });
  browser.execute(() => {
    localStorage.setItem('user', JSON.stringify({ id: 1, name: 'Test User' }));
  });
  browser.execute(() => {
    sessionStorage.setItem('cart', JSON.stringify([{ item: 'Laptop', quantity: 1 }]));
  });
});

Перезапись и очистка данных

Важно иметь возможность очистки или обновления профиля перед каждым тестом. Это необходимо для того, чтобы каждый тест выполнялся в чистом, независимом состоянии.

Очистка данных профиля перед тестом:

beforeEach(() => {
  browser.deleteCookies();
  browser.execute(() => {
    localStorage.clear();
    sessionStorage.clear();
  });
});

Использование тестовых данных для проверки работы с профилем

Сложные сценарии тестирования могут требовать использования различных наборов данных для имитации разных состояний профиля. Это позволяет удостовериться, что приложение корректно реагирует на изменения в данных пользователя.

Имитация разных пользователей

Использование разных наборов куков и данных локального хранилища позволяет протестировать работу приложения для разных типов пользователей.

beforeEach(() => {
  // Эмуляция профиля администратора
  browser.setCookies({ name: 'user_session', value: 'admin123', domain: 'example.com' });
  browser.execute(() => {
    localStorage.setItem('user', JSON.stringify({ id: 1, name: 'Admin User' }));
  });

  // Эмуляция профиля обычного пользователя
  browser.setCookies({ name: 'user_session', value: 'user123', domain: 'example.com' });
  browser.execute(() => {
    localStorage.setItem('user', JSON.stringify({ id: 2, name: 'Normal User' }));
  });
});

Применение профиля в различных окружениях

В рамках различных окружений тестирования может потребоваться использование различных данных профиля. Например, в тестах для продакшн-окружения данные профиля могут быть реальными, в то время как для тестов на staging или в процессе CI/CD используется фальшивые или заранее подготовленные данные.

WebdriverIO позволяет конфигурировать окружения через настройки в файле конфигурации, и в зависимости от окружения можно выбирать соответствующие профили.

Пример настройки для разных окружений:

if (process.env.ENV === 'production') {
  // Использование реальных данных
  browser.setCookies({ name: 'user_session', value: 'realUserToken', domain: 'example.com' });
} else {
  // Использование тестовых данных
  browser.setCookies({ name: 'user_session', value: 'testUserToken', domain: 'example.com' });
}

Управление профилем через WebdriverIO в CI/CD

В процессе автоматического тестирования в CI/CD важно использовать стабильные и предсказуемые данные профиля. Для этого можно интегрировать процессы очистки и восстановления данных профиля в pipeline.

Пример для CI/CD pipeline:

before(() => {
  browser.deleteCookies();
  browser.execute(() => {
    localStorage.clear();
    sessionStorage.clear();
  });
});

after(() => {
  browser.deleteCookies();
  browser.execute(() => {
    localStorage.clear();
    sessionStorage.clear();
  });
});

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

Заключение

Работа с данными профиля в WebdriverIO позволяет моделировать взаимодействие с приложением в условиях, приближенных к реальным. Управление куками, сессиями и локальным хранилищем обеспечивает высокую гибкость в тестировании, позволяя имитировать различные состояния пользователя и эффективно проводить тесты с учётом индивидуальных настроек.