К урокам AQA

Финал марафона · урок 18

90 вопросов на собеседование автоматизатора

Пройти собеседование с котом Борисом

Пять вопросов голосом или текстом, уточнения и разбор каждого ответа. Без входа.

Начать тренировку
40
Часто

Повторяются минимум в половине изученных источников.

35
Иногда

Встречаются в отдельных интервью или зависят от проекта.

15
Редко

Узкие темы — готовь после основной базы или под вакансию.

Показано 35 из 90Сбросить фильтры
  1. 41ИногдаPlaywrightКогда использовать beforeEach, beforeAll и fixture?

    Как ответить на собеседовании

    beforeEach — повторяемая подготовка каждого теста, beforeAll — дорогой неизменяемый setup для группы, fixture — переиспользуемая управляемая зависимость. Общие изменяемые данные в beforeAll делают тесты связанными.

    Пример из практики

    В profile-flow повторяемую подготовку страницы я помещал в beforeEach. Общий изменяемый аккаунт в beforeAll не использовал бы: один тест испортит состояние для всех остальных.

  2. 42ИногдаPlaywrightЧто проверяет strict mode у locator?

    Как ответить на собеседовании

    Действие над locator должно однозначно указывать на один элемент. Если совпадений несколько, Playwright падает и заставляет уточнить намерение вместо случайного клика по первому.

    Пример из практики

    Если getByRole('button') находит три кнопки, я не ставлю first наугад. В PomidorQA уточняю accessible name или сужаю поиск карточкой пользователя — strict mode ловит неоднозначность раньше случайного клика.

  3. 43ИногдаPlaywrightКогда first или nth допустимы, а когда опасны?

    Как ответить на собеседовании

    Допустимы, если позиция сама является частью контракта. Если nth просто маскирует неуникальный locator, перестановка элементов незаметно направит тест не туда.

    Пример из практики

    nth(0) уместен, если требование говорит «первый доступный слот». Если мне нужен слот конкретного времени, я ищу его по данным, иначе сортировка незаметно изменит смысл теста.

  4. 44ИногдаPlaywrightКак работать с iframe?

    Как ответить на собеседовании

    Использовать frameLocator или найти конкретный Frame и искать элементы внутри него. Обычный page locator не пересекает границу iframe автоматически.

    Пример из практики

    В базовом PomidorQA iframe не было. Если бы, например, оплата открывалась внутри iframe, я использовал бы frameLocator и отдельно проверил результат на странице продукта.

  5. 45ИногдаPlaywrightКак проверить новую вкладку или popup?

    Как ответить на собеседовании

    Начать ожидать событие page или popup до клика, затем выполнить действие и дождаться новой Page. Так тест не пропустит быстрое событие.

    Пример из практики

    Если карточка участника открывается в новой вкладке, я сначала начинаю ждать page, затем кликаю. Иначе быстрая вкладка может открыться раньше, чем тест подпишется на событие.

  6. 46ИногдаPlaywrightДля чего нужны Playwright projects?

    Как ответить на собеседовании

    Описывать матрицу запусков: браузеры, устройства, окружения и зависимости setup-проектов. Один тест можно прогнать с разной конфигурацией без копирования spec-файлов.

    Пример из практики

    Для PomidorQA projects могли бы описывать Chromium, Firefox и WebKit или разные baseURL. Один и тот же spec остался бы один, менялась бы только конфигурация запуска.

  7. 47ИногдаPlaywrightКак тестировать загрузку файла?

    Как ответить на собеседовании

    Передать файл через setInputFiles либо обработать filechooser, если input создаётся динамически. После действия проверить бизнес-результат, а не только исчезновение диалога.

    Пример из практики

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

  8. 48ИногдаPlaywrightКак тестировать скачивание файла?

    Как ответить на собеседовании

    Начать ждать событие download до клика, получить Download, проверить имя и при необходимости сохранить файл во временный путь. В CI нельзя рассчитывать на пользовательскую папку Downloads.

    Пример из практики

    Для выгрузки отчёта я начал бы ждать download до клика, затем проверил имя файла и содержимое во временной директории. На папку Downloads пользователя в CI рассчитывать нельзя.

  9. 49ИногдаPlaywrightКогда использовать soft assertions?

    Как ответить на собеседовании

    Когда полезно собрать несколько независимых расхождений за один прогон, например проверить поля карточки. Для критичного условия продолжать тест опасно — там нужна обычная assertion.

    Пример из практики

    Soft assertions пригодились бы для независимых полей профиля: имя, timezone и Telegram. Но если пользователь вообще не открылся, я остановлю тест обычной assertion — дальше проверять нечего.

  10. 50ИногдаPlaywrightЗачем использовать test.step?

    Как ответить на собеседовании

    Чтобы отчёт показывал крупные бизнес-шаги и быстрее локализовал падение. Оборачивать каждую строку ради красоты отчёта — лишний шум.

    Пример из практики

    В отчёте PomidorQA я группировал бы крупные шаги: создание пользователя, бронирование, проверка у гостя. Заворачивать каждый fill в test.step не стал бы — отчёт превратится в шум.

  11. 51ИногдаPlaywrightКак подменить ответ API в браузерном тесте?

    Как ответить на собеседовании

    Перехватить запрос через page.route или context.route и выполнить fulfill, continue либо abort. Подмена должна служить цели теста: она не доказывает, что реальный backend работает.

    Пример из практики

    Чтобы проверить UI при ошибке каталога, я мог бы подменить ответ через route и показать empty/error state. Но отдельным тестом всё равно проверил бы живой backend: mock его работоспособность не доказывает.

  12. 52ИногдаPlaywrightКак проверить запрос, отправленный страницей?

    Как ответить на собеседовании

    Начать ждать request/response до действия, затем проверить URL, метод, payload или status. Это полезно для диагностики, но не заменяет видимую пользователю assertion, если цель сценария — UI.

    Пример из практики

    После сохранения профиля я могу дождаться response и проверить status для диагностики, а затем проверить видимый текст. Пользовательский сценарий должен подтверждать результат в UI, не только сетевой вызов.

  13. 53ИногдаAPI и тестовые данныеЗачем создавать данные через API для UI-теста?

    Как ответить на собеседовании

    Это быстрее и стабильнее, если регистрация не является предметом проверки. UI остаётся для Act и Assert, а setup не расходует время на повторение уже проверенного пути.

    Пример из практики

    В тесте редактирования профиля я создаю пользователя через API, потому что регистрация не является целью этого сценария. Так Act начинается сразу с нужного экрана, а тест проходит быстрее.

  14. 54ИногдаAPI и тестовые данныеЧто проверять в API-тесте кроме status code?

    Как ответить на собеседовании

    Тело и схему, бизнес-правила, headers, побочные эффекты и состояние данных. Ответ 200 с неверным payload всё равно является дефектом.

    Пример из практики

    В API-тесте создания пользователя я проверяю не только 201, но и id, role, обязательные поля и то, что пользователь действительно доступен следующим запросом.

  15. 55ИногдаAPI и тестовые данныеЧто такое storageState?

    Как ответить на собеседовании

    Снимок cookies, localStorage и при поддержке конфигурации IndexedDB, который можно загрузить в context. Он ускоряет авторизацию, но требует безопасного хранения и стратегии обновления состояния.

    Пример из практики

    В базовой версии проекта storageState не использовался. Если бы я добавлял его, сохранял бы состояние тестового аккаунта вне репозитория и отдельно решал, когда его обновлять.

  16. 56ИногдаAPI и тестовые данныеКогда нельзя делить один storageState между тестами?

    Как ответить на собеседовании

    Когда тесты изменяют серверное состояние одного аккаунта и могут конфликтовать при параллельности. Тогда нужны отдельные аккаунты на worker или сценарий.

    Пример из практики

    Один storageState для гостя нельзя бездумно раздать параллельным тестам бронирования: они начнут менять одни и те же слоты. Я бы выдавал отдельный аккаунт на worker.

  17. 57ИногдаAPI и тестовые данныеКак гарантировать cleanup, если тест упал?

    Как ответить на собеседовании

    Использовать fixture teardown или finally вокруг сценария. Cleanup должен быть идемпотентным и по возможности выполняться через API, иначе одно падение загрязнит следующие запуски.

    Пример из практики

    Удаление тестового пользователя я вызываю в finally или teardown. Даже если expect упал, следующий run не получит занятый email и мусор от предыдущего теста.

  18. 58ИногдаAPI и тестовые данныеЧто такое идемпотентность и зачем она тестировщику?

    Как ответить на собеседовании

    Повтор одной операции даёт тот же итоговый эффект. Идемпотентные setup/cleanup проще безопасно повторять после сетевой ошибки или retry.

    Пример из практики

    Мой cleanup пользователя можно вызвать повторно: если запись уже удалена, он спокойно завершится. Это полезно, когда первый запрос прошёл, а клиент потерял ответ по сети.

  19. 59ИногдаAPI и тестовые данныеКак тестировать гонку двух пользователей за один ресурс?

    Как ответить на собеседовании

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

    Пример из практики

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

  20. 60ИногдаAPI и тестовые данныеЧто делать с секретами в автотестах и CI?

    Как ответить на собеседовании

    Хранить в secret store CI или переменных окружения, не писать в репозиторий и не печатать в логах. Давать тестовому аккаунту минимальные права и уметь ротировать ключи.

    Пример из практики

    Секреты тестового API я передаю через GitHub Actions Secrets и env. В README оставляю только имя переменной, а токен не печатаю в trace или логах.

  21. 61ИногдаЗапуск и масштабированиеКак Playwright запускает тесты параллельно?

    Как ответить на собеседовании

    Runner распределяет файлы между worker-процессами; тесты внутри одного файла по умолчанию идут последовательно. Полностью параллельный режим требует настоящей изоляции данных и состояния.

    Пример из практики

    В PomidorQA разные spec-файлы могут идти на разных workers, если данные изолированы. Внутри одного файла я сохраняю последовательность, пока явно не доказал, что тесты безопасно независимы.

  22. 62ИногдаЗапуск и масштабированиеПочему увеличение workers может сделать набор медленнее?

    Как ответить на собеседовании

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

    Пример из практики

    Если поднять workers с двух до восьми на слабом runner, база и CPU могут стать узким местом. Я сравню длительность и ошибки на нескольких значениях, а не поставлю максимум наугад.

  23. 63ИногдаЗапуск и масштабированиеЧем sharding отличается от workers?

    Как ответить на собеседовании

    Workers распараллеливают тесты внутри одного runner, sharding делит набор между несколькими машинами или jobs. Sharding требует объединения отчётов и одинакового окружения на каждом шарде.

    Пример из практики

    Workers ускоряют один job, а sharding делит весь набор между jobs. Для большого PomidorQA-набора я бы использовал sharding только после того, как отчёты умеют объединяться.

  24. 64ИногдаЗапуск и масштабированиеЗачем запускать браузерные тесты в Docker?

    Как ответить на собеседовании

    Чтобы зафиксировать системные зависимости и приблизить локальное окружение к CI. Нужно следить за версией образа, ресурсами, правами, shared memory и сетевым доступом к приложению.

    Пример из практики

    В учебном проекте Docker не был обязательным, поэтому я не выдаю его за свой опыт. Если бы окружения расходились, зафиксировал бы версию Node и браузеров образом и проверил ресурсы контейнера в CI.

  25. 65ИногдаЗапуск и масштабированиеКакие тесты должны блокировать Pull Request?

    Как ответить на собеседовании

    Быстрые и доверенные проверки критичных рисков. Нестабильный или многочасовой regression сначала нужно стабилизировать или вынести в отдельный расписанный прогон, иначе gate потеряет доверие.

    Пример из практики

    Merge я блокировал бы быстрыми typecheck, lint и доверенным smoke. Длинный или нестабильный regression вынес бы отдельно, пока команда не вернёт ему надёжность.

  26. 66ИногдаЗапуск и масштабированиеКак измерять flaky rate?

    Как ответить на собеседовании

    Фиксировать тесты, прошедшие только после retry, и делить число таких исходов на общее число запусков за период. Метрика нужна в динамике и вместе с причинами, а не для наказания команды.

    Пример из практики

    Я бы считал тесты, прошедшие только после retry, и делил их на все запуски за неделю. Для PomidorQA показал бы не разовую цифру, а тренд после исправления конкретной причины.

  27. 67ИногдаЗапуск и масштабированиеКакой reporter выбрать?

    Как ответить на собеседовании

    Локально удобен list или HTML, в CI — HTML как артефакт и JUnit/JSON для интеграций и аналитики. Выбор зависит от того, кто читает результат и нужна ли история запусков.

    Пример из практики

    Локально мне удобен list или HTML-report, в Actions — HTML как артефакт и JUnit/JSON для машинной обработки. Reporter выбираю под читателя, а не потому что он модно выглядит.

  28. 68ИногдаЗапуск и масштабированиеКак отличить дефект продукта от дефекта автотеста?

    Как ответить на собеседовании

    Проверить trace, запросы, логи и воспроизвести наблюдаемое поведение независимо от спорного шага теста. Не переписывать assertion только потому, что сборка красная.

    Пример из практики

    Если бронирование упало, я сначала проверю через UI или API итоговое состояние слота. Если продукт действительно отдал неверный результат — это дефект; если сломался только locator, чиню тест.

  29. 69ИногдаLive-codingКак посчитать количество каждого символа в строке?

    Как ответить на собеседовании

    Пройти строку циклом и накапливать счётчик в Map или объекте: count.set(char, (count.get(char) ?? 0) + 1). Сначала уточни регистр, пробелы и Unicode.

    Пример из практики

    На live-coding я сначала уточню, считать ли пробелы и регистр, затем пройду строку циклом и накоплю Map. После этого проверю пустую строку и повторяющиеся символы.

  30. 70ИногдаLive-codingКак удалить дубликаты из массива?

    Как ответить на собеседовании

    Для примитивов — [...new Set(items)]. Для объектов нужен ключ или правило равенства, например Map по id; JSON.stringify как универсальное сравнение ненадёжен.

    Пример из практики

    Для массива примитивов я использую Set. Если это пользователи PomidorQA, сначала уточню критерий дубликата и соберу Map по id или email — два разных объекта могут представлять одного человека.

  31. 71ИногдаLive-codingЧем map, filter и reduce отличаются?

    Как ответить на собеседовании

    map преобразует каждый элемент, filter оставляет подходящие, reduce сворачивает коллекцию в одно значение. На интервью лучше выбрать самый читаемый метод, а не демонстрировать reduce везде.

    Пример из практики

    Список имён я преобразую через map, активных пользователей оставляю через filter, а общее число слотов считаю reduce. Если обычный цикл читается яснее, не стану насильно показывать reduce.

  32. 72ИногдаLive-codingЧто такое shallow copy объекта?

    Как ответить на собеседовании

    Копируется верхний уровень, а вложенные объекты остаются общими ссылками. Spread не является deep clone; для поддерживаемых типов можно использовать structuredClone.

    Пример из практики

    При копировании пользователя через spread вложенный объект настроек останется общей ссылкой. Если тест меняет timezone внутри settings, я сделаю явную глубокую копию поддерживаемых данных.

  33. 73ИногдаLive-codingЧто выведет код с Promise.then и setTimeout?

    Как ответить на собеседовании

    Сначала синхронный код, затем microtasks Promise, потом macrotask таймера. Не зубри порядок без объяснения: покажи стек, очередь microtasks и следующий цикл Event Loop.

    Пример из практики

    Я проговорю порядок: синхронные строки, затем Promise.then из microtask queue, потом setTimeout. На доске покажу очереди, а не просто назову готовый вывод.

  34. 74ИногдаJavaScript и TypeScriptЧто такое union type и type narrowing?

    Как ответить на собеседовании

    Union разрешает несколько вариантов типа, например string | null. Narrowing через typeof, in, discriminant или проверку на null доказывает компилятору, какой вариант доступен в ветке.

    Пример из практики

    Role пользователя я описывал бы как union guest | host, а перед использованием nullable id проверял бы его. После такой проверки TypeScript сужает тип и не требует опасного !.

  35. 75ИногдаJavaScript и TypeScriptПочему any опасен в тестовом проекте?

    Как ответить на собеседовании

    Он отключает проверку типов и позволяет ошибке пройти до runtime. Для неизвестных внешних данных лучше unknown с явной валидацией или конкретный тип после проверки схемы.

    Пример из практики

    Ответ внешнего API я сначала принимаю как unknown и валидирую. Если поставить any, опечатка вроде user.nmae спокойно дойдёт до runtime и сломает тест далеко от причины.

90 вопросов на собеседование QA Automation — Playwright и TypeScript