Назад к материалам

Видео + статья / Собеседования

Собеседование AQA Engineer в 1xBet: Python, Selenium и тестовая пирамида

Разбираем вопросы собеседования AQA Engineer в 1xBet: типизация и декораторы Python, SOLID, тестовая пирамида, Selenium, локаторы и Kubernetes.

Компания
1xBet
Опубликовано
Обновлено
Видео вышло
Видео
9:31
Текст
8 минут

Если ролик не загружается, выберите другую площадку.

Смотреть на

Перед нами техническое собеседование AQA Engineer в 1xBet. Личные данные участников нам не нужны: важнее вопросы по Python, проектированию тестов, Selenium и инфраструктуре. Разберём, что именно проверял интервьюер и как дать точный ответ без лишней теории.

Как аннотации типов и декораторы работают в Python?

Короткий ответ: Python остаётся динамически типизированным языком. Аннотации описывают ожидаемые типы для разработчика, IDE и статического анализатора, но интерпретатор обычно не проверяет их автоматически.

Например, запись def total(price: float) -> float не запрещает передать строку. Ошибку заранее найдёт mypy или другой анализатор, если он включён в процесс разработки. Это точнее, чем говорить, что типизация «включается» во время запуска. Подробное назначение аннотаций описано в официальной документации Python.

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

Пример кодаPython
from functools import wraps


def log_call(function):
    # wraps сохраняет имя и документацию исходной функции.
    @wraps(function)
    def wrapper(*args, **kwargs):
        # Дополнительное действие выполняется перед основным вызовом.
        print(f"Запускаем {function.__name__}")
        return function(*args, **kwargs)

    # Декоратор возвращает новую функцию-обёртку.
    return wrapper


@log_call
def open_page(url: str) -> str:
    # В реальном тесте здесь мог бы быть переход браузера по адресу.
    return f"Открыта страница {url}"


print(open_page("https://example.com"))

Как объяснить SOLID, fluent interface и проблему наследования?

Короткий ответ: SOLID — пять принципов, которые помогают уменьшить связанность кода и упростить изменения. На интервью лучше не только расшифровать буквы, но и показать один рабочий пример.

Для тестового фреймворка особенно нагляден принцип единственной ответственности: Page Object описывает действия на странице, а проверка бизнес-сценария остаётся в тесте. Если один класс одновременно ищет элементы, готовит данные, отправляет API-запросы и формирует отчёт, его трудно менять и тестировать.

Fluent interface возвращает текущий или следующий объект, поэтому вызовы можно соединять в цепочку: login_page.fill_email(...).fill_password(...).submit(). Цепочка должна оставаться понятной, иначе удобный синтаксис скрывает сложное состояние.

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

Зачем нужна пирамида тестирования?

Короткий ответ: в основании находятся многочисленные быстрые проверки небольших компонентов, выше — интеграционные тесты, а на вершине — небольшой набор дорогих end-to-end сценариев.

Только unit-тестов недостаточно: они не покажут ошибку в контракте между сервисами или реальной базе данных. Только системные тесты тоже не решают задачу: они медленнее, сложнее в диагностике и чаще зависят от окружения. Практическая пирамида — это баланс обратной связи, стоимости поддержки и уверенности в продукте. Такой подход подробно разобран в материале Мартина Фаулера о тестовой пирамиде.

Уровень Что проверяем Сильная сторона
Компонентный Функцию, класс или небольшой модуль Быстрая и точная обратная связь
Интеграционный Взаимодействие сервиса с БД, очередью или API Ошибки на границах систем
End-to-end Критичный путь пользователя целиком Уверенность в рабочем сценарии

Классическая пирамида автоматизированных тестов

Чем выше уровень проверки, тем меньше таких тестов обычно нужно: они медленнее и дороже в поддержке. Источник: The Practical Test Pyramid.

Какие локаторы Selenium выбирать?

Короткий ответ: сначала ищем уникальный и устойчивый идентификатор: id, name или специальный атрибут вроде data-testid. CSS и XPath используем, когда более простой опоры нет.

Длинный XPath, который повторяет всю структуру DOM, ломается после небольшой правки вёрстки. Слишком общий CSS-селектор может найти несколько элементов. Хороший локатор описывает смысл элемента и остаётся стабильным при визуальных изменениях. Selenium рекомендует уникальные ID, а при их отсутствии — компактные CSS-селекторы; рекомендации собраны в руководстве по локаторам.

Почему WebDriver не находит элемент и как это исправлять?

Короткий ответ: элемент может ещё не появиться, быть невидимым, перекрытым или уже заменённым новой версией DOM. Сначала определяем состояние страницы, затем ждём конкретное условие.

Жёсткий sleep(5) либо замедляет тест, либо всё равно не успевает на медленном окружении. Явное ожидание проверяет нужное состояние: элемент появился, стал кликабельным или исчез индикатор загрузки. Готовые условия перечислены в документации Selenium.

StaleElementReferenceException означает, что сохранённая ссылка относится к старому элементу: страница перерисовала DOM. Обычно элемент нужно найти заново после ожидаемого изменения, а не бесконечно повторять клик. Причины типовых ошибок разобраны в руководстве WebDriver.

Что должен знать AQA Engineer о Kubernetes?

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

На собеседовании AQA-инженеру полезно связать термины с тестированием. Pod содержит один или несколько тесно связанных контейнеров, Deployment управляет их версиями и количеством, Service даёт стабильную точку доступа. Эти сущности помогают поднять тестовое окружение, проверить новую сборку и собрать диагностические данные. Базовая модель объектов есть в документации Kubernetes.

Итог: получил ли кандидат оффер?

Да. Кандидат получил удалённый оффер на 350 000 рублей. Он уверенно ориентировался в автоматизации и связывал ответы с рабочими задачами. Не каждый теоретический ответ был идеальным, но практический опыт, спокойный диалог и способность уточнять вопрос показали уровень, достаточный для позиции.

Чтобы повторить этот результат, тренируйте не определения по отдельности, а связки: механизм → пример → ограничение → решение в проекте. В тренажёре собеседований ЮНИКОД можно собрать такие ответы по своему направлению и заранее найти слабые места.

Источники

частые вопросы

Короткие ответы

Что важнее для AQA Engineer: Python или теория тестирования?

Нужны обе части. Python позволяет писать поддерживаемый код автоматизации, а теория тестирования помогает выбрать правильный уровень проверки и не превращать весь набор в медленные UI-тесты.

Что повторить по Selenium перед собеседованием?

Повторите локаторы, явные ожидания, работу с окнами и фреймами, причины StaleElementReferenceException и правила построения устойчивых UI-тестов.

Получил ли кандидат оффер после этого собеседования?

Да. После интервью кандидат получил оффер на позицию QA Engineer с доходом 350 000 рублей и удалённым форматом работы.

следующий шаг

Отработайте ответы до реального собеседования

Тренажёр ЮНИКОД помогает повторить вопросы по тестированию, найти пробелы и отвечать коротко, точно и по существу.

Начать тренировку →