раздел 43
Автотестирование с нуля
Путь инженера по автотестам: от тест-дизайна и первого баг-репорта до тест-стратегии продукта, своего фреймворка в CI и нагрузочного прогона. Практика сразу на двух треках, Python с pytest и TypeScript с Vitest: трек выбираешь сам, задачи идут парами. Ты младший автотестировщик сервиса билетов «Антракт», до «Ночи продаж» четыре месяца, а в наследство достался репозиторий tests_final_v2/. Тесты проверяются мутантами: тест засчитан, только если ловит спрятанный баг. API-тесты, базы, UI и E2E, двойники, контракты, flaky, CI и метрики на своём стенде в Docker.
Не получилось изменить список. Попробуй ещё раз.
Без входа у каждого урока видно начало. Войди, чтобы читать целиком, отмечать пройденное и решать задачи. войти
«Автотестирование с нуля» покупается один раз и остаётся навсегда: 500 ₽. Оплата пока не подключена, доступ открывается промокодом. ввести промокод
Мастерская: Прогон: тесты ядра цен
Мастерская: Дублёр: касса без сети
Мастерская: Кулисы: API-тесты в процессе
Уроки раздела
Профессия и мышление тестировщика
Рабочее место
Язык: Python и JavaScript для автотестов
- Первая программа
- Значения и типы
- Переменные, выражения и условия
- Коллекции
- Циклы и обход
- Функции
- Проектирование функций и имена
- Модули и пакеты
- Ошибки и исключения
- Классы и объекты
- Строки и даты
- Файлы, JSON, конфиг и переменные окружения
- Асинхронность: ждать и не простаивать
- Типы: подписи, которые проверяет машина
- Качество кода: читаемость, скорость и линтер
- Босс. Касса фестиваля
Первые автотесты
Изделие «Прогон: тесты ядра цен», крейт progon
Тестовые двойники и данные
Изделие «Дублёр: касса без сети», крейт dubler
- Зависимости: почему юнит-тест не ходит в сеть
- Двойники: dummy, stub, spy, mock, fake
- Моки на практике
- Внедрение зависимостей: часы, номера и почта параметром
- Время и случайность: тесты без ожидания и без лотереи
- Тестовые данные: фабрики и строители
- Property-based тесты: правило вместо примера
- Snapshot и approval тесты: когда снимок помогает, а когда врёт
- Мутационное тестирование: mutmut и Stryker
- Босс блока E. Генеральная репетиция
API-тестирование и архитектура фреймворка
Изделие «Кулисы: API-тесты в процессе», крейт kulisy
- Что проверять в API: статус, тело, заголовки, схема, побочный эффект
- HTTP-клиент в коде: сессия, базовый URL, таймауты и ретраи
- Авторизация в API-тестах: токены, роли и вход один раз
- Схема ответа: модели pydantic и zod, JSON Schema из OpenAPI
- Негативные сценарии и идемпотентность: 401, 403, 409, 422 и Idempotency-Key
- Жизненный цикл тестовых данных: создать, проверить, убрать
- Архитектура API-тестов, часть 1: слои, конфиг и константы
- Архитектура API-тестов, часть 2: модели, билдеры, фабрики, декораторы и свои проверки
- Асинхронные операции: ждать по условию, а не по часам
- Моки HTTP: respx и MSW перехватывают сеть, а не клиент
- Отчёты: шаги, вложения и Allure для человека в три часа ночи
- Босс П3. Наследство Глеба
Базы данных в тестах
- SQL для тестировщика: SELECT, WHERE, JOIN и COUNT на базе «Антракта»
- Проверка в базе после вызова API: результат или реализация
- База из тестов: psycopg, pg и слой запросов
- Данные в базе: сиды, фабрики, откат и изоляция
- Testcontainers: настоящий Postgres в тесте
- Миграции и схема как контракт
- Гонки: два запроса за одно место
- Босс П4. Место 14Б
UI и E2E
- Фронтенд для тестировщика: из чего сделана страница
- Локаторы: роль, подпись, текст и data-testid
- Playwright: первый тест покупки
- Ожидания: ни одного sleep
- Page Object и компоненты
- Состояние и вход: сессия и данные через API
- Сеть в UI-тестах: page.route, MSW и где мок врёт
- Компонентные тесты: проверять как зритель, а не как разработчик
- Визуальная регрессия и снапшоты разметки
- Браузеры, экраны, воркеры и доступность
- Хороший e2e и сколько их нужно
- Босс П5. Кнопка «Купить»
Стратегия: какие тесты писать
- Пирамида тестов: что в ней верно и что устарело
- Трофей, соты и размеры тестов Google
- Unit, integration, contract, e2e: договориться о словах
- Что тестировать: карта рисков «Антракта»
- Архитектура и тестируемость: порты, ядро и скромная оболочка
- Вертикальные слайсы: где проходит граница теста
- Контрактное тестирование: OpenAPI, Pact и кто владеет контрактом
- Фейки внешних систем и вебхуки: шлюз с памятью, подпись и дубли
- Босс П6. Партнёр «ПлатиМ»
Надёжность набора тестов
- Откуда берутся flaky: шесть причин и размер теста
- Флакость как вероятность: считать, а не гадать
- Карантин: убрать моргающий тест из блокирующих и не потерять его
- Изоляция и параллельный прогон: загрязнители, жертвы и свои данные
- Скорость набора: профиль, дорогие фикстуры и тесты по изменениям
- Легаси без тестов: характеристики, швы и росток
- Запахи тестов: рефакторинг без потери пойманных багов
- Босс П7. Пятничный flaky
CI/CD и инфраструктура тестов
- CI с нуля: конвейер, GitHub Actions и быстрая обратная связь
- Стенд в CI: docker compose в job, готовность без sleep и логи упавшего стенда
- Шарды, матрицы и отчёты: e2e на четырёх машинах и итог прямо в PR
- Ворота качества: что блокирует merge и как тесты не исчезают молча
- Окружения: dev, stage, превью веток, флаги функций и тестовые данные на общем стенде
- Тестирование в проде: smoke после выкладки, синтетика, канарейка и телеметрия как оракул
- Босс П8. Конвейер
Нефункциональное
- Нагрузочное тестирование: перцентили, SLO, Locust и k6
- Профиль «Ночи продаж»: модель трафика, данные и узкое место
- Безопасность для тестировщика: IDOR, права и вредные входные данные
- Устойчивость: таймауты, повторы, деградация и простой chaos
- Совместимость и версии API: старые клиенты и дифф спецификации
Метрики и команда
Тесты и ИИ-агенты
Финал и карьера
Понятия курса
Понятия разобраны внутри уроков. Нажми на понятие, чтобы открыть урок, где оно объясняется.
Профессия и мышление тестировщика
- Баг-репорт и тест-кейсШаги, ожидание, факт и окружение в баг-репорте, серьёзность против приоритета, чек-лист против тест-кейса.урок 7 · Баг-репорт и тест-кейсопираются: урок 8
- Босс П1. Чек-лист релизаТест-дизайн покупки билета с промокодом и выбором места: модель состояний, классы и границы, проверки с приоритетами и выбор первых кандидатов в автотесты.урок 8 · Босс П1. Чек-лист релизаопираются: урок 9
- Виды тестированияФункциональное и нефункциональное, чёрный и белый ящик, smoke, регресс и sanity, уровни тестов от модульных до сквозных.урок 4 · Виды тестированияопираются: урок 5
- Жизненный цикл ПО и место тестовПуть задачи от требований до прода и проверки на каждом этапе: shift-left сдвигает их к началу, shift-right продолжает в проде.урок 3 · Жизненный цикл ПО и место тестовопираются: урок 4
- Зачем тестироватьЦена бага растёт с каждым этапом. Тест это вопрос к системе, а оракул это способ узнать правильный ответ.урок 2 · Зачем тестироватьопираются: урок 3
- Классы эквивалентности и граничные значенияКак из бесконечного числа входов выбрать несколько проверок: разбить входы на классы, взять по представителю и проверить границы классов.урок 5 · Классы эквивалентности и граничные значенияопираются: урок 6
- Кто такой автотестировщикЧем отличаются QA, QC и тестирование, кто такие ручной тестировщик, автоматизатор и SDET и как выбрать трек Python или TypeScript.урок 1 · Кто такой автотестировщикопираются: урок 2
- Таблицы решений, состояния и pairwiseТаблица решений перебирает сочетания условий, граф состояний показывает допустимые и недопустимые переходы, pairwise сокращает число комбинаций.урок 6 · Таблицы решений, состояния и pairwiseопираются: урок 7
Рабочее место
- Как устроен вебКлиент и сервер, HTTP-запрос и ответ, методы, коды статуса, заголовки и cookies глазами тестировщика.урок 11 · Как устроен веб: запрос, ответ и коды статусаопираются: урок 12
- Терминал для тестировщикаФайлы и пути, переменные окружения, запуск программ и поиск по логам из командной строки.урок 9 · Терминал для тестировщикаопираются: урок 10
- DevTools браузераВкладка Network, консоль и HAR-файл: какой запрос стоит за кнопкой и как найти запрос, который уходит дважды.урок 14 · DevTools браузераопираются: урок 15
- Docker для тестировщикаОбраз, контейнер, docker compose up и логи. Почему свой стенд надёжнее общего.урок 13 · Docker для тестировщикаопираются: урок 14
- Git для тестировщикаКлон, ветка, коммит, merge request и ревью тестов, разрешение конфликта в тестовом файле.урок 10 · Git для тестировщикаопираются: урок 11
- JSON, REST и OpenAPIЧитать JSON и спецификацию OpenAPI в Swagger, отправлять запросы из curl и HTTPie, держать Postman черновиком, а не набором тестов.урок 12 · JSON, REST и OpenAPI: читаем описание APIопираются: урок 13, урок 51
Язык: Python и JavaScript для автотестов
- АсинхронностьЦикл событий, async и await в JS, asyncio в объёме тестов, параллельные запросы и забытый await.урок 27 · Асинхронность: ждать и не простаиватьопираются: урок 28
- Босс. Касса фестиваляМодуль расчёта корзины по спецификации: цены, скидки, лимиты и сбор на языке своего трека.урок 30 · Босс. Касса фестиваляопираются: урок 31
- Значения и типыЧисла, строки, логика, None против null и undefined, приведения и ловушка == в JS, почему деньги считают в копейках.урок 16 · Значения и типыопираются: урок 17
- Качество и эффективность кодаЧитаемость прежде скорости, сложность алгоритма на пальцах, линтер и форматтер с первого дня.урок 29 · Качество кода: читаемость, скорость и линтеропираются: урок 30
- Классы и объектыКогда класс, а когда функция, dataclass и class в JS, композиция вместо наследования.урок 24 · Классы и объектыопираются: урок 25
- КоллекцииСписок и массив, словарь и объект, множество; индексы, срезы, распаковка и spread.урок 18 · Коллекцииопираются: урок 19
- Модули и пакетыimport, структура проекта, виртуальное окружение и npm, pyproject.toml и package.json, циклический импорт.урок 22 · Модули и пакетыопираются: урок 23
- Ошибки и исключенияtry, except и raise, свои исключения, понятное сообщение, разница между упавшим и сломанным тестом.урок 23 · Ошибки и исключенияопираются: урок 24
- Первая программаИнтерпретатор, REPL и файл, print и console.log: Python и Node рядом, чтение синтаксической ошибки.урок 15 · Первая программаопираются: урок 16
- Переменные, выражения и условияПеременные и выражения, if и else, ранний выход вместо вложенных условий.урок 17 · Переменные, выражения и условияопираются: урок 18
- Проектирование функций и именаОдна функция одна задача, чистые функции и эффекты на краях, флаги-аргументы, имена вместо data и res, константы вместо магических строк.урок 21 · Проектирование функций и именаопираются: урок 22
- Строки и датыФорматирование строк, регулярные выражения по минимуму, datetime и Date, часовые пояса и перевод часов.урок 25 · Строки и датыопираются: урок 26
- ТипыАннотации Python, mypy и pyright, минимум TypeScript и почему типы в тестовом фреймворке окупаются.урок 28 · Типы: подписи, которые проверяет машинаопираются: урок 29
- Файлы, JSON и конфигЧтение файлов, JSON, переменные окружения и объект настроек: откуда тест узнаёт BASE_URL.урок 26 · Файлы, JSON, конфиг и переменные окруженияопираются: урок 27
- ФункцииПараметры, return, значения по умолчанию, именованные аргументы и объект-параметр, ловушка изменяемого значения по умолчанию.урок 20 · Функцииопираются: урок 21
- Циклы и обходЦикл for, генераторы списков против map, filter и reduce, обход с накоплением результата.урок 19 · Циклы и обходопираются: урок 20
Первые автотесты
- Анатомия тестаArrange-Act-Assert и Given-When-Then, одна причина упасть, имя теста как предложение.урок 32 · Анатомия тестаопираются: урок 33
- Босс П2. Ядро ценТесты на antrakt-core: границы, округление, часовой пояс и порядок скидок против мутантов.урок 40 · Босс П2. Ядро ценопираются: урок 41
- Организация тестовconftest.py, папки и маркеры, запуск подмножества тестов, плагины.урок 36 · Организация тестов: папки, conftest и маркерыопираются: урок 37
- Параметризацияpytest.mark.parametrize и test.each: таблица граничных значений становится кодом.урок 34 · Параметризацияопираются: урок 35
- Покрытие кодаcoverage.py и v8, строки и ветки, что покрытие говорит и о чём молчит.урок 39 · Покрытие кода: что говорит цифра и о чём молчитопираются: урок 40
- Проверки и контрактыОт контракта функции к проверкам: предусловия, постусловия и инварианты, сравнение коллекций, approx, исключения.урок 33 · Проверки и контрактыопираются: урок 34
- Свойства хорошего тестаFIRST, четыре столпа Хорикова и проверка поведения вместо реализации.урок 37 · Свойства хорошего тестаопираются: урок 38
- ФикстурыSetup и teardown, yield и scope, beforeEach и afterEach, скрытые зависимости и mystery guest.урок 35 · Фикстуры: подготовка и уборкаопираются: урок 36
- Что такое автотестassert, раннер, красный и зелёный тест: первый тест на pytest и Vitest.урок 31 · Что такое автотестопираются: урок 32
- TDD с нуляКрасный, зелёный, рефакторинг: правила промокодов через несколько циклов TDD.урок 38 · TDD с нуля: красный, зелёный, рефакторингопираются: урок 39
Тестовые двойники и данные
- Внедрение зависимостей ради тестируемостиЧасы, генератор номеров и почта параметром вместо подмены на месте: фейки, порт и адаптер, точка сборки.урок 44 · Внедрение зависимостей: часы, номера и почта параметромопираются: урок 45
- Время и случайность в тестахПоддельные часы вместо sleep: time-machine и vi.useFakeTimers, края суток и бронь на 10 минут; сид и генератор параметром вместо лотереи.урок 45 · Время и случайность: тесты без ожидания и без лотереиопираются: урок 46
- Зависимости и границы юнитаЧто считать юнитом, какие зависимости тест берёт настоящими, а какие подменяет, скрытые зависимости, одиночный и общительный тест, ядро и оболочка.урок 41 · Зависимости: почему юнит-тест не ходит в сетьопираются: урок 42
- Моки на практикеMock, autospec, monkeypatch, vi.fn и vi.spyOn; исходящие команды проверяют моком, исходящим запросам только подставляют ответ; свой адаптер вместо мока чужого SDK.урок 43 · Моки на практикеопираются: урок 44
- Тестовые данныеObject Mother, Test Data Builder с цепочкой и неизменяемостью, фабрика со счётчиком вместо random-логинов, Faker с сидом только для неважных полей.урок 46 · Тестовые данные: фабрики и строителиопираются: урок 47
- Тестовые двойникиDummy, stub, spy, mock и fake на сервисе заказов, проверка состояния против проверки поведения, классическая и лондонская школы и почему мок падает без бага.урок 42 · Двойники: dummy, stub, spy, mock, fakeопираются: урок 43
- Босс блока E. Генеральная репетицияКасса «Антракта» целиком без сети: бронь, оплата, сохранение, письма и билеты через двойники; набор ловит всех мутантов блока E.урок 50 · Босс блока E. Генеральная репетицияопираются: урок 51
- Мутационное тестированиеmutmut и Stryker: мутационные операторы, mutation score против покрытия, выжившие и эквивалентные мутанты, как ужать время прогона.урок 49 · Мутационное тестирование: mutmut и Strykerопираются: урок 50
- Property-based тестыhypothesis и fast-check: свойства вместо примеров (туда и обратно, инвариант, разные пути, оракул), генераторы, shrinking и закрепление контрпримера.урок 47 · Property-based тесты: правило вместо примераопираются: урок 48
- Snapshot и approval тестыКогда снимок помогает (легаси, большой стабильный вывод), а когда врёт; маленькие и inline-снапшоты, характеризационные тесты и ревью диффа снимка.урок 48 · Snapshot и approval тесты: когда снимок помогает, а когда врётопираются: урок 49
API-тестирование и архитектура фреймворка
- Авторизация в API-тестахАутентификация против авторизации, 401 против 403, Bearer-токены, JWT и cookie, матрица доступа по ролям, вход как фикстура уровня сессии и IDOR на двух пользователях одной роли.урок 53 · Авторизация в API-тестах: токены, роли и вход один разопираются: урок 54
- Архитектура API-тестов: паттерныМодели запросов и ответов, билдер тела, фабрика пользователей, декоратор транспорта с curl в отчёт, свои проверки с понятным сообщением; God-клиент, наследование ради переиспользования и логика в тестах.урок 58 · Архитектура API-тестов, часть 2: модели, билдеры, фабрики, декораторы и свои проверкиопираются: урок 59
- Архитектура API-тестов: слоиТранспорт, клиенты ресурсов, шаги-фасад и тесты; конфиг из окружения через pydantic-settings и zod вместо BASE_URL; Endpoint и Role константами; точка сборки и автоматическая проверка слоёв.урок 57 · Архитектура API-тестов, часть 1: слои, конфиг и константыопираются: урок 58
- Асинхронные операции и поллингПочему sleep плох в обе стороны, где ожидание нужно, а где прячет баг; eventual consistency, wait_until с таймаутом, дождаться письма по точному фильтру, сбой против «ещё не готово».урок 59 · Асинхронные операции: ждать по условию, а не по часамопираются: урок 60
- Босс П3. Наследство ГлебаРефакторинг tests_final_v2 в фреймворк API-тестов: зафиксировать поведение, слои и конфиг, данные через билдеры и удаление через клиент, отчёт; стенд с шестью багами и линтер архитектуры (import-linter, dependency-cruiser).урок 62 · Босс П3. Наследство Глебаопираются: урок 63
- Жизненный цикл тестовых данныхСоздать через API, проверить, убрать через API; уборка после yield и сразу после создания, обратный порядок, 404 в уборке; префикс прогона вместо случайности; изоляция, дворник и свой стенд на прогон.урок 56 · Жизненный цикл тестовых данных: создать, проверить, убратьопираются: урок 57
- Моки HTTP на уровне сетиrespx и MSW вместо подмены клиента или fetch: успех, отказ, таймаут, 5xx и обрыв связи, проверка исходящего запроса, повторы только для идемпотентного, дрейф моков.урок 60 · Моки HTTP: respx и MSW перехватывают сеть, а не клиентопираются: урок 61
- Негативные сценарии и идемпотентностьКарта отказов 400-429, правильный отказ без побочного эффекта, границы в API по осям, идемпотентные методы и Idempotency-Key.урок 55 · Негативные сценарии и идемпотентность: 401, 403, 409, 422 и Idempotency-Keyопираются: урок 56
- Отчёты о тестахЧто нужно дежурному в три ночи: шаги, вложения без секретов, окружение и история; Allure для pytest и Vitest, JUnit XML, понятные сообщения проверок.урок 61 · Отчёты: шаги, вложения и Allure для человека в три часа ночиопираются: урок 62
- Схема ответаМодели pydantic и zod как калибр для ответа: строгий режим, запрет лишних полей, null против отсутствия и нуля, JSON Schema из OpenAPI и проверка схемы отдельным слоем.урок 54 · Схема ответа: модели pydantic и zod, JSON Schema из OpenAPIопираются: урок 55
- Что проверять в APIСтатус, тело, заголовки, схема и побочный эффект; позитивные и негативные сценарии, границы в API, от сценария пользователя к тестам.урок 51 · Что проверять в API: статус, тело, заголовки, схема, побочный эффектопираются: урок 52
- HTTP-клиент в кодеСессия httpx и обёртка над fetch, базовый URL в одном месте, таймауты connect/read и три уровня защиты от зависания, ретраи только идемпотентных запросов и временных ошибок.урок 52 · HTTP-клиент в коде: сессия, базовый URL, таймауты и ретраиопираются: урок 53
Базы данных в тестах
- База из тестов: драйвер и слой запросовpsycopg 3 и pg, адрес базы из настроек, параметры вместо склейки строк, слой запросов вместо SQL в тесте, одно соединение на прогон, autocommit и типы драйвера.урок 65 · База из тестов: psycopg, pg и слой запросовопираются: урок 66
- Босс П4. Место 14БВоспроизвести двойную продажу места тестом с барьером на настоящем стенде, проверить фикс (FOR UPDATE, частичный уникальный индекс, миграция 0002 на данных), набор интеграционных тестов в контейнерах и 50 стабильных прогонов antrakt-check.урок 70 · Босс П4. Место 14Бопираются: урок 71
- Гонки в тестахCheck-then-act и окно между проверкой и записью; детерминированная гонка через точку переключения, барьер и инвариант на стенде, стабильность в 50 прогонов; частичный уникальный индекс, FOR UPDATE и ON CONFLICT; модель состояний на hypothesis и fast-check как охотник за порядком шагов.урок 69 · Гонки: два запроса за одно местоопираются: урок 70
- Данные в базе: сиды, фабрики, уборкаСиды, данные теста и мусор; связные фабрики в базе, случайность с сидом и счётчик для уникальности; откат транзакции, TRUNCATE и удаление по префиксу; уборщик и изоляция параллельных потоков.урок 66 · Данные в базе: сиды, фабрики, откат и изоляцияопираются: урок 67
- Миграции и схема как контрактОкно выкатки, в котором старый код живёт на новой схеме; что его ломает; expand/contract; тесты миграций вперёд с нуля, на данных, на совместимость и назад; миграция на грязных данных с предварительной проверкой.урок 68 · Миграции и схема как контрактопираются: урок 69
- Проверка в базе после вызова APIНаблюдаемое поведение против реализации, управляемые и неуправляемые зависимости, когда проверка в базе честная (инвариант, скрытое обязательство, схема, слой данных) и как узнать проверку реализации по рефакторингу.урок 64 · Проверка в базе после вызова API: результат или реализацияопираются: урок 65
- SQL для тестировщикаSELECT, WHERE, LIKE и ловушка с _, COUNT, JOIN, GROUP BY с HAVING и NOT EXISTS на базе «Антракта»: разбор инцидента, поиск дублей и мусора тестов, правила работы с общей базой только на чтение.урок 63 · SQL для тестировщика: SELECT, WHERE, JOIN и COUNT на базе «Антракта»опираются: урок 64
- Testcontainers: настоящий Postgres в тестеГде SQLite врёт (голые колонки, типы, timestamptz, LIKE, блокировки), Postgres в контейнере из кода теста, миграции стенда вместо второй схемы, контейнер на прогон и откат на тест, параллельные воркеры и версия образа.урок 67 · Testcontainers: настоящий Postgres в тестеопираются: урок 68
UI и E2E
- Босс П5. Кнопка «Купить»E2E критического пути покупки на стенде, компонентные тесты корзины, визуальный тест схемы зала и проверка доступности оплаты; antrakt-check ловит пять UI-багов сезона 3, в наборе ни одного sleep.урок 82 · Босс П5. Кнопка «Купить»опираются: урок 83
- Браузеры, экраны и доступностьПроекты Playwright для браузеров и мобильных экранов, матрица без взрыва числа прогонов, параллельные воркеры и шардирование, автоматическая проверка доступности axe-core и её границы.урок 80 · Браузеры, экраны, воркеры и доступностьопираются: урок 81
- Визуальная регрессияСкриншот против эталона, порог и попиксельное сравнение, маски для живых данных, стабильный рендер в контейнере, снапшоты разметки и ARIA, где визуальный тест окупается (схема зала) и где только шумит.урок 79 · Визуальная регрессия и снапшоты разметкиопираются: урок 80
- Вход и данные через APIЛогин один раз через API и storageState вместо формы в каждом тесте, роли как отдельные состояния, подготовка данных через API, тестовые хуки стенда и почему они выключены в проде.урок 76 · Состояние и вход: сессия и данные через APIопираются: урок 77
- Компонентные тестыTesting Library в happy-dom: рендер компонента, запросы как у пользователя, user-event вместо fireEvent, findBy для асинхронного, тест поведения, а не устройства; Testing Trophy и место компонентных тестов.урок 78 · Компонентные тесты: проверять как зритель, а не как разработчикопираются: урок 79
- ЛокаторыПоиск по роли и доступному имени, по подписи, по тексту и data-testid; порядок выбора, почему XPath от корня и цепочки классов ломаются от любой вёрстки, доступность как побочный выигрыш.урок 72 · Локаторы: роль, подпись, текст и data-testidопираются: урок 73
- Ожидания в UI-тестахAuto-wait и проверки действуемости, web-first assertions с повтором, почему sleep и waitForTimeout делают набор медленным и флакающим, ожидание ответа сети и состояния вместо времени, доказательство стабильности --repeat-each.урок 74 · Ожидания: ни одного sleepопираются: урок 75
- Сеть в UI-тестахpage.route и MSW: подменить ответ, задержать, оборвать запрос; экран «шлюз недоступен»; когда мок бэкенда честен (компонентный тест, внешний шлюз) и когда превращает e2e в обман.урок 77 · Сеть в UI-тестах: page.route, MSW и где мок врётопираются: урок 78
- Сколько нужно e2eКритические пути денег и доступа, независимость и свои данные у каждого теста, цена одного e2e в минутах и флаке, куда опустить проверку вместо ещё одного e2e.урок 81 · Хороший e2e и сколько их нужноопираются: урок 82
- Фронтенд для тестировщикаHTML как дерево DOM, атрибуты и доступное имя, CSS-селекторы, события и их всплытие, как браузер грузит и рисует страницу, почему элемент есть в DOM, но его не видно, и что из этого нужно тестам.урок 71 · Фронтенд для тестировщика: из чего сделана страницаопираются: урок 72
- Page Object и компонентыСтраница и компоненты как слой между тестом и разметкой, методы-намерения вместо кликов, где живут проверки, как не вырастить God Object; App Actions и Screenplay как альтернативы.урок 75 · Page Object и компонентыопираются: урок 76
- Playwright: первый тестpytest-playwright и @playwright/test, браузер, контекст и страница, первый тест покупки билета на стенде, codegen как черновик, trace viewer и отчёт при падении.урок 73 · Playwright: первый тест покупкиопираются: урок 74
Стратегия: какие тесты писать
- Архитектура и тестируемостьГексагональная архитектура, порты и адаптеры, функциональное ядро и императивная оболочка, Humble Object: как устройство кода решает, сколько моков понадобится тесту.урок 87 · Архитектура и тестируемость: порты, ядро и скромная оболочкаопираются: урок 88
- Босс П6. Партнёр «ПлатиМ»Контракт с «ПлатиМ» по OpenAPI, фейк шлюза на стенде, вебхуки с подписью и повторами, идемпотентность оплаты; antrakt-check ловит три бага сезона 4, среди них смену формата вебхука.урок 91 · Босс П6. Партнёр «ПлатиМ»опираются: урок 92
- Вертикальные слайсы и границы тестовКод по фичам, а не по слоям: тест на слайс целиком от запроса до базы, где проходит граница теста и что в слайсе всё же стоит проверять юнитами.урок 88 · Вертикальные слайсы: где проходит граница тестаопираются: урок 89
- Контрактное тестированиеПочему широкие интеграционные тесты не масштабируются; тесты взаимодействия плюс контрактные; контракт по OpenAPI, валидация запросов и ответов, дифф спецификаций; consumer-driven контракты, Pact и can-i-deploy; кто владеет контрактом.урок 89 · Контрактное тестирование: OpenAPI, Pact и кто владеет контрактомопираются: урок 90
- Пирамида тестовОткуда взялась пирамида Майка Кона, что в ней верно до сих пор (много дешёвых и быстрых проверок, мало дорогих) и что устарело; «рожок мороженого» и как его узнать в наборе.урок 83 · Пирамида тестов: что в ней верно и что устарелоопираются: урок 84
- Трофей, сота и размеры тестовTesting Trophy, сота для микросервисов и размеры тестов Google: small, medium, large по тому, что тесту разрешено (процесс, машина, сеть), вместо споров о словах unit и integration.урок 84 · Трофей, соты и размеры тестов Googleопираются: урок 85
- Уровни тестов и общие словаUnit, integration, contract, e2e; одиночный и общительный юнит, узкий и широкий интеграционный тест; почему интеграционный и e2e путают и как договориться о словах в команде.урок 85 · Unit, integration, contract, e2e: договориться о словахопираются: урок 86
- Фейки внешних систем и вебхукиФейк-сервер с состоянием вместо моков в сквозных тестах, песочница провайдера и её пределы, вебхуки с подписью HMAC, повторами и дублями, идемпотентный обработчик.урок 90 · Фейки внешних систем и вебхуки: шлюз с памятью, подпись и дублиопираются: урок 91
- Что тестировать: карта рисковРиск как вероятность на цену ошибки, сценарии использования вместо деталей реализации, карта рисков «Антракта» и выбор уровня теста для каждого риска.урок 86 · Что тестировать: карта рисков «Антракта»опираются: урок 87
Надёжность набора тестов
- Босс П7. Пятничный flakyНабор из 40 тестов против стенда, 9 из них флачат по разным причинам: найти и починить причины, а не симптомы, отчёт по каждому и 100 зелёных прогонов подряд.урок 99 · Босс П7. Пятничный flakyопираются: урок 100
- Запахи тестов и рефакторинг тестовДублирование, загадочный гость, жадный тест, логика в тесте, DRY против DAMP: как отрефакторить тесты и не потерять ни одного пойманного бага.урок 98 · Запахи тестов: рефакторинг без потери пойманных баговопираются: урок 99
- Изоляция и параллельный прогонpytest-xdist, воркеры Vitest и Playwright, случайный порядок, тест-загрязнитель и тест-жертва, уникальные пространства данных и стресс-прогон новых тестов перед merge.урок 95 · Изоляция и параллельный прогон: загрязнители, жертвы и свои данныеопираются: урок 96
- Карантин flaky-тестовКарантин как процесс с владельцем и сроком: вход по стабильности за неделю, выход по зелёной серии, чем карантин отличается от skip навсегда и как не потерять тест в нём.урок 94 · Карантин: убрать моргающий тест из блокирующих и не потерять егоопираются: урок 95
- Легаси без тестовХарактеризующие тесты, golden master и approval, швы и разрыв зависимостей, приёмы sprout и wrap: как покрыть тестами код, который страшно трогать.урок 97 · Легаси без тестов: характеристики, швы и ростокопираются: урок 98
- Откуда берутся flakyШесть причин флака: асинхронность, время, порядок, общие данные, ресурсы, внешние сервисы; как размер теста меняет вероятность флака и как по симптому угадать причину.урок 92 · Откуда берутся flaky: шесть причин и размер тестаопираются: урок 93
- Скорость набора тестовПрофилирование прогона, самые дорогие фикстуры, кэш и выбор тестов по изменениям: как ускорить набор, не потеряв проверки.урок 96 · Скорость набора: профиль, дорогие фикстуры и тесты по изменениямопираются: урок 97
- Флакость как вероятностьИзмерить флакость, а не гадать: flip rate, пары «упал, потом прошёл» на одном коммите, бета-интервал по истории прогонов, пол флакости фреймворка и почему автоповтор врёт.урок 93 · Флакость как вероятность: считать, а не гадатьопираются: урок 94
CI/CD и инфраструктура тестов
- Стенд в CIdocker compose и service-контейнеры в job, ожидание готовности стенда, логи и дамп упавшего стенда в артефакты.урок 101 · Стенд в CI: docker compose в job, готовность без sleep и логи упавшего стендаопираются: урок 102
- Шарды, матрицы и отчётыМатрица версий и треков, шардирование e2e на несколько машин, артефакты с трейсами, отчёт Allure и комментарий с итогом в PR.урок 102 · Шарды, матрицы и отчёты: e2e на четырёх машинах и итог прямо в PRопираются: урок 103
- CI с нуляНепрерывная поставка и конвейер деплоя, быстрая обратная связь; GitHub Actions: workflow, job, step; pytest, Vitest и Playwright в CI и бюджет минут.урок 100 · CI с нуля: конвейер, GitHub Actions и быстрая обратная связьопираются: урок 101
- Босс П8. КонвейерCI репозитория тестов: линт, unit, API на стенде, e2e шардами, отчёт в PR и ночной полный прогон, весь пайплайн не дольше 10 минут.урок 106 · Босс П8. Конвейеропираются: урок 107
- Ворота качестваЧто блокирует merge: линтеры, типы, pre-commit, стресс-прогон изменённых тестов и защита от удалённых и ослабленных проверок.урок 103 · Ворота качества: что блокирует merge и как тесты не исчезают молчаопираются: урок 104
- Окружения и тестовые данныеdev, stage и preview-стенды, флаги функций, тестовые данные на общем стенде: где запускать какой тест и почему.урок 104 · Окружения: dev, stage, превью веток, флаги функций и тестовые данные на общем стендеопираются: урок 105
- Тестирование в продеSmoke после деплоя, синтетический мониторинг, канареечный выпуск, логи, метрики и трейсы как оракул.урок 105 · Тестирование в проде: smoke после выкладки, синтетика, канарейка и телеметрия как оракулопираются: урок 106
Нефункциональное
- Безопасность для тестировщикаIDOR и проверка прав, инъекции, вредные входные данные, OWASP Top 10 глазами API-тестов.урок 109 · Безопасность для тестировщика: IDOR, права и вредные входные данныеопираются: урок 110
- Нагрузочное тестированиеВиды нагрузки, RPS, задержка, перцентили и SLO; Locust и k6, стадии разгона и пороги; первый сценарий против стенда и чтение отчёта.урок 107 · Нагрузочное тестирование: перцентили, SLO, Locust и k6опираются: урок 108
- Профиль «Ночи продаж»Модель трафика, данные и прогрев, интерпретация отчёта и поиск узкого места стенда по перцентилям.урок 108 · Профиль «Ночи продаж»: модель трафика, данные и узкое местоопираются: урок 109
- Совместимость и версии APIОбратная совместимость как тест, старые клиенты, ломающие и безопасные изменения в диффе OpenAPI.урок 111 · Совместимость и версии API: старые клиенты и дифф спецификацииопираются: урок 112
- УстойчивостьТаймауты, ретраи, деградация и простой chaos через Toxiproxy: что делает сервис, когда шлюз отвечает 30 секунд.урок 110 · Устойчивость: таймауты, повторы, деградация и простой chaosопираются: урок 111
Метрики и команда
- Метрики качестваПокрытие, mutation score, утёкшие баги, MTTR и доля флака; закон Гудхарта и пары метрик, которые друг друга страхуют.урок 112 · Метрики качества и закон Гудхартаопираются: урок 113
- Тест-стратегия и QA в командеДокумент тест-стратегии, ревью тестов, кто пишет тесты и автотестировщик как тренер команды.урок 113 · Тест-стратегия и автотестировщик в командеопираются: урок 114
Тесты и ИИ-агенты
- Тесты, написанные ИИЧто делегировать агенту, а что нет; чек-лист ревью сгенерированных тестов и мутанты как объективная оценка.урок 116 · Тесты, написанные ИИ: что делегировать агенту и как их ревьюитьопираются: урок 117
- Spec-driven developmentСпецификация, план, задачи и тесты; критерии приёмки GIVEN/WHEN/THEN как исполняемые тесты, которые агент не может править.урок 115 · Spec-driven development: критерии приёмки как тестыопираются: урок 116
- TDD в цикле ИИ-агентаТест как ограничитель и спецификация для агента, как агенты «чинят» тесты, тавтологичные тесты, независимый оракул и CI-проверка, что проверок не стало меньше.урок 114 · TDD в цикле агента: тест как ограничитель и почему агент «чинит» тестыопираются: урок 115
Финал и карьера
- Финал П9. Ночь продажТест-стратегия релиза, фреймворк из П3-П8, CI, нагрузочный прогон и синтетический мониторинг, защита перед командой; грейды, портфолио и собеседование автотестировщика.урок 117 · Финал П9. Ночь продаж