Skip to content

Вопросы на собеседовании: Инженер автоматизации

100 реальных вопросов с образцовыми ответами и пояснениями для уровня QA Automation Engineer.

Смотреть пример резюме: Инженер автоматизации

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

Тест хорошо подходит для автоматизации, когда он повторяемый, ценный и имеет объективный результат.

  • Регрессионные и smoke-проверки запускают часто, поэтому автоматизация сокращает объём повторной ручной работы.
  • Стабильные входные данные и наблюдаемые результаты позволяют скрипту однозначно определить успех или провал.
  • Проверки с большим объемом данных выигрывают от автоматизации, потому что скрипт последовательно обрабатывает много комбинаций.
  • Одноразовую проверку меняющегося прототипа обычно дороже автоматизировать, чем выполнить вручную.

Зачем это спрашивают: Интервьюер проверяет, выбираете ли вы задачи для автоматизации по повторяемости, ценности и стабильности, а не пытаетесь автоматизировать все.

testing

Тесты, зависящие от человеческой оценки, постоянно меняющиеся или выполняемые один раз, обычно стоит оставить ручными.

  • Исследовательское тестирование опирается на наблюдения и уточняющие вопросы, которые фиксированный скрипт не может предсказать.
  • Удобство, визуальная привлекательность и качество текста требуют человеческой оценки, если нет измеримого критерия приемки.
  • Быстро меняющийся прототип делает поддержку селекторов и сценариев дорогой.
  • Редкие проверки с низким бизнес-риском могут никогда не окупить стоимость реализации и поддержки.

Зачем это спрашивают: Сильный ответ признает ограничения и стоимость поддержки автоматизации, а не считает ручное тестирование устаревшим.

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

  • Он контролирует время, случайность, тестовые данные и внешние зависимости, а не наследует меняющиеся значения.
  • Он ждет измеримого состояния, например видимости элемента, вместо паузы на 5 секунд.
  • Он создает или сбрасывает собственные данные, чтобы другой тест не изменил ожидаемый результат.
  • При 20 повторах на одной сборке детерминированный тест не должен чередовать успех и провал.

Зачем это спрашивают: Интервьюер оценивает понимание того, что надежная автоматизация требует контролируемых входных данных и наблюдаемой синхронизации.

pyramid

Пирамида тестирования рекомендует много быстрых unit-тестов, меньше integration-тестов и небольшое число end-to-end тестов.

  • Unit-тесты изолируют небольшие части логики и должны давать обратную связь за миллисекунды.
  • Integration-тесты проверяют реальные границы, например код приложения вместе с базой данных или HTTP-сервисом.
  • End-to-end тесты покрывают критичные пользовательские пути, но дороже в запуске и поддержке.
  • Такая форма сохраняет быструю обратную связь и при этом проверяет работу собранного продукта.

Зачем это спрашивают: Интервьюер проверяет, умеете ли вы балансировать скорость, изоляцию, реалистичность и поддержку разных слоев тестов.

batchconcurrency

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

  • Фикстура содержала бы известные записи, чтобы ожидаемые количества, статусы и распределение по выходным файлам вычислялись независимо от реализации.
  • Я бы разобрал JSON и проверил его схему и стабильные значения вместо сравнения исходного текста, в котором порядок свойств может меняться.
  • Я бы проверил, что выходной каталог содержит ровно два завершённых файла, затем разобрал их и сравнил обязательные строки, поля и порядок только там, где он входит в контракт.
  • Сгенерированные временные метки и ID контролировались бы или нормализовались, а временные и неожиданные файлы приводили бы к провалу теста.

Зачем это спрашивают: Интервьюер проверяет, умеете ли вы превратить содержимое, побочные эффекты и стабильные правила сравнения в наблюдаемое решение об успехе или провале автоматизации без UI.

regression

Smoke-тестирование проверяет базовую работоспособность сборки, а регрессионное широко проверяет сохранность существующего поведения.

  • Smoke-набор покрывает несколько критичных путей, например запуск, вход и одну основную операцию.
  • Он быстро выполняется после деплоя или сборки и останавливает глубокое тестирование, если продукт неработоспособен.
  • Регрессионный набор покрывает много ранее работавших функций и обычно выполняется дольше.
  • Оба набора можно автоматизировать, но smoke-набор должен оставаться достаточно малым для быстрой обратной связи.

Зачем это спрашивают: Интервьюеру нужно четкое различие по назначению, широте покрытия и времени запуска.

requirementstesting

Функциональное тестирование проверяет, что делает система, а нефункциональное проверяет качества ее работы.

  • Функциональная проверка подтверждает поведение, например создание заказа с валидными данными.
  • Нефункциональные проверки охватывают время ответа, доступность, безопасность и надежность.
  • Для обоих нужны измеримые ожидания, например статус 201 при создании или задержка p95 ниже 500 мс.
  • Функция может работать правильно, но быть неприемлемой из-за низкой скорости или недоступности.

Зачем это спрашивают: Интервьюер проверяет, отделяете ли вы бизнес-поведение от измеримых характеристик качества.

Полезная проверка подтверждает одно наблюдаемое требование с точным и стабильным ожиданием.

  • Проверяйте значимый результат, например статус 201 и ID созданной записи, а не просто отсутствие исключения.
  • Сравнивайте стабильные поля и игнорируйте сгенерированные временные метки или случайные ID, если тест их не контролирует.
  • Включайте ожидаемое и фактическое значения в сообщение об ошибке, чтобы причина была видна без локального перезапуска.
  • Избегайте проверок несвязанного текста страницы, потому что безобидное изменение текста создаст ложный сбой.

Зачем это спрашивают: Интервьюер оценивает, обнаруживают ли ваши проверки реальные дефекты без привязки к нестабильным деталям.

automationpython

Списки, словари, множества, кортежи и строки покрывают большинство базовых задач с тестовыми данными и результатами.

  • Список сохраняет порядок и может содержать последовательность тест-кейсов или полученных записей.
  • Словарь сопоставляет имена полей со значениями, что подходит для JSON с полями name и email.
  • Множество удаляет дубликаты и быстро проверяет вхождение, а кортеж представляет фиксированную группу значений.
  • Выбор типа по его поведению делает проверки понятнее, чем принудительное преобразование всех данных в строки.

Зачем это спрашивают: Интервьюер проверяет практическое владение коллекциями Python для подготовки входных данных и анализа результатов.

python

Используйте конструкцию with, чтобы Python закрыл файл даже при ошибке.

  • Открывайте текстовые файлы с явной кодировкой, например UTF-8, чтобы избежать разного декодирования на разных машинах.
  • Осознанно выбирайте режим: r читает, w заменяет содержимое, а a дописывает.
  • Читайте большие файлы построчно вместо загрузки всего файла в память.
  • Обрабатывайте ожидаемые исключения, например FileNotFoundError, и указывайте затронутый путь.

Зачем это спрашивают: Сильный ответ охватывает освобождение ресурсов, кодировку, режимы и предсказуемую обработку ошибок.

python

pathlib представляет пути объектами и делает операции с ними понятными и переносимыми.

  • Path(base) / results.xml соединяет части с правильным разделителем для операционной системы.
  • Методы exists, mkdir, read_text и glob прямо выражают типичные файловые операции.
  • resolve может получить абсолютный путь, когда он нужен инструменту.
  • Это избавляет от ручного склеивания строк, которое создает двойные или неправильные разделители.

Зачем это спрашивают: Интервьюер проверяет, умеете ли вы писать файловую автоматизацию, одинаково работающую в разных окружениях.

configpython

Читайте настройки окружения во время запуска и проверяйте обязательные переменные до старта тестов.

  • os.getenv может читать значения вроде BASE_URL, BROWSER или имени тестовой учетной записи.
  • Задавайте значения по умолчанию только для безопасных необязательных настроек, например BROWSER со значением chromium.
  • Завершайте работу с понятным сообщением при отсутствии обязательного значения, а не передавайте None глубже в код.
  • Никогда не печатайте и не коммитьте пароли, токены или API-ключи из окружения.

Зачем это спрашивают: Интервьюер оценивает базовую гигиену конфигурации и понимание того, что секретам не место в исходном коде и логах.

python

Используйте subprocess.run с явными аргументами и проверяйте результат процесса.

  • Передавайте список аргументов, например git, status, вместо одной shell-строки с недоверенными данными.
  • Установите check=True, если ненулевой код завершения должен вызвать CalledProcessError.
  • Используйте capture_output=True и text=True, когда скрипту нужны читаемые stdout и stderr.
  • Добавьте таймаут, чтобы зависший внешний инструмент не блокировал автоматизацию бесконечно.

Зачем это спрашивают: Сильный ответ показывает безопасную передачу аргументов и явную обработку кода завершения, вывода и таймаута.

concurrency

Код завершения сообщает об успехе команды: по соглашению 0 означает успех, а ненулевое значение означает ошибку.

  • Shell, CI-раннер или родительский процесс использует код, чтобы решить, запускать ли следующий шаг.
  • Разные ненулевые значения могут различать неверные входные данные, падение теста и отсутствие зависимости.
  • Перед возвратом кода ошибки скрипт должен вывести полезное сообщение в stderr.
  • Если скрыть ошибку и завершиться с кодом 0, сломанная тестовая задача может выглядеть успешной.

Зачем это спрашивают: Интервьюер проверяет, понимаете ли вы контракт между скриптами автоматизации и CI-системами.

error-handlingpython

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

  • При разборе файла результатов ловите конкретный тип, например JSONDecodeError, а не общий Exception.
  • Добавляйте контекст, например путь к файлу или имя команды, и сохраняйте исходную причину при повторном выбрасывании.
  • Используйте finally для очистки, обязательной и при успехе, и при ошибке.
  • Никогда не оставляйте пустой блок except, потому что он превращает реальный сбой в вводящий в заблуждение результат теста.

Зачем это спрашивают: Интервьюер оценивает, сохраняет ли обработка ошибок диагностическую информацию вместо сокрытия дефектов.

Надежные Bash-скрипты заключают переменные в кавычки, проверяют ошибки команд и явно задают поведение конвейеров.

  • Используйте двойные кавычки вокруг подстановок вроде $file, чтобы пробелы не разделили один путь на несколько аргументов.
  • Конвейер передает stdout одной команды в stdin следующей, например от команды-источника к grep.
  • set -e завершает shell при многих необработанных ненулевых статусах, но имеет контекстные исключения для условий, списков команд и частей конвейера, поэтому ожидаемые ошибки нужно обрабатывать явно, а set -o pipefail использовать для выявления ошибок внутри конвейера.
  • Отправляйте диагностику в stderr и возвращайте ненулевой код, если скрипт не может завершить работу.

Зачем это спрашивают: Сильный ответ выделяет кавычки и распространение ошибок как основные меры защиты в shell-автоматизации.

git

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

  • Начните от обновленной ветки main, чтобы изменение теста основывалось на актуальном коде.
  • Используйте git status и git diff, чтобы проверить, какие именно файлы и строки попадут в коммит.
  • Напишите короткое сообщение коммита о добавленном или исправленном поведении.
  • Отправьте ветку и откройте pull request, чтобы до изменения main прошли тесты и ревью.

Зачем это спрашивают: Интервьюер проверяет, умеете ли вы вносить тестовый код через дисциплинированный командный процесс.

git

Конфликт слияния возникает, когда Git не может безопасно объединить конкурирующие изменения и требуется решение человека.

  • Git отмечает в файле конфликтующие фрагменты текущей и входящей веток.
  • Прочитайте обе версии, оставьте нужное итоговое содержимое и удалите все маркеры конфликта.
  • После редактирования запустите связанные тесты, потому что синтаксически разрешенный файл все еще может быть логически неверным.
  • Добавьте исправленный файл в индекс и завершите merge или rebase согласно процессу команды.

Зачем это спрашивают: Интервьюер оценивает, считаете ли вы разрешение конфликта решением по коду с последующей проверкой.

pytest

pytest находит тесты по соглашениям об именовании, а затем собирает подходящие функции и классы.

  • По умолчанию он ищет файлы с именами test_*.py или *_test.py.
  • Он собирает функции test_* и методы test_* внутри классов Test*.
  • В тестовых классах не следует определять __init__, потому что pytest сам создает их экземпляры.
  • pytest --collect-only показывает, что будет запущено, не выполняя тесты.

Зачем это спрашивают: Интервьюер проверяет, понимаете ли вы, почему корректно выглядящий pytest-тест может попасть или не попасть в сборку.

pytestfixtures

Fixture в pytest предоставляет тестам переиспользуемые данные или ресурсы через аргументы функций.

  • Пометьте функцию-поставщик через pytest.fixture и запросите ее, указав имя параметром теста.
  • Fixture может вернуть тестовые данные, настроенный API-клиент или страницу браузера.
  • Код после yield выполняет teardown, например закрывает соединение после теста.
  • Fixtures сокращают дублирование настройки и сохраняют зависимости видимыми в сигнатуре каждого теста.

Зачем это спрашивают: Сильный ответ объясняет внедрение зависимостей, повторное использование и teardown, а не называет fixtures обычными функциями настройки.

Закрытые вопросы

  • 21

    Что контролируют области видимости fixtures в pytest?

    pytestfixtures
  • 22

    Что делает pytest.mark.parametrize?

    pytestparametrize
  • 23

    Для чего используются markers в pytest?

    pytest
  • 24

    Как работают обычные assertions в pytest?

    pytest
  • 25

    Как проверить ожидаемое исключение с помощью pytest?

    pytesterror-handling
  • 26

    Что такое mocking в unit-тесте pytest?

    unitmockingpytest
  • 27

    Как monkeypatch и tmp_path помогают в тестах pytest?

    pytest
  • 28

    Что делает Selenium WebDriver?

    selenium
  • 29

    Что такое DOM и почему браузерная автоматизация использует его?

    dom
  • 30

    Что делает браузерный локатор надежным?

    locators
  • 31

    Когда использовать CSS-селектор, а когда XPath?

    csslocators
  • 32

    Что такое explicit wait в Selenium?

    selenium
  • 33

    Почему explicit waits обычно лучше фиксированных пауз и широких implicit waits?

  • 34

    Какие состояния элемента должен различать браузерный тест?

  • 35

    Как организовать настройку и очистку браузера в тестах?

    testing
  • 36

    Как auto-waiting в Playwright помогает браузерным тестам?

    playwright
  • 37

    Что такое browser context в Playwright?

    playwright
  • 38

    Какие стратегии локаторов Playwright стоит предпочитать junior-инженеру автоматизации?

    playwrightlocators
  • 39

    Что такое Page Object Model?

    pom
  • 40

    Когда и как браузерным тестам сохранять скриншоты?

    testing
  • 41

    Что такое REST API с точки зрения автоматизации тестирования?

    restautomation
  • 42

    Что означают основные HTTP-методы в API-тестах?

    httptesting
  • 43

    Какие HTTP-коды статуса должен знать junior API-тестировщик?

    httpstatus-codes
  • 44

    Что должна проверять валидация JSON Schema в API-тесте?

    schemaapivalidation
  • 45

    Как токен-аутентификация представлена в базовом API-тесте?

    authtokensapi
  • 46

    Что должна включать базовая автоматизированная проверка ответа API?

    api
  • 47

    Как использовать SQL для проверки результата автоматизированного теста?

    sql
  • 48

    В чем разница между Docker image и container?

    dockercontainers
  • 49

    Зачем запускать автоматизированные тесты в Docker?

    docker
  • 50

    Что такое continuous integration и какое место в нем занимают автоматизированные тесты?

    ci-cd
  • 51

    Тест входа ожидает ошибку после трёх неверных паролей, но учётная запись блокируется, и следующие тесты падают. Как это исправить?

    passwordstesting
  • 52

    Как автоматизировать форму регистрации, где кнопка Submit становится доступна только после корректного заполнения всех полей?

    forms
  • 53

    Браузерный тест нажимает Export и должен получить CSV-файл. Что вы будете проверять?

  • 54

    Как протестировать загрузку изображения профиля, которая принимает PNG размером до 2 МБ?

  • 55

    После нажатия Terms открывается новая вкладка, но тест продолжает искать элементы в исходной. Как это обработать?

  • 56

    Кнопка Delete открывает системный диалог подтверждения браузера. Как автоматизировать Cancel и Confirm?

  • 57

    Поле банковской карты находится внутри iframe, и обычный локатор его не видит. Что вы сделаете?

    locators
  • 58

    Как переиспользовать авторизованную браузерную сессию, не выполняя вход через UI перед каждым тестом?

    sessionslogging
  • 59

    Локатор Save находит три кнопки, и тест нажимает не ту. Как его исправить?

    locators
  • 60

    Таблица результатов появляется через 1-8 секунд после Search, а sleep на две секунды работает нестабильно. Какое ожидание использовать?

    flaky
  • 61

    Тест находит строку, обновляет таблицу, а затем получает stale element error при клике по этой строке. Почему и как это исправить?

  • 62

    Два браузерных теста проходят отдельно, но падают вместе, потому что один оставляет consent cookie и открытое модальное окно. Как их изолировать?

    cookiestesting
  • 63

    Как автоматизировать REST CRUD-сценарий для нового клиента?

    rest
  • 64

    Эндпоинт возвращает большой JSON-объект заказа. Как проверить ответ, не сравнивая каждое значение?

    validationendpoints
  • 65

    Какие автоматизированные API-сценарии вы напишете для эндпоинта, защищённого Bearer-токеном?

    endpointstokens
  • 66

    Как протестировать пагинированный эндпоинт, который возвращает по 25 элементов на страницу?

    endpoints
  • 67

    API создаёт счета из JSON. Какие негативные варианты payload вы автоматизируете первыми?

    api
  • 68

    Как протестировать обновление и удаление для ID ресурса, которого не существует?

  • 69

    Эндпоинт пользователей поддерживает фильтры status и created_after. Как их протестировать?

    endpoints
  • 70

    Клиент отправил Create payment, не дождался ответа и повторил запрос. Какое идемпотентное поведение должен проверить тест?

    idempotency
  • 71

    Как проверить, что API отклоняет неподдерживаемый HTTP-метод?

    http
  • 72

    API иногда возвращает 429 Too Many Requests. Как junior-инженеру обрабатывать это в автоматизированных тестах?

    api
  • 73

    Несколько тестов создают пользователей с одинаковым email и конфликтуют. Как генерировать безопасные тестовые данные?

    test-data
  • 74

    Перед тестом нужен заказ с двумя позициями. Как подготовить его через SQL?

    sql
  • 75

    Как гарантировать очистку тестовых данных, если одна из проверок падает в середине теста?

    test-data
  • 76

    Когда rollback транзакции полезен в тестах с базой данных?

    databasetransactionstesting
  • 77

    Четыре CI worker параллельно запускают одинаковые тесты. Как изолировать их данные в базе?

    databasetesting
  • 78

    UI-тест сообщает, что заказ отменён. Какой SQL-запрос использовать для проверки сохранённого состояния?

    sql
  • 79

    Тест проходит локально, но падает в GitHub Actions, потому что не найден файл фикстуры. Что вы проверите?

    fixturesci-cd
  • 80

    Тестовая команда сообщает об ошибках, но CI job остаётся зелёной. В чём вероятная причина?

  • 81

    Какие артефакты собирать при падении браузерного теста в CI?

    debuggingartifacts
  • 82

    Как передать base URL и тестовый пароль в CI job?

    passwords
  • 83

    Браузерные тесты работают в видимом браузере, но падают в headless CI. Как отлаживать различие?

    testing
  • 84

    Нестабильному тесту настроили пять повторов, и обычно он проходит с четвёртой попытки. Это приемлемо?

    flakyconfig
  • 85

    Как разделить 20-минутный набор тестов в CI, чтобы pull request быстро получал полезный результат?

    feedbackcode-review
  • 86

    Тесты начали падать только после увеличения параллельности CI с одного до четырёх worker. Что проверить первым?

    testing
  • 87

    После обновления пакета CI job внезапно падает на установке зависимостей. Как расследовать проблему?

    dependencies
  • 88

    CI job достигает 30-минутного timeout без понятной ошибки. Что добавить для диагностики?

    resilience
  • 89

    Какая минимальная настройка нужна для запуска простого Appium-теста на Android-эмуляторе?

    mobile
  • 90

    Какой локатор лучше выбрать для мобильной кнопки Login в Appium?

    mobilelocators
  • 91

    Appium-тест видит нативную оболочку приложения, но не находит поля внутри встроенной веб-страницы. Что делать?

    mobile
  • 92

    Мобильный тест проходит на чистом эмуляторе, но падает при втором запуске, потому что onboarding уже пропущен. Как управлять состоянием устройства?

    onboarding
  • 93

    Как автоматизировать мобильный тест, которому нужно разрешение камеры?

  • 94

    Экранная клавиатура закрывает мобильный элемент, поэтому нажатие Save падает. Как сделать тест стабильным?

  • 95

    Python-автоматизация перемещает входящие счета из одной папки в другую. Как безопасно обрабатывать файлы?

    concurrencypython
  • 96

    Как запускать скрипт отчёта каждый час и не допускать пересечения двух медленных запусков?

  • 97

    После перезапуска автоматизация процесса дважды импортирует один ежедневный CSV. Как предотвратить дубликаты?

    concurrency
  • 98

    Скрипт мониторинга обнаружил три подряд ошибки эндпоинта. Как безопасно отправить webhook-оповещение?

    monitoringalertingendpoints
  • 99

    Какие exit codes и логи должна предоставлять консольная автоматизация?

  • 100

    Новый RPA-скрипт вводит заказы в портал поставщика, но портал часто меняется. Какой ручной fallback подготовить?

    procurement