Финал: архитектура фреймворка, портфолио и собеседование
Поздравляем! Вы прошли долгий путь длиной в 12 недель. Вы начали с простых утверждений assert, а закончили настройкой CI/CD пайплайнов и контейнеризацией. Вы больше не новичок, который пишет скрипты «на коленке». Вы обладаете инструментарием инженера по автоматизации.
Однако знание инструментов — это только половина успеха. Вторая половина — умение объединить их в единую, масштабируемую систему (фреймворк) и способность продать свои навыки работодателю.
В этой финальной лекции мы не будем изучать новые библиотеки. Мы займемся архитектурой вашего итогового проекта, оформлением портфолио и подготовкой к техническому собеседованию.
Архитектура тестового фреймворка
Чем отличается набор скриптов от фреймворка? Скрипты решают сиюминутные задачи. Фреймворк создает структуру, которая позволяет добавлять новые тесты быстро, дешево и без дублирования кода. Хороший фреймворк похож на конструктор LEGO: у вас есть стандартные блоки, из которых вы собираете сценарии.
!Диаграмма слоев архитектуры автоматизированного тестирования
Основные слои
Config Layer (Конфигурация):
Никакого хардкода. URL стендов, логины, пароли и таймауты должны лежать в переменных окружения (
.env) или файлах конфигурации. Используйте библиотеку
pydantic для валидации настроек.
Core / Client Layer (Ядро):
Обертки над библиотеками. Если вы используете
requests, создайте базовый класс
BaseClient, который умеет логировать все запросы и ответы, автоматически подставлять базовый URL и обрабатывать таймауты.
Domain Layer (Бизнес-логика):
Здесь живут Page Objects (для UI) и API Steps (для бэкенда). Тест не должен знать, какой локатор у кнопки «Купить». Тест должен вызывать метод
cart_page.click_buy().
Test Layer (Тесты):
Сами функции с префиксом
test_. Они должны быть декларативными. Идеальный тест читается как сценарий на английском языке, без технических деталей реализации.
Пример структуры проекта
Вот как должен выглядеть ваш итоговый проект:
Итоговые проекты курса
Чтобы закрепить знания и наполнить портфолио, вам нужно реализовать два проекта. Это ваша дипломная работа.
Проект 1: E2E тестирование демо-магазина (UI + API)
Цель: Продемонстрировать умение работать с гибридным тестированием.
Объект: Любой демо-сайт (например, SauceDemo, OpenCart или PetStore).
Требования:
* UI: Реализовать паттерн Page Object Model. Покрыть сценарии: логин, добавление в корзину, оформление заказа.
* API: Если у сайта есть API, использовать его для подготовки данных (например, создать пользователя через API перед UI-тестом логина).
* Данные: Использовать Faker для генерации email и адресов.
* Отчеты: Интеграция с Allure (скриншоты при падении).
Проект 2: Инфраструктура для публичного API
Цель: Показать навыки DevOps и архитектуры.
Объект: GitHub API, Trello API или любой публичный сервис.
Требования:
* Docker: Тесты должны запускаться внутри контейнера.
* CI/CD: Настроить GitHub Actions. Пайплайн должен запускаться на Pull Request, прогонять тесты и сохранять Allure-отчет как артефакт.
* Notifications: (Опционально) Отправка результатов в Telegram/Slack.
Портфолио: GitHub как ваше резюме
Рекрутеры и техлиды смотрят код. Пустой GitHub — это красный флаг для Junior-специалиста. Но и GitHub, заваленный мусором («hello world», «test1»), не лучше.
Правила идеального репозитория
README.md — это король.
Никто не будет читать ваш код, если не поймет, что он делает. В
README.md должно быть:
*
Заголовок: Что это за проект.
*
Стек технологий: Python, Pytest, Playwright, Docker, Allure (используйте бейджи).
*
Как запустить: Пошаговая инструкция (
git clone ->
pip install ->
pytest).
*
Примеры отчетов: Скриншот или ссылка на Allure.
Чистота кода.
Используйте линтеры (
flake8,
black). Соблюдайте PEP8. Удалите закомментированный код и лишние принты.
История коммитов.
Плохо:
Update file,
Fix,
Fix 2.
Хорошо:
Add login page object,
Refactor api client,
Setup CI pipeline.
.gitignore обязателен.
В репозитории не должно быть папок
.venv,
__pycache__,
.idea или файлов с реальными паролями (
.env).
Подготовка к собеседованию
Собеседование на QA Automation обычно состоит из трех частей: теория, задачи на кодинг и вопросы по инструментам.
Топ вопросов по Python
Типы данных: Изменяемые и неизменяемые. В чем разница между list и tuple, и почему ключом словаря может быть только неизменяемый тип?
ООП: Три кита (Инкапсуляция, Наследование, Полиморфизм) на примерах из автоматизации (например, BasePage).
Декораторы: Как работают, зачем нужны (пример: @pytest.fixture, @allure.step).
Генераторы и итераторы: В чем отличие yield от return? (Критично для понимания фикстур).Топ вопросов по тестированию и инструментам
Pytest:
* Что такое фикстуры и какие у них есть
scope?
* Как передать параметры в тест (
parametrize)?
* Как запустить тесты параллельно?
Selenium / Playwright:
* Что такое неявные (implicit) и явные (explicit) ожидания? Почему
time.sleep — это плохо?
* Как работает Page Object Model?
* Как обработать
StaleElementReferenceException?
API:
* Разница между POST и PUT.
* Коды ответов (2xx, 3xx, 4xx, 5xx).
Git & CI/CD:
* Что такое Merge Request?
* Зачем нужен Docker в тестах?
Live Coding (Задачи на код)
Вас попросят написать код в реальном времени. Обычно это алгоритмические задачи легкого уровня или задачи на работу со строками/списками.
Задача:* Написать функцию, которая проверяет, является ли строка палиндромом.
Задача:* Найти уникальные элементы в списке.
Задача:* Написать простейший клиент для API (GET запрос и проверка JSON).
> «Не молчите во время лайв-кодинга. Рассуждайте вслух. Интервьюеру важнее понять ход ваших мыслей, чем увидеть идеально работающий код с первой попытки».
План обучения: 3 месяца (Сводная таблица)
Ниже представлен полный план курса, который вы прошли. Используйте его как чек-лист для повторения перед собеседованием.
| Неделя | Темы | Часы (Теория / Практика) | Ключевые задачи | Ресурсы |
| :--- | :--- | :--- | :--- | :--- |
| 1 | Основы тестирования<br>Пирамида, STLC, виды тестов. | 2 / 4 | Написание тест-кейсов. Ручное тестирование формы. | ISTQB Glossary |
| 2 | Погружение в pytest<br>Asserts, fixtures, parametrize, marks. | 3 / 7 | Рефакторинг тестов с фикстурами. Параметризация калькулятора. | Pytest Docs |
| 3 | API-тестирование<br>Requests, REST, JSON Schema, Mocking. | 3 / 8 | CRUD тесты для PetStore. Валидация схем. | Requests Docs |
| 4 | UI-тестирование<br>Playwright, Locators, POM. | 4 / 10 | Автоматизация логина и корзины. Реализация Page Objects. | Playwright Python |
| 5 | Тестовые данные<br>Faker, JSON/YAML, Data Driven Testing. | 2 / 5 | Генератор пользователей. Вынос конфигов в YAML. | Faker Docs |
| 6 | Инфраструктура<br>Pytest.ini, Logging, Allure. | 2 / 5 | Настройка красивых отчетов. Логирование шагов. | Allure Docs |
| 7 | CI/CD<br>GitHub Actions, Workflows. | 3 / 6 | Пайплайн для запуска тестов по пушу. Артефакты. | GitHub Actions |
| 8 | Контейнеризация<br>Docker, Dockerfile, Compose. | 3 / 7 | Упаковка тестов в образ. Запуск через Compose. | Docker Get Started |
| 9 | Продвинутый pytest<br>Xdist (параллельность), Hooks, Plugins. | 2 / 5 | Ускорение тестов в 4 потока. Написание плагина. | Pytest-xdist |
| 10 | Сложные сценарии<br>DB (SQLAlchemy), OAuth, WebSockets. | 3 / 6 | Тест с проверкой в БД. Авторизация через API. | SQLAlchemy |
| 11 | Метрики и качество<br>Coverage, Flaky tests. | 2 / 4 | Анализ покрытия кода. Лечение мигающих тестов. | Coverage.py |
| 12 | Финал<br>Архитектура, Портфолио, Собеседование. | 2 / 10 | Итоговый проект. Оформление GitHub. | |
Заключение
Путь от Junior до Senior — это не спринт, а марафон. Этот курс дал вам карту и набор инструментов. Теперь всё зависит от вашей практики. Не бойтесь сложных задач, читайте чужой код, вносите вклад в Open Source и постоянно учитесь.
Удачи на собеседованиях! Ваш код будет чистым, а тесты — зелеными.