Вопросы по автоматизации тестирования на собеседовании
На собесе автоматизатора быстро выясняется, писал ли человек фреймворк или дописывал чужие тесты. Главный сигнал это разговор о нестабильных тестах: откуда они берутся и что с ними делают в реальном проекте.
Из чего состоит тема
Так тема разложена в тренажёре: движок ведёт прогресс по каждой подтеме отдельно и возвращает те, где вы ошибаетесь.
- Git и контроль версий13
- Стратегия автоматизации13
- CI и инструменты12
- Надёжность тестов12
- UI-автоматизация11
- Паттерны тестов11
Разборы подтем
Конспект по каждой: что это, как отвечать вслух, на чём валятся, плюс вопросы для самопроверки.
- Стратегия автоматизации тестов13 вопросов
- Автотесты в CI12 вопросов
- Паттерны автотестов11 вопросов
- Надёжность автотестов12 вопросов
- UI-автоматизация тестов11 вопросов
- Git для автоматизатора13 вопросов
Примеры вопросов с разбором
- Что описывает тестовая пирамида?A)Много быстрых unit-тестов в основании, меньше интеграционных, немного медленных e2e наверхуB)Поровну тестов на каждом уровне — по одинаковому числу unit, интеграционных и e2eC)Больше всего e2e-тестов в основании, а unit-тестов — немного на вершине пирамидыD)Порядок запуска тестов: сначала e2e, затем интеграционные, в конце модульные
показать ответ и разбор
+A)Много быстрых unit-тестов в основании, меньше интеграционных, немного медленных e2e наверху// разбор: Тестовая пирамида — рекомендация по балансу уровней автотестов. В основании — многочисленные unit-тесты: быстрые, стабильные, точно указывают на сломанный компонент. Середина — меньше интеграционных, проверяющих стыки. Вершина — немного e2e/UI-тестов через весь продукт: они медленные, хрупкие и дорогие в поддержке, поэтому их держат мало и только на критичные пользовательские пути. Форма отражает соотношение: чем выше уровень, тем дороже тест и тем их меньше.
- Зачем автотесты встраивают в CI-пайплайн?A)Чтобы гонять их на каждый коммит и пулл-реквест автоматическиB)Чтобы тесты запускались раз в месяц по расписанию и не отвлекали разработчиков чащеC)Чтобы перенести выполнение тестов с машины разработчика на сервер ради экономии его ресурсовD)Чтобы тесты писались автоматически самим пайплайном по мере появления нового кода
показать ответ и разбор
+A)Чтобы гонять их на каждый коммит и пулл-реквест автоматически// разбор: CI (непрерывная интеграция) автоматически прогоняет набор тестов на каждое изменение — коммит или пулл-реквест. Смысл в скорости и неотвратимости обратной связи: сломал что-то — узнаёшь сразу, до слияния в основную ветку и задолго до прода. Регресс отсекается там, где он дёшев (в PR у автора), а не всплывает у пользователей по кривым данным. Без CI тесты гоняют нерегулярно и вручную, и поломки копятся незамеченными. Встроенные в CI автотесты превращаются в постоянный барьер качества: красная сборка блокирует слияние, зелёная — разрешает двигаться дальше.
- Что такое паттерн Page Object?A)Класс-обёртка страницы: держит её локаторы и действия, а тест зовёт методы, не зная селекторовB)Скриншот страницы, который тест сохраняет для последующего визуального сравненияC)Отдельная страница отчёта, куда выводятся результаты прогона всех тестов набораD)Объект браузера, через который драйвер отправляет команды на удалённый сервер
показать ответ и разбор
+A)Класс-обёртка страницы: держит её локаторы и действия, а тест зовёт методы, не зная селекторов// разбор: Page Object Model — приём организации UI-тестов: каждой странице (или её части) соответствует класс, инкапсулирующий её локаторы и действия (методы вроде login(user, pass), openCart()). Тест взаимодействует со страницей только через эти методы и не знает конкретных селекторов. Так низкоуровневые детали (как найти кнопку) отделены от сценария (что проверяем). Плюсы: локатор описан в одном месте, тесты читаются как бизнес-шаги, поддержка при изменении UI сводится к правке одного класса, код переиспользуется между тестами.
- Что такое флаки-тест (flaky test)?A)Тест, который то проходит, то падает без изменений кодаB)Тест, который выполняется дольше остальных из-за большого объёма проверяемых данныхC)Тест, который падает стабильно, пока разработчик не исправит найденный дефектD)Тест, написанный без ассертов, который поэтому проходит при поведении системы
показать ответ и разбор
+A)Тест, который то проходит, то падает без изменений кода// разбор: Флаки-тест даёт непостоянный результат на одном и том же коде: запустил — прошёл, перезапустил — упал, хотя ничего не менялось. Причины — недетерминизм: гонки и асинхронность, зависимость от порядка выполнения или общих данных, время/таймзоны/рандом, внешние сервисы, сетевые задержки. Опасность флаки не в одном тесте, а в эрозии доверия: команда привыкает, что «красное — это, наверное, опять флак», перезапускает сборку не глядя — и однажды пропускает настоящий регресс, замаскированный привычным ложным падением. Поэтому флаки чинят или изолируют, а не терпят.
- Что делают инструменты вроде Selenium или Playwright?A)Программно управляют браузером: открывают страницы, находят элементы, кликают, вводят текст, читают результатB)Генерируют исходный код тестируемого веб-приложения по описанию его страницC)Заменяют браузер собственным движком, который проверяет вёрстку без реального рендерингаD)Нагружают сервер тысячами параллельных запросов для проверки его производительности
показать ответ и разбор
+A)Программно управляют браузером: открывают страницы, находят элементы, кликают, вводят текст, читают результат// разбор: Selenium и Playwright — драйверы браузера: они позволяют из кода делать то, что обычно делает человек мышью и клавиатурой. Открыть URL, найти элемент по локатору, кликнуть, ввести текст в поле, прочитать текст/атрибут, дождаться появления элемента, сделать скриншот. Так автоматизируют UI-тесты: скрипт проходит пользовательский сценарий и проверяет результат на странице. Playwright новее, с встроенными умными ожиданиями и мультибраузерностью; Selenium — давний стандарт с широкой экосистемой.
- Что делает система контроля версий вроде Git?A)Автоматически находит и исправляет ошибки в коде перед отправкой в репозиторийB)Хранит историю изменений кода и позволяет вести параллельные версии в веткахC)Компилирует проект и собирает из исходников готовый к запуску артефакт приложенияD)Разворачивает приложение на сервере после каждого сохранения файла в проекте
показать ответ и разбор
+B)Хранит историю изменений кода и позволяет вести параллельные версии в ветках// разбор: Git — распределённая система контроля версий: фиксирует изменения кода снимками (коммитами), хранит всю историю, позволяет откатываться, сравнивать версии и вести параллельную разработку в ветках. Это не компилятор и не деплой-инструмент. Автоматизатору Git нужен, чтобы версионировать автотесты, работать с командой в общих ветках и связывать прогон тестов с конкретными изменениями кода.
- Почему e2e-тестов держат мало по сравнению с unit?A)E2e-тесты дешевле и стабильнее unit, поэтому их сокращают лишь ради экономии времениB)e2e медленные, хрупкие и дорогие в поддержке, при падении плохо локализуют причинуC)E2e точнее указывают на сломанный компонент, но их ограничивают из-за размера кодаD)E2e трудно запустить в CI, поэтому их число ограничивают ручными сценариями
показать ответ и разбор
+B)e2e медленные, хрупкие и дорогие в поддержке, при падении плохо локализуют причину// разбор: e2e-тест гоняет весь стек через интерфейс: он медленный (секунды-минуты против миллисекунд у unit), хрупкий (падает от любого изменения UI, вёрстки, окружения, тайминга), дорог в поддержке и при падении лишь говорит «где-то сломалось», не указывая компонент. unit-тесты, наоборот, быстры, изолированы и точно локализуют. Поэтому основную массу проверок держат на unit, а e2e ограничивают несколькими критичными сквозными путями (регистрация, оплата), где важно проверить систему целиком. Иначе прогон становится долгим и нестабильным.
- Как обычно делят прогон smoke-тестов и полного регресса в CI?A)Smoke гоняют ночью, а полный регресс — на каждый коммит, чтобы всё покрывать сразуB)Быстрый smoke — на каждый PR; тяжёлый полный регресс — по расписанию (nightly)C)Оба набора запускают на каждый пулл-реквест, чтобы разработчик видел полную картинуD)Smoke и полный регресс — один и тот же набор, разница лишь в имени триггера сборки
показать ответ и разбор
+B)Быстрый smoke — на каждый PR; тяжёлый полный регресс — по расписанию (nightly)// разбор: Полный регрессионный набор бывает долгим (десятки минут-часы), и гонять его на каждый коммит — тормозить разработку. Поэтому прогоны разделяют по назначению. Быстрые дымовые (smoke) тесты — на каждый пулл-реквест: за минуты проверяют, что ключевое работает, и служат быстрым барьером перед слиянием. Тяжёлый полный регресс запускают реже — по расписанию (nightly) или перед релизом, — когда допустимо подождать. Так команда получает мгновенную обратную связь на каждый PR, не жертвуя полнотой: глубокое покрытие набирается регулярным ночным прогоном. Иногда добавляют средний уровень на merge в основную ветку.
- Как Page Object упрощает поддержку при изменении интерфейса?A)Он ускоряет прогон тестов, кэшируя найденные элементы страницы между разными тестамиB)Локатор описан в одном месте: при перевёрстке правят Page Object, а не десятки тестов, которые им пользуютсяC)Он позволяет запускать тесты без браузера, обращаясь к странице напрямую по APID)Он автоматически чинит сломанные локаторы, подбирая новый селектор при падении
показать ответ и разбор
+B)Локатор описан в одном месте: при перевёрстке правят Page Object, а не десятки тестов, которые им пользуются// разбор: Без Page Object селектор кнопки может быть скопирован в десятки тестов напрямую. Изменили вёрстку — придётся искать и править его во всех этих тестах, легко что-то пропустив. Page Object собирает локаторы и действия страницы в одном классе: тесты обращаются к ней через методы. При изменении интерфейса правку вносят в единственное место — сам Page Object, — и все тесты, использующие его, продолжают работать без изменений. Это резко снижает стоимость поддержки набора и число ошибок при массовых правках. Тот же принцип DRY — «одно знание в одном месте».
это 9 из 72
Ещё 63 вопросов по теме — в тренажёре, с движком повторения
Прочитать разбор и ответить самому — разные навыки. В Сеньорчике вопросы идут сессиями, а движок возвращает подтемы, где вы ошибаетесь, пока они не начнут отскакивать. Бесплатно, лимит по энергии.
Частые вопросы
Что отвечать про пирамиду тестов?
Что основание составляют быстрые модульные тесты, выше идут интеграционные, а UI-тестов должно быть мало из-за их стоимости и хрупкости. Полезно добавить, как пирамида выглядит в вашем проекте.
Как бороться с флакающими тестами?
Убирать явные ожидания по времени, изолировать данные между прогонами, чинить гонки в самом приложении и не прятать нестабильность повторными запусками.