Собес в Альфа-Банк · QA Engineer (Python) Middle+
Материал Эйч · Опубликовано 21 июля 2026
Обзор
Автоматизация веб-продуктов на Python (PyTest + Playwright), API-тестирование, CI/CD и тестирование AI/RAG/MCP-флоу в финтехе
Фишка: Фокус на современном стеке (Python, Playwright, PyTest) и тестировании AI/RAG/MCP-флоу в продуктовых командах банка; сильная инженерная культура с публикациями на Habr про LLM-проекты, нагрузочное тестирование core-систем и интеграционные платформы до 150k RPS
| Этап | Длительность | Что проверяют |
|---|---|---|
| HR-скрининг | 30–45 мин | Опыт 4+ лет в QA веб-продуктов, мотивация в финтех, формат работы (гибрид), зарплатные ожидания, готовность к задачам с AI-флоу |
| Техническое интервью | 60–90 мин | PyTest/Playwright, API-тестирование, пирамида тестирования, CI/CD, Git, Docker; разбор реальных кейсов автоматизации и регресса |
| Практика / live-coding | 45–60 мин | Написание API- или UI-автотеста, тест-дизайн для фичи или AI-сценария, анализ баг-репорта или логов |
| Финал с лидом / hiring manager | 30–45 мин | Soft skills, работа с инцидентами, взаимодействие с разработкой, планы развития, вопросы о команде и процессах |
Стек и темы
Обязательный минимум
- Python 3: фикстуры, параметризация, conftest, маркеры PyTest
- Playwright: Page Object, auto-wait, локаторы, скриншоты/трейсы
- API-тестирование: REST, статус-коды, схемы JSON, requests/httpx
- Пирамида тестирования: unit / integration / E2E, smoke и regression
- CI/CD: запуск автотестов в пайплайне, артефакты, flaky-тесты
- Git: branch flow, pull/fetch, merge vs rebase
- Docker: поднять окружение, посмотреть логи контейнера
- Тест-документация: тест-план, чек-лист, баг-репорт
- OAuth/SAML/SSO на уровне сценариев тестирования
- REST и WebSocket: отличия, типовые проверки
- S3/MinIO: загрузка/скачивание файлов в тестах
- Observability: логи, метрики, traces при разборе падений
Плюсом будет
- LLM/RAG/MCP: архитектура пайплайна, детерминированный flow vs агент
- LangFlow и инструменты оценки промптов (Langfuse)
- Kubernetes: базовое понимание pod/deployment для тестовых стендов
- Нагрузочное тестирование: k6, JMeter, RPS, перцентили
- Использование LLM для ускорения написания тестов и анализа логов
Основы QA и тест-дизайн
Какие есть виды тестирования?
Функциональное vs нефункциональное; smoke/regression/sanity; позитив/негатив; ручное vs автоматизированное; по уровню — unit, integration, system, acceptance
Что такое пирамида тестирования?
Много быстрых unit/integration внизу, меньше медленных E2E наверху. Цель — баланс скорости обратной связи и покрытия рисков
Какие знаешь техники тестирования дизайна?
Эквивалентное разбиение, граничные значения, pairwise, decision table, state transition, use case — назови 3–4 с примером применения
Какими характеристиками должен обладать хороший автотест?
Быстрый, изолированный, детерминированный, читаемый, независимый, с понятным assert и минимумом зависимостей от окружения
Что такое TDD?
Red-Green-Refactor: сначала падающий тест, потом минимальный код, потом рефакторинг. В QA — понимание, как это влияет на качество и регресс
Фишка: В Альфа-Банке ценят системный подход: тест-планы, чек-листы и участие в разборе инцидентов — не только «написать автотесты»
Ловушка: Не своди виды тестирования только к «ручное/авто» — покажи понимание уровней, целей и рисков в финтехе
Python и PyTest
С какими фреймворками и библиотеками для автоматизации работал?
PyTest как runner, fixtures, parametrize, pytest-xdist для параллели, allure/pytest-html для отчётов, requests/httpx для API
Как организуешь структуру автотестов на PyTest?
tests/ по слоям (api/ui), conftest.py для фикстур, markers (@smoke, @regression), отдельные конфиги для стендов через env
Как борешься с flaky-тестами?
Стабильные локаторы, явные waits, изоляция данных, retry только как временная мера, quarantine + анализ root cause в CI
Какие используешь структуры данных в тестах?
dict/list для payload, dataclass/pydantic для моделей, factory/fixture для генерации тестовых данных
Совет: На собесе часто просят написать фикстуру с setup/teardown или параметризованный тест — потренируйся на API-кейсе с 3–4 наборами данных
Ловушка: time.sleep() в Playwright/PyTest — красный флаг; используй auto-wait и expect
Playwright и UI/E2E
Чем Playwright отличается от Selenium?
Auto-wait, trace/video, параллельные контексты, стабильные локаторы (role/text), нативная поддержка network interception
Как стабилизируешь UI-автотесты?
Page Object, data-testid, изоляция тестовых пользователей, моки API через route, скриншот при падении, trace on first retry
Как тестируешь OAuth/SSO-сценарии в UI?
Тестовый IdP/stub, сохранение storageState, отдельные фикстуры auth, проверка redirect URL и токенов на API-уровне
Фишка: В вакансии явно указан Playwright для UI-автотестов — будь готов показать реальный E2E-сценарий с login → action → assert
Совет: Playwright codegen и trace viewer — хороший аргумент на собесе, если используешь их для ускорения отладки
API-тестирование
Расскажи про свой опыт тестирования API
Инструменты (Postman/httpx/PyTest), проверки status/body/headers/schema, негативные кейсы, контрактное тестирование, auth (Bearer/OAuth)
В чём разница между POST, PUT и PATCH?
POST — создание/действие; PUT — полная замена ресурса (идемпотентен); PATCH — частичное обновление
Как выбрать между POST, PUT и PATCH в тестах?
Смотри контракт API: PUT требует полного тела, PATCH — delta; проверяй идемпотентность и side effects
Как тестируешь WebSocket?
Подключение, ping/pong, сообщения по протоколу, reconnect, таймауты, параллельные клиенты; в Playwright — page.on('websocket')
Ловушка: Не ограничивайся проверкой 200 OK — в банке важны коды ошибок, идempotency, валидация полей и безопасность
Совет: Подготовь пример: как бы протестировал endpoint перевода/оплаты — позитив, негатив, границы, авторизация
CI/CD, Git, Docker
Что такое CI/CD и как автотесты встроены в пайплайн?
CI — сборка + тесты на каждый PR; CD — деплой после gate. Smoke на merge, full regression nightly, артефакты (allure, logs, traces)
В чём разница между git pull и git fetch?
fetch скачивает изменения без merge; pull = fetch + merge/rebase локальной ветки
В чём разница между git rebase и git merge?
merge сохраняет историю ветвления; rebase переписывает коммиты поверх base — линейная история, но опасен для shared branches
Как используешь Docker в тестировании?
docker-compose для стенда, поднять mock-сервис, docker logs для диагностики, volume для артеfactов
Фишка: Вакансия требует интеграции автотестов с корпоративными системами и CI — расскажи про конкретный пайплайн (GitLab/Jenkins/GitHub Actions)
Ловушка: rebase на main/master в команде — спорная тема; покажи, что понимаешь trade-offs
AI/RAG/MCP и агентные сценарии
Как бы тестировал LLM/RAG-пайплайн?
Golden dataset, метрики качества (precision/recall ответа), проверка fallback, детерминированные vs агентные flow, логирование промптов
Что такое MCP и зачем он QA?
Model Context Protocol — стандарт подключения инструментов к LLM; тестируй контракт tools, ошибки, таймауты, безопасность вызовов
Чем отличается детерминированный flow от AI-агента?
Flow — фиксированная цепочка шагов; агент сам выбирает инструменты и порядок. Для QA: разные стратегии тестирования и метрики
Как оцениваешь качество ответов AI-ассистента?
Rule 90%: на проде сложно >90% точности; цепочка RAG умножает вероятности ошибок; нужны eval-наборы и мониторинг
Фишка: Это ключевой differentiator вакансии — даже без глубокого опыта покажи архитектурное понимание и идеи тест-кейсов для AI-флоу
Совет: Почитай статьи Альфы на Habr про LLM-проекты и RAG — на финале можно задать умный вопрос про eval и Langfuse
Observability, инциденты и нагрузка
Как анализируешь логи, метрики и traces при падении теста или инциденте?
Корреляция по trace_id, timeline, метрики latency/error rate, сравнение с baseline, эскалация dev с воспроизводимым кейсом
Какой опыт нагрузочного тестирования?
k6/JMeter: сценарии, RPS, p95/p99 latency, ramp-up, bottlenecks; понимание, что «150k RPS синтетики» ≠ боевая нагрузка
В чём разница между контейнеризацией и виртуализацией?
VM — полная ОС на гипервизоре; контейнер — изоляция процессов, общее ядро. Docker быстрее стартует, меньше overhead
Фишка: Альфа публикует кейсы нагрузочного тестирования core-систем — полезно упомянуть разнообразие RPS, размеров payload и p95
Ловушка: Не путай нагрузочное тестирование с функциональным — разные цели, метрики и инструменты
Задачи
API-автотест: создание и получение ресурса
Есть REST API: POST /api/v1/documents принимает JSON {"title": str, "type": str}, возвращает 201 и {"id": uuid, "title", "type", "created_at"}. GET /api/v1/documents/{id} возвращает 200 или 404. Напиши PyTest-тесты: успешное создание, получение по id, 404 для несуществующего id, 400 при пустом title.
import pytest
import httpx
BASE = "https://test-api.example.com"
@pytest.fixture
def client():
with httpx.Client(base_url=BASE, timeout=10) as c:
yield c
@pytest.fixture
def created_doc(client):
r = client.post("/api/v1/documents", json={"title": "Test", "type": "report"})
assert r.status_code == 201
return r.json()
def test_create_document(client):
r = client.post("/api/v1/documents", json={"title": "Smoke", "type": "invoice"})
assert r.status_code == 201
body = r.json()
assert body["title"] == "Smoke"
assert "id" in body
def test_get_document(client, created_doc):
doc_id = created_doc["id"]
r = client.get(f"/api/v1/documents/{doc_id}")
assert r.status_code == 200
assert r.json()["id"] == doc_id
def test_get_missing_returns_404(client):
r = client.get("/api/v1/documents/00000000-0000-0000-0000-000000000000")
assert r.status_code == 404
@pytest.mark.parametrize("payload", [{"title": "", "type": "x"}, {"type": "x"}])
def test_create_validation(client, payload):
r = client.post("/api/v1/documents", json=payload)
assert r.status_code == 400Сложность: O(1) на запрос
Playwright: login и проверка дашборда
Веб-приложение: /login (email, password), после успеха редирект на /dashboard с элементом [data-testid="welcome-message"]. Напиши E2E-тест: login тестовым пользователем → assert welcome → logout → assert redirect на /login.
import pytest
from playwright.sync_api import Page, expect
@pytest.fixture
def auth_page(page: Page, base_url):
page.goto(f"{base_url}/login")
page.get_by_label("Email").fill("qa@test.local")
page.get_by_label("Password").fill("secret")
page.get_by_role("button", name="Войти").click()
expect(page).to_have_url(f"{base_url}/dashboard")
return page
def test_dashboard_after_login(auth_page: Page):
expect(auth_page.get_by_test_id("welcome-message")).to_be_visible()
def test_logout(auth_page: Page, base_url):
auth_page.get_by_role("button", name="Выйти").click()
expect(auth_page).to_have_url(f"{base_url}/login")Сложность: O(1)
Тест-дизайн: RAG-чат поддержки
Банковский чат-бот на RAG отвечает на вопросы клиентов по базе знаний (вход в кабинет, блокировка карты и т.д.). Pipeline: rewrite query → RAG search → generate answer. Составь набор тест-кейсов и метрик качества.
Тест-кейсы: 1. Позитив: «Не могу войти в личный кабинет» → релевантная инструкция из KB 2. Out-of-scope: «Курс доллара завтра» → корректный отказ/fallback 3. Ambiguous: «Войти» → уточняющий вопрос или best-effort 4. Adversarial: prompt injection в user input → не выполняет системные команды 5. Regression: стоп-лист известных bad cases после оркестрации Метрики: - Answer relevance (human/LLM-as-judge на golden set) - Groundedness: ответ опирается на найденные chunks - Latency p95 - Fallback rate - End-to-end accuracy ≈ product шагов (например 0.95×0.80×0.99 для 3-шагового pipeline)
Сложность: O(n) по размеру eval-набора
System Design
- Спроектируй архитектуру автотестов для микросервисного банковского продукта: UI + API + smoke в CI
- Как организовать тестирование AI-агента с RAG и MCP-tools: что автоматизировать, что оставить manual/eval
- Как встроить автотесты в регресс каждой сборки при 500+ E2E и ограничении времени пайплайна 20 мин
Каркас ответа
- Контекст и риски: что критично для бизнеса (платежи, auth, AI-ответы)
- Пирамида и слои: unit → contract/API → integration → E2E smoke
- Инфраструктура: Docker/K8s стенды, test data management, mocks/stubs
- CI/CD стратегия: parallel, sharding, quarantine flaky, nightly full regression
- Observability: allure, traces, метрики pass rate и duration
- Для AI: golden dataset, eval pipeline, мониторинг качества на проде
Поведенческое
- Расскажи о сложном баге, который нашёл через логи/метрики — как довёл до fix?
- Как выстраивал автоматизацию с нуля или переносил с одного фреймворка на другой?
- Был ли конфликт с разработкой по приоритету багов — как решали?
- Как организуешь регресс перед релизом при нехватке времени?
- Пример, когда автотесты поймали регресс, который ручное тестирование пропустило
- Как используешь LLM в рабочих процессах QA?
- Почему Альфа-Банк и эта роль?
- Какие зарплатные ожидания?
- В каком направлении хочешь развиваться?
- Какие у тебя есть вопросы к нам?
План подготовки
3 дня
- Повторить пирамиду тестирования, виды тестов и техники тест-дизайна
- Освежить PyTest: fixtures, parametrize, markers, conftest
- Пройти 5–10 API-задач: POST/PUT/PATCH, auth headers, JSON schema
- Повторить Playwright: locators, expect, trace, storageState
- Прочитать описание вакансии и выписать 3 истории из опыта под каждый блок
7 дней
- Написать с нуля мини-набор API-тестов на httpx + PyTest
- Сделать один Playwright E2E с Page Object
- Разобрать CI/CD: как бы встроил smoke + regression
- Изучить основы RAG/MCP: статья Альфы на Habr про LLM-проекты
- Подготовить ответ про OAuth/SSO и S3 в контексте тестов
- Повторить Git (merge/rebase/fetch) и Docker basics
14 дней
- Полный mock-interview с другом или самозапись
- Подготовить eval-подход для AI-сценария (golden questions + метрики)
- Изучить основы k6 или JMeter — один простой сценарий
- Собрать вопросы к интервьюеру про AI-флоу, CI, команду
- Повторить behavioral STAR-истории: инцидент, автоматизация, конфликт приоритетов
| Блок | Готов, если... |
|---|---|
| Тест-дизайн | можешь за 5 минут набросать чек-лист для API или UI-фичи с позитив/негатив/границы |
| PyTest | можешь написать фикстуру, parametrize и тест API без подсказок |
| Playwright | можешь написать login-flow с expect и объяснить auto-wait |
| API | объясняешь POST/PUT/PATCH и типовые проверки REST + auth |
| CI/CD | можешь нарисовать пайплайн: PR → smoke → merge → nightly regression |
| AI/RAG | объясняешь цепочку RAG, риски качества и идеи eval-набора |
| Behavioral | 3 STAR-истории готовы: баг/инцидент, автоматизация, работа с dev |
В день собеседования
- Проверить связь, камеру, тихое место
- Открыть IDE с заготовками PyTest/Playwright
- Иметь под рукой примеры баг-репортов и тест-плана
- Повторить финальный checklist за 30 минут
- Подготовить 5 вопросов команде (AI-тестирование, CI, onboarding)