Как спроектировать автотесты для приложения с авторизацией, выбором товара и оформлением заказа в один клик без оплаты?
Что проверяют
Умеете ли вы строить набор тестов, а не только писать сценарии: что проверять через API, что через интерфейс, откуда брать данные и как тесты не мешают друг другу. Следом обычно спрашивают, как проверить, что двойной клик по «Купить в один клик» не создаёт два заказа.
Как отвечать
Начните с уточнения: веб или мобильное приложение, есть ли API и доступ к тестовой базе, как создаются пользователи и товары. Дальше каркас:
- пирамида: большую часть логики (валидация входа, остатки, создание заказа) проверяете API-тестами на pytest с
httpxили на REST Assured. Через UI оставляете несколько сквозных сценариев на Playwright или Selenium; - авторизация: вход через интерфейс проверяется отдельными тестами: успех, неверный пароль, заблокированный аккаунт, истёкшая сессия. Остальные тесты входят через API и переиспользуют сессию, в Playwright это
storageState; - данные: каждый тест создаёт себе пользователя и товар через API или фикстуру и убирает за собой. Общий тестовый аккаунт даёт падения из-за чужих заказов;
- выбор товара: поиск, фильтр, карточка, товар без остатка, цена в корзине совпадает с ценой в карточке;
- заказ в один клик: заказ появился в истории и в базе с верными товаром, ценой и статусом, остаток уменьшился, повторный клик не создал дубль, без авторизации кнопка ведёт на вход. Раз оплаты нет, проверьте, что заказ получил правильный начальный статус;
- устойчивость: Page Object для UI, явные ожидания вместо
sleep, запуск в CI на каждый мерж, отчёт в Allure со скриншотом и трассой при падении.
Где спотыкаются
Проверяют всё через интерфейс, включая каждый вариант неверного пароля. Набор получается медленным и хрупким, хотя та же логика за секунды проверяется запросом к API.
Считают тест пройденным по всплывающему «Заказ оформлен». Надпись может появиться и при ошибке на сервере, проверять нужно сам заказ через API или базу.
Делают тесты зависимыми друг от друга: второй рассчитывает на товар в корзине от первого. При параллельном запуске или падении первого разваливается вся цепочка.