| Простые рецепты аутентификации в Playwright: кулинарная книга тестировщика |
| 24.02.2026 00:00 |
|
Что общего у кулинарии и автоматизации тестирования?Что общего у кулинарии и автоматизации тестирования, спросите вы? Можно провести красивые параллели между программированием и готовкой: автоматизаторы тестирования как шеф-повара, скрипты автоматизации как рецепты, фреймворки автоматизации как кастрюли и сковородки, а кулинарная книга — как эта статья! Эта статья посвящена всем тестировщикам, которые ищут новые рецепты аутентификации с использованием Playwright. Статья предназначена для автоматизаторов тестирования, которые уже знакомы с Playwright или используют его в своей работе. Для демонстрации я буду использовать учебный магазин Book Cart, на который я наткнулась в статье Сары Дири на сайте Ministry of Testing. Для этой «поваренной книги» я отобрала четыре рецепта аутентификации, варьирующиеся от базового до среднего уровня сложности. Эти рецепты используют сочетание методов аутентификации через UI и API, с объяснением реальных сценариев применения для каждого из них. Предварительные требования: ингредиенты, общие для всех рецептов
Что дадут эти рецепты вашему тестированию?Независимо от того, какой инструмент автоматизации тестирования вы используете, хорошей практикой всегда будет повторное использование состояния входа для ваших тестов, если это возможно. Другими словами, каждый раз, когда вы запускаете тест для конкретного пользователя, вы повторно используете его состояние входа. Это похоже на покупку годовой подписки на Netflix один раз вместо того, чтобы покупать месячную подписку 12 раз в году. Все методы аутентификации Playwright, описанные ниже, позволяют залогиниться один раз и эффективно переприменять это состояние входа во всех тестах. Это сэкономит время выполнения, уменьшит нестабильность и избавит от ненужного повторения: работайте умнее, а не тяжелее. Рецепт 1: Однократная аутентификация через UI и повторное использование состояния логинаЕсли взглянуть на сайт Book Cart, то у него хороший фронтэнд, который мы можем использовать для значимых тестов - входа в систему, добавления товаров в корзину, добавления в избранное и оформления заказов. Также он оснащён документацией Swagger, которую можно применять для API-тестов. Вы МОЖЕТЕ использовать этот рецепт, когда все ваши тесты могут выполняться параллельно с использованием одной и той же учётной записи без влияния друг на друга. Например, его можно применить, добавляя книги в избранное пользователя. В таком случае имеет смысл войти один раз и повторно использовать состояние входа во всех тестах. Существуют ситуации, когда этот рецепт использовать нельзя. Например, представьте, что на нашем учебном сайте Bookcart у вас есть тест, проверяющий страницу истории заказов, и другой тест, который проверяет элементы страницы, когда список заказов пуст (см. скриншоты ниже). В таких случаях необходимо использовать разные учётные записи для тестов, а это значит, что рецепт здесь НЕ ПОДХОДИТ. Однако для этого случая вы можете использовать Рецепт 2.
Шаг 1: Создайте файл setup.specСоздайте файл tests/setup.spec.ts, который будет содержать шаги входа в систему и сохранять состояние хранилища пользователя по указанному пути. Убедитесь, что вы добавили auth.json в .gitignore, чтобы не загружать этот файл в репозиторий. import { test as setup, expect } from "@playwright/test";
Шаг 2: Добавьте setup как проектВ playwright.config.ts добавьте наш setup как проект и сделайте его зависимостью для всех проектов. Файл setup.ts будет выполняться перед запуском любых тестов. import { defineConfig, devices } from "@playwright/test";
Результат рецепта 1Playwright сначала выполнит файл setup.ts перед любыми тестами и зафиксирует состояние хранения (storage state). Любые тесты, выполняющиеся после этого, будут использовать состояние хранения из файла auth.json. Пример запуска 2 тестов с 1 воркером: ✓ 1 [setup] > tests/auth.setup.ts:3:6 > authenticate (2.7s) Рецепт 2: Аутентификация через UI с разными аккаунтами и использование уникальных storage state для каждого параллельного воркераВ случаях, когда необходимо войти под двумя или более разными пользователями, на помощь приходит рецепт 2. Вы можете проверять такие сценарии, используя уникальный аккаунт пользователя для каждого параллельного воркера. Ознакомьтесь с документацией Playwright, чтобы понять, как реализован этот рецепт. Я использовала этот шаблон для проведения своего эксперимента. Шаг 1: Создайте файл фикстур
Например, я выполнила вход как swathika и snithik, по одному разу на пользователя, используя файл фикстуры. Затем код сохраняет их storage states, которые можно использовать для всех воркеров. Таким образом, мы аутентифицируемся один раз на воркер, каждый с уникальным аккаунтом: воркер 1 как swathika, другой как snithik. Ниже приведён пример файла фикстур: import { test as baseTest, expect } from "@playwright/test";
Шаг 2: создаем тестовые файлы в папке testsТеперь создайте пару тестов, которые будут проверять вход в систему с уникальными состояниями хранения, созданными в auth0.json и auth1.json. Например, это простой тест для проверки URL главной страницы после входа под swathika: import { test, expect } from "../playwright/fixtures";
Результат рецепта 2После выполнения тестов создаются файлы состояния хранения auth0.json и auth1.json. Каждый из них будет использоваться своим параллельным воркером. Ниже видно, что оба теста прошли успешно, и каждый процесс воркера использовал уникальное состояние хранения из auth0.json и auth1.json.
Рецепт 3: Аутентификация через API для нескольких аккаунтов и использование полученных состояний храненияВсе знают, что в тестировании API-эндпойнты быстрее, чем UI. Особенно это актуально при работе с несколькими учетными записями пользователей. Тестирование с учетом ролей критично, когда нужно проверять действия, которые разрешены определенной категории пользователей. Этот рецепт идеально подходит, когда необходимо войти под несколькими пользователями и выполнять действия с разными уровнями авторизации. Для демонстрации представим, что у вас два пользователя: один админ, другой читатель/покупатель. (Сайт Book Cart не поддерживает разные роли, только читателя: мы просто воображаем это.) Посмотрим, как войти как админ и как читатель, чтобы использовать их состояния хранения в тестах. Я опиралась на документацию на сайте Playwright. Рассмотрим реализацию. Шаг 1: создаем setup.spec файлСоздайте файл tests/setup.spec.ts с шагами аутентификации через API для админа и читателя, а также сохранением их состояний хранения в соответствующих json-файлах: admin.json и reader.json. Обязательно добавьте admin.json и reader.json в .gitignore, чтобы случайно не залить их в репозиторий. import { test as setup, expect } from "@playwright/test";
Шаг 2: Создаем тесты, использующие состояния хранения для админа и читателяМы можем использовать состояние хранения для группы тестов или для каждого теста отдельно, в зависимости от требований теста. Давайте создадим два отдельных теста: один для «админа», другой для «читателя». Я создала файл теста adminTest.spec.ts, где использую состояние хранения для админа, и readerTest.spec.ts для читателя. Это похоже на предыдущие рецепты, за исключением того, что я буду использовать состояние хранения непосредственно внутри теста, а не настраивать его глобально в конфиге. В обоих файлах теста я сразу перехожу на страницу «Мои заказы» сайта Book Cart и проверяю, отображается ли определенный текст. Так мы убеждаемся, что состояние хранения позволило нам зайти как админ или как читатель. Ниже пример adminTest.spec.ts, использующего состояние хранения из admin.json: import { test } from "@playwright/test";И файл readerTest.spec.ts, использующий состояние хранения из reader.json: import { test } from "@playwright/test";Результат рецепта 3После выполнения тестов будут созданы два файла состояния хранения: один для админа, другой для читателя. Тесты будут использовать соответствующие файлы состояния хранения.
Ниже приведено подтверждение состояния хранения, зафиксированного в одном из json-файлов.
Рецепт 4: Аутентификация через API для нескольких аккаунтов и использование их в одном тестеВ этом рецепте мы повторяем те же шаги, что и в рецепте 3. Но на этот раз вместо того, чтобы использовать состояния хранения «админа» и «читателя» в разных тестах, мы используем их в одном тесте. Этот рецепт подходит, когда нужно протестировать, как взаимодействуют несколько аутентифицированных ролей. Шаг 1: Создайте файл setup.specСледуйте тем же шагам, что и в Рецепте 3: создайте файл setup.ts, который сохраняет API-аутентификацию для админа и читателя. Шаг 2: Создайте файл тестаСоздайте тестовый файл, чтобы использовать аутентифицированные состояния как для админа, так и для читателя: import { test } from "@playwright/test";
Результат рецепта 4После выполнения тестов, как и в рецепте 3, будут созданы два файла состояния хранения: один для админа, другой для читателя. Каждый тест будет использовать соответствующее состояние хранения. Единственное отличие в том, что в рецепте 4 мы используем состояния хранения обоих пользователей в одном тесте, тогда как в рецепте 3 состояния использовались в разных тестах. Подводя итогМы рассмотрели несколько техник аутентификации, которые можно реализовать с помощью Playwright. По моему опыту, каждая система уникальна, и стратегия автоматизации тестирования также зависит от приложения. Например, если ваше приложение не включает различные роли и права доступа, вы можете выбрать метод аутентификации соответственно. С другой стороны, если приложение поддерживает роли с разными уровнями авторизации, методы аутентификации и способы их использования в тестах будут существенно различаться. Надеюсь, эта статья дала вам ясное представление о том, как повторно использовать состояния аутентификации. Это экономит время выполнения на пайплайнах, что особенно важно при масштабируемости автоматизационной инфраструктуры! Я добавила эти рецепты в своё портфолио на GitHub, и они доступны на соответствующих ветках, чтобы избежать путаницы. Вы можете клонировать мой практический репозиторий и попробовать все примеры самостоятельно. Официальный сайт Playwright также предоставляет массу полезной информации и примеров кода, которые можно адаптировать под свои нужды. Приятного аппетита! Дополнительная информация |