Тесты и грабли
2 subscribers
5 links
Личный опыт и разборы: автоматизация на Playwright, CI/CD, наблюдаемость, AI в тестировании. Автор в Дублине 🇮🇪
Download Telegram
🔥 e2e-тесты и параллельный прогон — огонь. Но будь готов на щелчок по носу от окружения

Писать e2e, ускорять их, гонять на 2+ воркерах — правильно и мощно. Только параллелизм упирается не в тесты, а в то, что под ними.

Кейс с прод-подобного stg: прогоны посыпались каскадом. /studies/ висит >60 с — вечный спиннер, следом падают API и логин.

Первая мысль — «флейки, чиним тесты». А нет. Железо простаивало — упёрлись в потолок коннектов БД:
▪️ db-f1-micro даёт всего 25 соединений на всех — в норме мы и так сидим почти впритык.
▪️ Проверили экспериментом: +1 реплика backend → коннекты дошли до 26 → FATAL: connection slots → легли и API, и логин.

Что сделали (временно и обратимо):
▪️ Подняли max_connections 25 → 50 на том же дешёвом инстансе. Апгрейд размера БД не брали — слишком дорого; лимит коннектов снимает главный потолок почти даром.
▪️ Вернули 2 реплики backend — есть чем дышать, реальная параллельная ёмкость для /studies/.

Зачем так: если каскад исчезнет — это доказательство для команды, что упор в коннекты БД + ёмкость бэкенда, а лечится настройкой лимита и репликами — не переписыванием тестов и не дорогим апгрейдом БД. Плюс готовая целевая конфигурация под terraform.

Мораль: сильный e2e-инженер не только пишет и параллелит тесты — он читает метрики окружения и лезет в инфру. Иначе «тесты флейкают» останется вечным диагнозом там, где на самом деле задыхается БД.

#e2e #testing #devops #infra #postgres #staging · из практики
🧪 Флейки лечат не ретраями, а изоляцией и ожиданиями

Ретрай на упавшем тесте прячет проблему, а не решает. Стабильные e2e начинаются не с --retries, а с трёх вещей:
▪️ Никаких sleep(3000) — только web-first ожидания (ждём состояние/элемент, а не время). Отсюда 90% «мигающих» падений.
▪️ Изоляция данных на воркер. Тесты дерутся за общего юзера/запись → рандомные падения на параллели. Дай каждому воркеру свои данные (префикс/namespace/отдельный аккаунт).
▪️ Чистый старт. Не полагайся на состояние от прошлого теста — каждый сам создаёт и убирает своё.

Ретрай оставь как сигнал «тест нестабилен, разберись», а не как лечение.

#e2e #flaky #testing #qa #automation · заметка
🟢 Прогон зелёный, а прод лёг. Почему e2e — не гарантия

e2e гоняет happy-path в стерильном stg на игрушечных данных. Прод падает от другого:
▪️ Нагрузка и конкуренция — коннекты к БД, лимиты, тайминги; на stg их нет.
▪️ Реальные данные — пустые/огромные/кривые записи, которых нет в фикстурах.
▪️ Интеграции и конфиг — сторонние сервисы, фичефлаги, env, отличные от stg.

e2e ловит регрессии логики, но не заменяет observability. Нужны метрики, алерты и синтетика в проде — иначе «у нас всё зелёное» прозвучит ровно в момент инцидента.

#testing #devops #observability #sre #qa · заметка
🧩 Почему я разбиваю E2E на изолированные CI-стейджи

Монолитный E2E-джоб — боль: упал один шаг, а перезапускать надо всё, и непонятно, где течёт.

Что стабилизировало пайплайн на бизнес-критичных флоу:
— каждый логический блок = отдельный стейдж со своим сетапом/тир-дауном
— падение локализуется мгновенно, ретраится только упавший кусок
— скрины/трейсы/логи собираются по стейджам

«Мигающих» падений почти не осталось, надёжность выросла заметно.
🔎 Разбор инцидента за минуты, а не часы

Самое дорогое в инциденте — не фикс, а поиск причины в тоннах логов.

Написал на Python движок, который парсит логи и тянет паттерны из Splunk: сам подсвечивает аномалии и вероятную первопричину. Время расследования инцидента упало примерно на 20%.

Мораль: наблюдаемость — это часть работы QA/SDET, а не только «девопсов». Кто первый находит причину — тот и герой релиза.

Чем копаете логи — грепом или чем-то умнее?
🎭 Playwright на Python или TypeScript — что выбрать?

Гонял оба в проде. Коротко:
— TS: роднее для Playwright (доки, релизы, авто-вейты «из коробки»), лучше для фронт-команд
— Python: если стек уже питоновый (API-тесты, дата-пайплайны, скрипты) — не плоди зоопарк языков

Мой критерий: бери язык, на котором говорит команда и бэкенд. Единый стек > «модный» фреймворк.

На чём вы пишете UI-автотесты?
🤖 Как AI реально экономит время в автотестах

Использую AI в рабочем цикле, но не слепо:
— черновик теста по описанию фичи → правлю под реальные локаторы
— разбор упавшего трейса: скармливаю лог → получаю гипотезу быстрее
— Playwright MCP: агент сам ходит по странице и помогает достать стабильные селекторы

Важно: AI — это ускоритель джуна внутри сеньора, не замена ревью. Всё, что он генерит, проходит через мои глаза.

Пускаете AI в свой тестовый код? И до какой границы?
📊 Prometheus + Grafana + Alertmanager глазами тестировщика

Собрал мониторинг на staging — и это изменило подход к QA:
— метрики приложения на дашборде = вижу деградацию ДО того, как её найдёт ручной тест
— алерты на аномалии = регресс ловится в реальном времени, а не в отчёте на следующий день

Тестировать без наблюдаемости — как вести машину с закрытыми глазами: едешь, пока не врежешься.

У вас QA смотрит в метрики или только в тест-репорты?
🔐 Как я закрыл дев/staging без возни с классическим VPN

Открытые тестовые окружения — дыра: и данные текут, и «левые» стучатся.

Поднял Tailscale (mesh-VPN на WireGuard): доступ к staging только для своих устройств, публичных портов — ноль. Настройка ~15 минут.

Тестовое окружение должно быть закрытым по умолчанию. Безопасность — тоже качество.

Чем закрываете нестендовые окружения?
🧪 Как тестировать дата-пайплайны (Airflow + Spark), а не только UI

Тестить кнопки умеют все, а данные — редко. А там самые дорогие баги: тихо испортил датасет — узнал через месяц.

Что проверяю в ETL:
— схема и типы на входе/выходе (контракт данных)
— «не потерялись ли строки»: count на источнике vs приёмнике
— битые записи не роняют пайплайн, а уходят в карантин
— идемпотентность: повторный прогон не дублирует

Данные — это тоже продукт. Их надо тестировать.
🐤 Canary-проверки: как ловить дрейф данных рано

Canary — набор лёгких проверок, что данные «в норме» на каждом прогоне:
— ключевые поля не null, где не должны
— объёмы/распределения не скакнули в разы
— свежесть: данные обновились, а не застряли

Дешевле полного теста и ловит 80% «тихих» поломок данных до того, как их увидит бизнес.
Почему у меня тесты гоняются на КАЖДЫЙ pull request

Правило, которое экономит недели: ни один PR не мёржится без зелёного CI.

На GitHub Actions вешаю на каждый PR: линт, юнит, ключевые API/E2E, проверку сборки. Баг ловится на ревью, а не на проде — дешевле в разы.

«Потом протестируем» = «никогда». Автопроверка на PR — самая выгодная инвестиция в качество.

У вас мёрж без прохождения CI возможен?
🏥 Автотесты под регуляторику (медтех, FDA 21 CFR Part 11)

Делал автоматизацию для регулируемого домена — там качество это требование закона, а не «хотелка».

Особенность: доказать нужно не только «работает», но и что каждое действие залогировано, подписано и воспроизводимо (audit trail, электронные подписи, контроль версий). Автотесты заодно генерят доказательную базу для аудита.

В регулируемых доменах тестировщик — часть комплаенса. Ответственность выше, и это интересно.
🔗 Баг, который не видно в UI: рассинхрон API и БД

UI зелёный, а в базе — мусор. Классика распределённых систем.

Поэтому проверяю сквозь слои:
— ответ API совпадает с тем, что реально легло в БД (PostgreSQL/Mongo)
— нет «осиротевших» записей и битых связей
— консистентность между сервисами после операции

Тестировать только через UI — значит видеть верхушку айсберга. Данные под ним важнее.
🛠️ Playwright 1.62: компонентные тесты переезжают на «stories и galleries»

Component testing в Playwright переосмыслили. Основа теперь — stories и galleries:
▪️ story оборачивает компонент в один конкретный сценарий — захардкоженные пропсы, мок-данные, нужное состояние;
▪️ galleries группируют истории — гоняешь и смотришь варианты компонента разом.

Зачем QA: меньше хрупких обёрток и рантайм-магии в тестах компонентов — по духу как Storybook, но прямо в Playwright, с его трейсами и стабильностью.

Подробнее

#playwright #testing #frontend #e2e #release · Playwright
🛠️ Alibaba выложила open-code-review — гибридный авто-ревью кода

Опенсорсный инструмент код-ревью, обкатанный на масштабах Alibaba. Идея — гибрид:
▪️ детерминированные пайплайны (правила/линтеры) + LLM-агент → точечные комментарии на уровне строк;
▪️ не «AI написал абзац воды», а конкретные замечания по коду.

Зачем SDET: снимает рутину ревью и ловит очевидное до человека. Но LLM-часть держи на коротком поводке — детерминизм первичен, агент вторичен.

Подробнее

#codereview #ai #devtools #quality · GitHub
👨‍🏫 Как перевести ручную QA-команду на автоматизацию (без бунта)

Менторил команду из 5 инженеров в переходе на современную автоматизацию. Что сработало:
— начинали с их же боли: самый нудный ручной кейс автоматизировали первым
— короткие воркшопы по Python вместо «идите читайте доки»
— автотест не враг ручного тестировщика, а его усилитель

Автоматизация приживается через людей, а не через фреймворк. Технологии вторичны.
🔥 GitHub Trending утонул в агентах для кодинга. Что из этого реально для QA

Открываешь трендинг — сплошь «AI coding agent»: pi, orca (флот параллельных агентов), code-review-graph и wigolo (контекст и поиск для агента через MCP), гейтвеи вроде OmniRoute. Волна.

Что стоит внимания SDET, а не только хайпа:
▪️ MCP-инструменты, дающие агенту ровно нужный контекст кодовой базы — меньше галлюцинаций в правках тестов;
▪️ оркестраторы параллельных агентов — но это сырой фронтир, не прод.

Остальное — обёртки вокруг одного LLM. Правило: агент помогает писать и чинить тесты, но диагноз и архитектуру держи за собой.

#ai #agents #mcp #sdet #devtools · наблюдение
🐳 Одинаковые окружения = конец «у меня локально работает»

Гонял Selenium/Pytest в Docker — и «работает только на моей машине» ушло как класс.

Плюсы для тестов:
— один образ локально и в CI → воспроизводимость
— поднял → погонял → снёс, никакого мусора между прогонами
— параллель на разных версиях браузера/сервиса без конфликтов

Контейнеры для QA — не «девопс-магия», а базовая гигиена стабильных тестов.
🤝 Параллельное тестирование с AI — мой любимый воркфлоу

Перед тестированием фичи прошу Claude построить тест-план и гонять его через Playwright MCP — а сам параллельно тестирую то же руками.

Проверяем одно и то же, но с РАЗНЫМИ гипотезами:
— AI находит краевые случаи, о которых я не подумал
— я нахожу то, что AI пропускает: там, где нужен бизнес-контекст и интуиция

По отдельности никто не ловит всё. Вместе — покрытие заметно шире.

Это не замена ручному QA. Это второй тестировщик, который не устаёт повторять одни и те же сценарии. Но результат всё равно нужно ревьюить: AI застревает, не понимает приложение, копает несуществующее.

Пробовали так? 👇
🧪 «Anti-AI-slop»: инструменты против мусорного кода от агентов

Появился hallmark — «скилл» для Claude Code / Cursor / Codex против AI-slop (генеративной воды и шаблонного мусора). Симптом времени: агенты пишут много, а качество проседает.

Для QA это сигнал: с ростом AI-ассистированной разработки растёт класс дефектов «выглядит правдоподобно, но неверно». Ревью и тесты теперь ловят не только логические баги, но и правдоподобный slop.

Подробнее

#ai #codequality #review #testing · GitHub