Вопросы на собеседовании: QA-инженер
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Middle.
Смотреть пример резюме: QA-инженер →Тренировка флешкарточками
Интервальное повторение · Hunter Pass
Вопросы
Неявные и явные ожидания работают на разных уровнях, поэтому я их не смешиваю.
- Неявное ожидание глобально опрашивает каждый поиск элемента, а явное опрашивает одно условие в конкретной точке.
- При смешивании суммарное время становится непредсказуемым из-за взаимодействия опросов драйвера и явного условия.
- Я ставлю неявное ожидание в ноль и использую явные условия, которые показывают, чего ждёт тест.
Зачем это спрашивают: Интервьюер проверяет, понимает ли кандидат механику ожиданий достаточно глубоко, чтобы объяснить баг взаимодействия, а не пересказать определения.
Playwright автоматически ждёт готовности элемента к действию, но готовность приложения может требовать отдельного сигнала.
- Перед кликом он ждёт, пока элемент будет в DOM, видим, стабилен, доступен и не перекрыт.
- Этого мало, если данные ещё загружаются, отложенное действие не сработало или проверка зависит от фонового запроса.
- Я жду реальный сигнал через проверку, конкретный ответ сети или состояние интерфейса, появляющееся после готовности данных.
Зачем это спрашивают: Знание границы авто-ожиданий и переход к синхронизации на уровне ответов и проверок отделяют реальных пользователей Playwright от читателей списка фич.
Я выбираю стабильные и осмысленные локаторы, а длинные XPath-цепочки оставляю только для неизменяемого легаси-DOM.
- Первый выбор это согласованный тестовый атрибут вроде data-testid, устойчивый к изменениям стилей и текста.
- Затем идут роль и доступное имя, после них стабильные ID или короткие CSS-селекторы.
- Длинные позиционные XPath-цепочки описывают вёрстку вместо смысла и ломаются при обычном рефакторинге DOM.
Зачем это спрашивают: Иерархия с testid во главе плюс сотрудничество с разработчиками по атрибутам показывают, что кандидат считает стабильность локаторов задачей дизайна, а не везения.
Page Object должен описывать страницу и действия пользователя, но не владеть ожиданиями и сценарием теста.
- В нём находятся локаторы страницы, осмысленные действия и навигация с возвратом следующего Page Object.
- Проверки, выбор тестовых данных и логика сценария остаются в тесте, чтобы его цель была видна.
- Я держу объекты компактными и делю большие страницы на компоненты вроде шапки, таблицы и модального окна.
Зачем это спрашивают: Проверки вне page object-ов и компонентная декомпозиция дают два правила сопровождаемости, показывающие, что кандидат содержал настоящий POM-набор.
Сложные предусловия я создаю через самый быстрый надёжный путь без UI, оставляя интерфейс для проверяемого поведения.
- Вызовы API или фабрика данных через сервисный слой могут подготовить подписку и прошлые заказы до теста.
- Подготовка через регистрацию и оформление заказа замедляет тесты и позволяет одному раннему сбою сломать много несвязанных кейсов.
- Прямые вставки в базу я использую только при отсутствии API, поскольку они обходят бизнес-правила и могут создать невозможное состояние.
Зачем это спрашивают: Сеять через API, тестировать через UI и есть ключевой принцип автоматизации middle-уровня, а осторожность с сырыми вставками в базу показывает понимание причин.
Selenium, Cypress и Playwright я выбираю по архитектуре, экосистеме и ограничениям проекта.
- Selenium работает через WebDriver и широко поддерживает языки, браузеры и гриды, но синхронизацией в основном управляет команда.
- Cypress работает рядом с приложением в браузере и удобен для отладки и ожиданий, но исторически имел ограничения вкладок, доменов и браузеров.
- Playwright даёт автоожидания, перехват сети, трейсы и параллельность, а Selenium лучше подходит к существующей Java-экосистеме или гриду.
Зачем это спрашивают: Привязка архитектуры к практическим следствиям, отладке, синхронизации, покрытию браузеров, вместо повторения маркетинга и есть то, чего хочет интервьюер.
Я жду положительный признак готовности приложения, а не просто исчезновение индикатора загрузки.
- Надёжным сигналом служат видимые данные, конкретный питающий экран ответ или состояние вроде data-loaded.
- Исчезновение спиннера ненадёжно, поскольку между цепочками запросов может возникнуть ложный момент готовности.
- Фиксированные паузы ещё хуже: на медленном окружении их не хватает, а на быстром они тратят время.
Зачем это спрашивают: Ожидание позитивного сигнала против отсутствия спиннера дает тонкое, но выстраданное различие, определяющее инженеров, чинивших флаки из-за лоадеров.
StaleElementReferenceException означает, что сохранённый элемент ссылается на заменённый или отсоединённый DOM-узел.
- Изменения состояния во фреймворках вроде React часто заменяют поддеревья и делают кешированные ссылки устаревшими.
- Правильный фикс ищет элемент в момент взаимодействия и повторяет поиск при устаревании, а не кеширует ссылку между действиями.
- Локаторы Playwright разрешаются заново для каждого действия, и обёртки Selenium могут следовать тому же подходу.
Зачем это спрашивают: Объяснение перерисовки как первопричины и переразрешения локаторов как дизайнерского фикса показывает понимание глубже, чем ловить исключение и слепо ретраить.
Независимые тесты дают понятные падения, поддерживают параллельный запуск и выполняются по отдельности.
- Зависимости вызывают каскадные сбои и превращают одну регрессию во множество ложных красных тестов.
- Каждый тест сам создаёт данные с уникальными идентификаторами и не полагается на предыдущий тест или общий аккаунт.
- Случайный порядок выполнения в CI выявляет скрытые связи до того, как они станут привычной практикой.
Зачем это спрашивают: Называние параллельности и отлаживаемости как ставок плюс случайный порядок как принуждение показывают системное мышление об архитектуре набора.
Я переиспользую состояние авторизации по ролям, чтобы логин не занимал основное время E2E-набора.
- Я вхожу через API или один раз через UI, сохраняю cookies либо storage state и передаю их в контекст теста.
- Сам UI-сценарий входа остаётся в небольшом отдельном наборе и не повторяется в каждом тесте.
- Я учитываю истечение токена и выдаю параллельным воркерам разных пользователей, чтобы они не мешали друг другу.
Зачем это спрашивают: Переиспользование сессии с выделенным покрытием логина и поаккаунтные воркеры составляют стандартный зрелый паттерн, и пропуск любой его ноги даёт реальные проблемы.
Iframe и shadow DOM требуют явно учитывать разные границы поиска элементов.
- Selenium переключается в iframe и обратно, а Playwright обращается к нему через frameLocator.
- Открытые shadow root доступны современным CSS-запросам Playwright и Selenium, но для закрытых нужен тестовый хук от разработчиков.
- Работу с фреймами и shadow root я прячу в Page Object, чтобы код сценария оставался понятным.
Зачем это спрашивают: Знание механики переключения контекста и различия открытых и закрытых shadow root-ов указывает на живой опыт с современными компонентными UI.
Файловые сценарии я автоматизирую через API браузера и проверяю сам артефакт, а не только видимое действие.
- Для загрузки передаю небольшую фикстуру из репозитория в input через setInputFiles или sendKeys, а выбор файла перехватываю лишь для кастомных виджетов.
- Для скачивания отключаю запрос подтверждения, жду событие загрузки и проверяю имя и размер файла.
- Форматы вроде CSV или PDF я разбираю и проверяю по содержимому, поскольку появление файла не доказывает его корректность.
Зачем это спрашивают: Обход системных диалогов через input-элемент и проверка содержимого скачанного, а не только существования, и есть прощупываемые практические детали.
Каждое падение UI-теста в CI должно автоматически сохранять достаточно данных для удалённой диагностики.
- Я собираю скриншот падения, видео прогона, консоль браузера, сетевые логи и по возможности трейс Playwright.
- Трейс или видео показывают состояние UI, консоль выявляет клиентские ошибки, а сеть отделяет сбой интерфейса от ошибки бэкенда.
- Автоматический сбор артефактов обязателен, иначе падения только в CI приходится долго воспроизводить локально.
Зачем это спрашивают: Последовательность триажа и использование артефактов для разделения фронтовых и бэкендных причин показывают, что кандидат реально отлаживает падения CI, а не перезапускает их.
Для каждого риска я выбираю самый дешёвый уровень тестирования, который надёжно его обнаружит.
- Юнит- и интеграционные тесты покрывают бизнес-логику и границы, а контрактные и API-тесты проверяют валидацию, права и ошибки сервиса.
- На уровне E2E остаются несколько путей, доказывающих, что части вместе завершают критичные процессы вроде оформления и оплаты.
- Так не возникает перевёрнутая пирамида из медленных UI-тестов, повторяющих миллисекундные проверки нижних уровней.
Зачем это спрашивают: Вопрос про самый дешёвый ловящий слой даёт операционную форму пирамиды и показывает, что кандидат применяет её пофичево, а не рисует треугольник.
Я автоматизирую сценарии, где повторяемость и риск регрессии оправдывают стоимость разработки и поддержки.
- Основные успешные пути, границы и права на уровне API, а также проверки каждого релиза обычно стоит автоматизировать.
- Одноразовое исследование, быстро меняющийся UI и субъективную оценку внешнего вида часто дешевле и лучше проверять вручную.
- Я объясняю, что автоматизация является сопровождаемым кодом, а исследовательское тестирование остаётся полноценной частью плана.
Зачем это спрашивают: Отбор по ROI с явным местом для исследовательской работы отличает инженеров от максималистов автоматизации, тонущих в сопровождении.
Жёсткие или мягкие проверки я выбираю по тому, сохраняют ли смысл следующие шаги после сбоя.
- Жёсткая проверка сразу останавливает тест, когда дальнейшие действия зависят от проваленного предусловия.
- Мягкие проверки собирают независимые расхождения, например по нескольким полям формы или колонкам отчёта, и выводят их вместе.
- Если фреймворк требует финальный assert-all, я обеспечиваю его через фикстуру, чтобы забытый вызов не дал ложный успех.
Зачем это спрашивают: Подбор стиля проверок под зависимость шагов плюс знание ловушки забытого assert-all отражают реальный опыт сопровождения фреймворка.
Единый механизм конфигурации на основе профилей позволяет запускать один набор без правок на разных окружениях.
- Один переключатель выбирает базовые URL, ссылки на учётные данные, фичефлаги и таймауты из переменных окружения или файлов профиля.
- CI получает секреты из защищённого хранилища, а локальный запуск использует игнорируемый env-файл.
- Тесты обращаются к логическим именам вроде администратора или платёжной песочницы и не содержат значений конкретного окружения.
Зачем это спрашивают: Косвенность через логические имена и гигиена секретов показывают, что кандидат гонял один набор против многих окружений, а не одного.
Визуальное регрессионное тестирование сравнивает снимки интерфейса с утверждёнными эталонами и требует осознанного охвата.
- Инструменты используют попиксельное или визуальное сравнение, пороги и исключённые зоны для динамического содержимого перед ручным ревью.
- Подход окупается для стабильных дизайн-систем, библиотек компонентов и важных страниц, где случайные изменения CSS критичны.
- Я стабилизирую данные и анимации, избегаю изменчивых полных страниц и проверяю обновления эталонов в PR.
Зачем это спрашивают: Сужение до стабильных поверхностей и управление чурном базлайнов показывают, что кандидат гонял визуальное тестирование достаточно долго, чтобы увидеть его режим отказа.
Матрицу мобильного покрытия я строю по типу продукта и реальным рискам использования, а не по всем возможным устройствам.
- Адаптивный веб широко проверяется эмуляцией браузера, а небольшой прогон на реальных устройствах покрывает сенсорный ввод и особенности рендеринга.
- Нативные и гибридные приложения в основном тестируются на эмуляторах, а перед релизом на популярных реальных устройствах из фермы.
- Реальные устройства покрывают пробелы вроде производительности старого железа, диалогов разрешений и прерываний звонками.
Зачем это спрашивают: Разделение стратегий адаптивного веба и натива с размером матрицы реальных устройств от аналитики показывает прагматичный мобильный опыт.
Широкое функциональное покрытие я запускаю в одном основном браузере, а кросс-браузерные проверки направляю на реальные различия движков.
- Полный набор обычно работает в Chromium, поскольку большинство функциональных дефектов не зависит от браузера.
- Критичные пути и чувствительные к браузеру случаи рендеринга, ввода или API дополнительно идут в Firefox и WebKit.
- Матрицу определяет продуктовая аналитика, а браузеры с малой долей получают задокументированный смоук или не покрываются.
Зачем это спрашивают: Концентрация кросс-браузерных прогонов там, где реально живёт браузер-специфичный риск, с опорой на данные использования и есть проверяемое суждение.
Закрытые вопросы
- 21
Где ретраи допустимы во фреймворке, а где они начинают прятать баги?
resilience - 22
Ваш набор из 400 UI-тестов идёт 3 часа. Какие варианты получить обратную связь быстрее 20 минут?
feedbacktesting - 23
API-тест получил ответ 200. Что ещё вы проверяете, прежде чем считать эндпоинт протестированным?
endpoints - 24
Объясните consumer-driven контрактное тестирование с Pact и какую проблему оно решает, которую не решают E2E-интеграционные тесты.
integratione2econtract - 25
Как вы используете валидацию JSON-схем в API-тестах и от чего она защищает?
schemaapivalidation - 26
Как вы тестируете авторизацию в API за пределами проверки, что валидный токен работает?
authtokensapi - 27
Как вы тестируете идемпотентность API и почему она важна для реальных клиентов?
idempotency - 28
Что включает тщательный негативный прогон для API-эндпоинта?
endpointstesting - 29
Коллекции Postman против кодовых API-тестов на pytest или RestAssured: когда каждый инструмент уместен?
pytestapi - 30
Когда вы заглушаете внешнюю зависимость чем-то вроде WireMock, а когда тестируете против настоящей?
schedulingdependencies - 31
Как тестировать списочные эндпоинты с пагинацией, фильтрацией и сортировкой, чтобы комбинации не взорвались?
endpointspaginationalgorithms - 32
Команда выпускает API v2, а v1 должен продолжать работать. Как выглядит ваше тестирование обратной совместимости?
api - 33
Как вы тестируете асинхронные флоу, например API, принимающий задачу и позже стреляющий вебхуком?
webhooksasync - 34
Как бы вы проверили, что рейт-лимитинг API работает по спецификации?
rate-limiting - 35
Тест проверяет данные сразу после асинхронной записи и падает изредка, потому что система eventually consistent. Как чинить тест правильно?
system-designconsistencyasync - 36
Когда и как вы проверяете побочные эффекты API напрямую в базе данных?
databaseapi - 37
Сравните фикстуры, фабрики и копии продовых данных как стратегии тестовых данных. Что вы используете где?
fixturestest-data - 38
Несколько команд делят один стейджинг, и тесты постоянно сталкиваются. Как изолировать тестовые данные, не деля окружение?
test-data - 39
Очистка после тестов: удаление в teardown, очистка перед тестом или одноразовые окружения? Разберите трейдоффы.
testing - 40
Стейджинг ведёт себя иначе, чем прод, и баги продолжают проскальзывать в зазор. Как вы атакуете паритет окружений?
- 41
Продукт зависит от платёжного провайдера. Как вы тестируете платёжные флоу между песочницей и тест-дублёрами?
- 42
Вам передают копию продовой базы для тестирования. Что должно с ней произойти до того, как команда сможет ею пользоваться?
databasetesting - 43
Тестируемая фича зависит от времени: триалы истекают через 14 дней, отчёты закрываются в конце месяца. Как тестировать без ожидания?
testing - 44
Приведите примеры SQL-проверок, которые вы гоняете и которые ловят баги, невидимые через UI и API.
sqlapi - 45
Релиз включает миграцию схемы с трансформацией существующих данных. Как вы тестируете саму миграцию?
schemamigrations - 46
Как вы тестируете почтовые и нотификационные флоу автоматизированно?
- 47
Какие наборы тестов бегут на каких стадиях пайплайна в вашей идеальной схеме и какой бюджет времени получает каждая?
ci-cd - 48
Что должно быть правдой о ваших тестах, чтобы параллельный запуск в CI реально заработал?
testing - 49
Как сделать CI-отчёты по тестам действительно полезными команде, за пределами счётчика прошло-упало?
- 50
Какие проверки должны блокировать мердж, а какие нет? Как вы аргументируете это команде?
- 51
Как вы запускаете браузеры и инфраструктурные зависимости для тестов в CI-контейнерах?
containersdependenciestesting - 52
Полная регрессия на каждый коммит слишком медленная, но пропускать тесты рискованно. Как вы отбираете тесты под изменение?
testing - 53
Как должны обрабатываться тестовые креды и секреты в CI-пайплайнах?
ci-cdsecrets - 54
Пайплайн красный примерно треть дней из-за проблем окружения, и команда начала его игнорировать. Как чинить системно?
system-designci-cd - 55
Какие метрики говорят вам, что усилия по автоматизации действительно здоровы?
monitoring - 56
Ночной прогон дал 42 падения. Проведите меня через ваш утренний триаж.
concurrency - 57
Нагрузочное, стрессовое, soak- и spike-тестирование: на что отвечает каждое и какое команды пропускают себе во вред?
testing - 58
Как построить реалистичную модель нагрузки для теста вместо долбёжки одного эндпоинта?
load-testingendpoints - 59
Вы пишете сценарий на k6 или JMeter. Что параметризуете и какие критерии зачёта ставите?
load-testing - 60
Почему вы репортите p95 и p99 латентности вместо средних и о чём говорит растущий разрыв между медианой и p99?
latency - 61
Назовите классические ошибки, обесценивающие результаты перф-тестов.
ownershipperformanceperformance-testing - 62
Во время нагрузочного теста латентность держится ровно с ростом нагрузки, а после определённой пропускной способности взрывается. Как вы работаете с этим результатом?
latencythroughputload-testing - 63
Как сделать перф-тестирование непрерывным, а не разовым упражнением перед большими релизами?
performance-testingperformance - 64
Что должно быть правдой об окружении и данных, прежде чем вы поверите числам перф-теста?
performance-testing - 65
Каковы, по вашему опыту, самые частые первопричины флакающих UI-тестов?
flaky - 66
Опишите ваш сквозной процесс работы с тестом, флакающим в CI, от обнаружения до закрытия.
closuresconcurrencye2e - 67
Тест падает в CI в 2 часа ночи, но локально проходит каждый раз. Какие различия вы расследуете?
- 68
Почему фиксированные sleep-ы остаются худшим инструментом синхронизации и что вы используете вместо них в каждой ситуации?
- 69
Как вы обнаруживаете и чините тесты, зависящие от порядка?
testing - 70
Ваши тесты стабильны, но общий стейджинг, против которого они бегут, нет. Что вы делаете?
testing - 71
Тест прошёл с ретрая, и все пошли дальше. Почему вам с этим некомфортно и что вы делаете?
resilience - 72
Как сделать флакучесть видимой и владеемой на уровне команды, а не личной борьбой QA?
- 73
Что отличает баг-репорт, который чинят быстро, от того, что возвращается с вопросами?
bug-reporting - 74
Severity против priority: объясните разницу на примерах, где они указывают в противоположные стороны.
severity-priority - 75
На триаж-встрече продукт хочет всё сейчас, а разработчики всё потом. В чём ваша роль между ними?
- 76
Разработчик возвращает ваш баг с пометкой не воспроизводится. Каков ваш следующий ход?
debugging - 77
Пользователи репортят перемежающийся баг в проде, который вы не можете воспроизвести ни в одном тестовом окружении. Как расследуете?
debuggingtest-environments - 78
Вам дают две недели на тестирование новой фичи. Как вы строите тест-стратегию и что конкретно означает risk-based?
test-strategy - 79
Компания переходит с месячных релизов на недельные. Ваш регрессионный подход должен измениться. Что вы делаете?
- 80
Как вы проводите исследовательское тестирование, чтобы оно давало ценность за пределами случайного кликанья?
exploratory - 81
Команда возит всё за фичефлагами. Какие новые тестовые обязательства это создаёт?
feature-flags - 82
День релиза. Что именно вы приносите на разговор go/no-go?
governance - 83
Продукт спрашивает, полностью ли протестирована фича. Покрытие кода говорит 85 процентов. Почему это не ответ и чем вы пользуетесь вместо него?
coverage - 84
Критический продовый баг требует хотфикса в течение часа. Как выглядит ваша верификация в таком ограничении?
- 85
Число на дашборде под вопросом: отчёт говорит одно, стейкхолдеры верят в другое. Как вы верифицируете отчёт или выход ETL?
stakeholder-managementcommunicationetl - 86
Как вы тестируете, что многошаговая операция действительно транзакционна, например создание заказа с записью в три таблицы?
transactions - 87
Продукт выходит на шести языках. Что покрывает ваше локализационное тестирование, кроме наличия переведённых строк?
testing - 88
Как выглядит реалистичный подход к тестированию доступности для команды без выделенного специалиста по accessibility?
a11ytesting - 89
Какие security-ориентированные проверки вы гоняете как QA-инженер, не будучи специалистом по безопасности?
- 90
Приложение агрессивно кеширует. На какие кеш-баги вы охотитесь и как?
caching - 91
Разработчик настаивает, что баг, который вы считаете критическим, минорный, и в этом спринте чинить его не будет. Как действуете?
agile - 92
За три часа до релизной отсечки вы находите серьёзный баг в ключевом флоу. Проведите меня через ваши действия.
- 93
Разработчики жалуются, что QA остаётся узким местом, замедляющим релизы. Как отвечаете?
tracking - 94
Когда начинается ваша тестовая работа над фичей и как выглядит shift-left в вашей реальной практике?
shift-left - 95
Пропущенный вами баг дошёл до прода и вызвал жалобы клиентов. Как вы работаете с последствиями?
soft-skills - 96
Две фичи приходят на тестирование в один день, обе помечены срочными, и продовая проблема тоже требует верификации. Как приоритизируете?
testing - 97
Разработчики пишут юнит-тесты, но считают E2E-набор проблемой QA, и он гниёт. Как вы это меняете?
unite2e - 98
Вы считаете, что команде нужно вложить два спринта в тестовую инфраструктуру, а продукт хочет фичи. Как строите кейс?
agile - 99
Команда рассматривает миграцию с Selenium на Playwright. Как вы оцениваете и снижаете риски такой миграции?
seleniumplaywrightmigrations - 100
Вы приходите в команду QA-инженером на незнакомый продукт. Как выглядят ваши первые три недели?
joins