Как реализовать передачу токена авторизации во все тесты?
Что проверяют
Умеете ли вы организовать тестовый фреймворк так, чтобы авторизация жила в одном месте, а не копировалась в каждый тест. Следом обычно спрашивают, что будет с токеном при параллельном запуске и когда он истечёт посреди прогона.
Как отвечать
Схема одна для любого стека: токен получают один раз через API, а не через UI, кэшируют и подкладывают в каждый запрос централизованно.
- Java и RestAssured: токен получают в
@BeforeAll(JUnit 5) или в базовом классе, собираютRequestSpecificationчерезRequestSpecBuilderс заголовкомAuthorization: Bearer <token>и передают вgiven().spec(spec). Можно назначить спецификацию глобально черезRestAssured.requestSpecificationили написатьFilter, который сам добавит заголовок; - Python и pytest: фикстура со
scope="session"возвращаетrequests.Sessionс заполненнымиheaders, тесты просто принимают её параметром; - Playwright для UI: логин выполняется один раз в setup-проекте, состояние сохраняется в
storageState, и все тесты стартуют уже авторизованными. Для API-запросов там естьextraHTTPHeaders.
Логин и пароль берутся из переменных окружения или секретов CI, в репозиторий не попадают. Токен в логах маскируется: RestAssured и Allure охотно печатают заголовки целиком.
Отдельно продумайте время жизни. Если прогон длиннее срока действия токена, нужен провайдер, который помнит expires_in и обновляет токен заранее, либо фильтр, который при 401 один раз перелогинивается и повторяет запрос. Для разных ролей держите разные спецификации или фикстуры: adminSpec, userSpec.
Где спотыкаются
Логинятся через интерфейс перед каждым тестом. Прогон растягивается в разы, а падения на логине маскируют настоящие дефекты.
Держат токен в статическом поле, которое переписывают параллельные потоки. При запуске с разными ролями тест получает чужой токен и падает нестабильно.
Подкладывают токен в каждый запрос глобально и забывают о негативных проверках. Тесты «без токена», «с истёкшим», «с токеном другой роли» должны явно обходить общую спецификацию, иначе они проверяют не то, что заявлено.