Представление вашего портфолио
Updated Jul 2026
Зачем QA-инженерам нужно портфолио
У разработчиков есть GitHub-профили, полные проектов. У дизайнеров есть портфолио на Dribbble. У QA-инженеров часто нет ничего видимого, чтобы показать годы экспертизы. Это проблема, потому что нанимающие менеджеры оценивают то, что они могут видеть. Резюме говорит «Автоматизировал 500 тест-кейсов на Playwright». Портфолио показывает реальный фреймворк, тестовую архитектуру, CI-пайплайн и результаты.
QA-портфолио не обязательно быть навороченным. Три хорошо структурированных проекта на GitHub и умение провести кого-то через вашу архитектуру за 5 минут поставят вас впереди 90% кандидатов.
Создание QA-портфолио на GitHub
Что включить
Ваш GitHub-профиль должен демонстрировать четыре вещи: вы умеете писать чистый код автоматизации, вы понимаете тестовую архитектуру, вы думаете о полном жизненном цикле тестирования (а не только о написании тестов), и вы следуете инженерным лучшим практикам.
Проект 1: фреймворк автоматизации тестирования (основной проект)
Это ваш флагманский проект. Создайте полный фреймворк автоматизации тестирования для общедоступного приложения (не используйте код реального работодателя).
Рекомендуемые целевые приложения для проектов портфолио:
- Тестовый сайт Playwright (demo.playwright.dev/todomvc)
- Демо-приложение Sauce Labs (saucedemo.com)
- Automation Exercise (automationexercise.com)
- Любое open source веб-приложение, которое можно запустить локально
Что должен включать фреймворк:
qa-portfolio-framework/
README.md # Setup, architecture, run instructions
.github/
workflows/
ci.yml # GitHub Actions pipeline
src/
pages/ # Page Object Models
login.page.ts
dashboard.page.ts
cart.page.ts
fixtures/ # Test fixtures and setup utilities
auth.fixture.ts
test-data.factory.ts
utils/ # Shared utilities
api-client.ts
assertions.ts
tests/
ui/ # Browser-based tests
login.spec.ts
checkout.spec.ts
api/ # API tests
users.spec.ts
products.spec.ts
visual/ # Visual regression tests
homepage.visual.spec.ts
playwright.config.ts # Configuration with multiple projects
package.json
Ключевые элементы, которые впечатляют ревьюеров:
| Элемент | Почему это важно |
|---|---|
| Несколько типов тестов (UI, API, визуальные) | Показывает широту за пределами «я умею кликать кнопки» |
| Паттерн Page Object с чистым разделением | Показывает, что вы понимаете поддерживаемую архитектуру |
| Фабрика тестовых данных | Показывает, что вы думаете об управлении данными, а не только о шагах тестов |
| Осмысленные имена тестов | Показывает, что вы пишете тесты как спецификации, а не как скрипты |
| CI-пайплайн, который реально проходит | Показывает, что фреймворк работает целиком |
| Конфигурация окружений | Показывает, что вы думаете о запуске в разных контекстах |
Проект 2: набор тестов API
Отдельный проект тестирования API демонстрирует вашу способность тестировать сервисы независимо от UI. Используйте публичный API (GitHub API, Spotify API или mock API).
Что продемонстрировать:
- Валидация запросов/ответов с проверкой схемы
- Обработка аутентификации (обновление токена, случаи ошибок)
- Тесты, управляемые данными, с использованием параметризации
- Валидация ответов об ошибках (коды 4xx, 5xx)
- Assertions на время ответа (базовые проверки производительности)
- Концепции контрактного тестирования (глава 4)
Проект 3: конфигурация CI/CD-пайплайна
Проект, сфокусированный на дизайне пайплайна, показывает, что вы думаете о тестировании как части процесса поставки, а не как об отдельной активности.
Что включить:
- Многоэтапный пайплайн: lint, unit test, integration test, browser test, deploy
- Параллелизация тестов (matrix strategy или шардирование)
- Хранение артефактов для отчётов о тестах и скриншотов
- Уведомления о сбоях (Slack webhook или email)
- Конфигурация кэширования для ускорения билдов
- Выполнение тестов, специфичное для среды
Пример конфигурации GitHub Actions:
name: Test Pipeline
on: [push, pull_request]
jobs:
lint-and-unit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- run: npm ci
- run: npm run lint
- run: npm run test:unit
browser-tests:
needs: lint-and-unit
runs-on: ubuntu-latest
strategy:
matrix:
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- run: npm ci
- run: npx playwright install --with-deps
- run: npx playwright test --shard=${{ matrix.shard }}/4
- uses: actions/upload-artifact@v4
if: failure()
with:
name: test-results-${{ matrix.shard }}
path: test-results/
Проект 4 (опционально): скрипты нагрузочного тестирования
Если у вас есть опыт тестирования производительности (глава 5), проект на k6 или Locust показывает специализированный навык, который большинство QA-кандидатов не могут продемонстрировать.
Написание убедительных кейсов
Кейс превращает невидимую QA-работу в видимый нарратив. Напишите 2-3 кейса о прошлых проектах (анонимизированных при необходимости) и включите их в своё портфолио или персональный сайт.
Структура кейса
# [Project Title]
## Context
What was the product? What was the team size? What was the testing challenge?
## Challenge
What specific problem did you solve? Why was it difficult?
## Approach
What was your strategy? What tools and techniques did you use?
## Implementation
What did you actually build or change? Include architecture diagrams or code snippets.
## Results
What were the measurable outcomes? Use specific numbers.
## Lessons Learned
What would you do differently? What did you learn?
Пример краткого описания кейса
Название: Сокращение времени регрессионного тестирования с 4 часов до 35 минут
Контекст: E-commerce платформа, инженерная команда из 12 человек, 1200+ автоматизированных браузерных тестов, релизы раз в две недели.
Задача: Набор регрессионных тестов выполнялся 4 часа в CI. Разработчики перестали ждать результатов и мёрджили без зелёных билдов. Три продакшен-инцидента за один квартал были прослежены до непротестированных мёрджей.
Подход: Профилирование набора тестов, выявление узких мест (накладные расходы на запуск браузера, последовательное выполнение, повторы нестабильных тестов) и проектирование стратегии параллелизации с уровневой организацией тестов.
Реализация: Внедрение 4-стороннего шардирования, общие контексты браузера внутри групп тестов, создание smoke-набора из 50 тестов для PR (SLA 6 минут), карантин и исправление 23 нестабильных тестов.
Результаты: Полная регрессия: с 4 часов до 35 минут. Smoke-набор: 6 минут. Соблюдение правила мёрджа: с 34% до 97%. Ноль продакшен-инцидентов от непротестированных мёрджей в следующие два квартала.
Уроки: Узким местом было не количество тестов, а инфраструктура вокруг них. Инвестиции в тестовую инфраструктуру (глава 16) имеют более высокий ROI, чем написание большего количества тестов.
Фреймворки, готовые к демонстрации
Когда интервьюер говорит «Проведите меня через проект», вам нужен фреймворк, готовый к живой демонстрации. Это означает:
Чек-лист перед собеседованием
- Проект запускается на вашем ноутбуке прямо сейчас (проверьте накануне вечером)
- Все зависимости установлены и актуальны
- CI-пайплайн показывает недавний зелёный билд
- Вы можете запустить полный набор за менее 5 минут
- Вы можете запустить один тест за менее 30 секунд
- У вас есть падающий тест, готовый для демонстрации отладки
- Отчёт о тестах генерируется правильно и выглядит профессионально
- Вы знаете структуру проекта достаточно хорошо, чтобы навигировать по ней без колебаний
Что демонстрировать
- Запуск одного теста: Покажите выполнение теста, взаимодействие с браузером (если UI) и вывод assertions
- Показ сбоя теста: Намеренно сломайте что-то и покажите, как фреймворк сообщает о сбое -- скриншоты, сообщения об ошибках, trace-файлы
- Навигация по Page Object: Покажите, как page objects маппятся на приложение и как они переиспользуются в тестах
- Показ CI-пайплайна: Откройте GitHub Actions и проведите через недавний билд -- этапы, тайминги, артефакты
- Показ отчёта о тестах: Откройте HTML-отчёт и продемонстрируйте, как кто-то будет триажить сбой
Персональный сайт и блог
Персональный сайт не обязателен, но значительно усиливает ваше портфолио. Он даёт вам платформу для демонстрации навыков письма (глава 24), обмена техническими знаниями и показывает, что вы думаете о QA за пределами своей повседневной работы.
Что включить на QA-портфолио сайт
| Раздел | Содержание |
|---|---|
| О себе | 2-3 предложения о том, кто вы и в чём специализируетесь |
| Проекты | Ссылки на ваши GitHub-репозитории с краткими описаниями |
| Кейсы | 2-3 написанных кейса из прошлой работы (анонимизированные) |
| Статьи в блоге | Технические статьи о подходах к тестированию, оценки инструментов или извлечённые уроки |
| Доклады/презентации | Слайды или записи с митапов, конференций или внутренних презентаций |
| Резюме | PDF для скачивания со ссылкой |
Идеи для статей блога QA-инженеров
- «Как я сократил время нашего набора тестов на 80%»
- «Миграция с Selenium на Playwright: уроки из 1000 тестов»
- «Тестирование AI-функций: что отличается» (опирается на главы 1-3)
- «Аргументы в пользу контрактного тестирования в микросервисах» (опирается на главу 4)
- «Почему ваши нестабильные тесты -- это проблема дизайна, а не тестирования»
- «Создание фабрики тестовых данных, которая масштабируется»
- «Чему я научился из своего худшего продакшен-бага»
5-минутный обзор архитектуры
Это критический навык для собеседований уровня senior и architect. Вас попросят представить тестовый фреймворк -- либо тот, который вы создали, либо тот, который вы проектируете на месте.
Структура
Минута 1: Контекст и цели (30 секунд на проблему, 30 секунд на принципы дизайна)
«Этот фреймворк тестирует e-commerce платформу с 200 микросервисами. Приоритеты дизайна: быстрая обратная связь для разработчиков (менее 10 минут для проверок PR), всесторонняя регрессия (менее 45 минут для ночных прогонов) и ноль нестабильных тестов в smoke-наборе.»
Минута 2: Архитектурные уровни (нарисуйте на доске или опишите ясно)
«Пять уровней. Внизу: Playwright для браузерных тестов, requests для API-тестов, k6 для производительности. Выше: общая инфраструктура -- Page Objects, API-клиенты, фабрика тестовых данных. Затем наборы тестов, организованные по скорости -- smoke, regression, full. Затем интеграция с CI -- GitHub Actions с 4-сторонним шардированием. Наверху: отчётность -- HTML-отчёты, Slack-оповещения, дашборд Grafana для трендов.»
Минута 3: Ключевые проектные решения (объясните 2-3 компромисса, которые вы сделали)
«Мы выбрали Playwright вместо Selenium из-за auto-waiting и встроенного API-тестирования -- это позволило нам использовать единый фреймворк для UI и API тестов. Мы используем setup через API вместо setup через UI, потому что это в 10 раз быстрее и надёжнее. Мы шардируем по файлам, а не по тестам, потому что изоляция на уровне файлов предотвращает перекрёстное загрязнение тестов.»
Минута 4: Результаты и метрики
«Smoke-набор выполняется за 6 минут на каждый PR. Полная регрессия выполняется за 38 минут каждую ночь. Уровень нестабильности тестов ниже 1% -- мы отслеживаем его еженедельно и помещаем в карантин любой тест, который недетерминированно падает дважды. Процент прохождения билда до мёрджа составляет 97%.»
Минута 5: Что бы вы улучшили (показывает самосознание и перспективное мышление)
«Три вещи, которые бы я изменил. Во-первых, я бы добавил визуальное регрессионное тестирование -- мы обнаруживаем проблемы с макетом слишком поздно. Во-вторых, я бы внедрил контрактное тестирование между нашими ключевыми микросервисами для сокращения интеграционных сбоев. В-третьих, я бы добавил контроль бюджета производительности в CI, чтобы обнаруживать регрессии производительности до того, как они попадут на staging.»
Распространённые ошибки в обзорах архитектуры
| Ошибка | Почему это вредит | Исправление |
|---|---|---|
| Начало с инструментов, а не с проблем | Показывает, что вы ведомы инструментами, а не проблемами | Начните с бизнес-контекста и целей качества |
| Нет метрик | «Это работает хорошо» -- не доказательство | Всегда включайте тайминги, процент прохождения и цифры покрытия |
| Нет компромиссов | Звучит так, будто каждое решение было очевидным | Объясните, что вы рассматривали и почему выбрали то, что выбрали |
| Слишком много деталей об одном уровне | Теряется общая картина | Распределяйте время равномерно по всем уровням |
| Нет упоминания того, что бы вы улучшили | Звучит так, будто вы считаете фреймворк идеальным | Всегда имейте 2-3 готовые идеи улучшения |
Подготовка технической презентации
Некоторые собеседования включают презентационный компонент: «Расскажите о вашем подходе к тестированию на последнем проекте». Это отличается от обзора архитектуры тем, что охватывает стратегию и процесс, а не только технический дизайн.
Структура презентации (15-20 минут)
- Контекст проекта (2 мин): Что делает продукт, структура команды, каденция релизов
- Проблемы качества (2 мин): Что делало тестирование этого продукта сложным
- Стратегия тестирования (5 мин): Какие типы тестирования вы выбрали и почему (связь с главой 22)
- Архитектура автоматизации (5 мин): Дизайн фреймворка (5-минутный обзор выше)
- Результаты и влияние (3 мин): Метрики, предотвращённые инциденты, влияние на скорость команды
- Уроки и эволюция (3 мин): Чему вы научились и что бы вы изменили
Советы по презентации
- Используйте визуальные материалы: Диаграммы архитектуры, скриншоты отчётов о тестах, графики трендов дефектов. Не используйте слайды, перегруженные буллет-поинтами.
- Расскажите историю: Начните с проблемы, постройте решение, закончите результатом. Это метод STAR, применённый к технической презентации.
- Предвосхищайте вопросы: Подготовьтесь к «Почему вы не использовали X вместо Y?» и «Как это масштабируется?» и «Что происходит, когда тесты падают?»
- Отрепетируйте хронометраж: 15 минут проходят быстро. Прорепетируйте минимум дважды с таймером.
- Имейте запасной план: Если проектор сломается или демонстрация экрана не работает, будьте готовы описать вашу архитектуру устно. 5-минутный обзор -- ваш запасной план.
Практическое упражнение
- Создайте Проект 1 (фреймворк автоматизации тестирования) из структуры выше. Добейтесь зелёного CI-пайплайна на GitHub. Это ваша самая ценная активность по подготовке к собеседованию.
- Напишите один кейс из прошлой работы по предоставленному шаблону. Стремитесь к 500-800 словам.
- Отрепетируйте 5-минутный обзор архитектуры для вашего портфольного фреймворка. Запишите себя и проверьте тайминг, ясность и полноту.
- Составьте список из 3 идей для статей блога на основе вашего опыта. Напишите план одной из них.
- Пройдитесь по чек-листу демонстрации перед собеседованием для вашего портфольного проекта. Исправьте всё, что не готово.