Восемь тестов, 23 секунды и красный, который указывает адрес и факт

Код теста, живой вывод pytest, разбор падения и конфиг запуска по расписанию.

Что это

Агент пишет набор, а не «скрипт, который однажды сработал»

Скрипт проверяет и молчит. Набор говорит: что проверял, что ожидал, что получил, и почему упал. Каждый тест — одно обещание системы, сообщение об ошибке содержит адрес и фактическое значение, а код возврата означает «можно катить» или «нельзя».

Вход и выход

Что написано и прогнано в этой сессии, а что подключим

Вход

Живой адрес и карта сайта: 1332 адреса, из них выборка на регресс.

  • Набор — написан

    Восемь тестов на pytest: карта, главная, один заголовок, длина title, описание, 404, переход, ссылки.

  • Прогон — выполнен

    pytest 9.2.0, Python 3.12: 7 прошло, 1 упал, 23,11 секунды. Вывод приведён как есть.

  • Падение — разобрано

    Упал тест описания на /docs/: 87 знаков при пороге сто. В сообщении адрес и значение.

  • CI по расписанию — подключим

    Timeweb Cloud или Amvera: токен и запуск сборки, один день. Плюс Playwright на стенде — два дня.

Что открывается: код, живой прогон и конфиг

Вывод консоли и код — из этой сессии, без правок; адреса настоящие

  1. 1

    Код и правила набора

    Восемь тестов, ворота и сообщение о падении: что видит разработчик.

  2. 2

    Живой прогон pytest

    Консоль: 8 собранных тестов, 7 прошло, 1 упал, 23,11 с, код возврата.

  3. 3

    Конфиг и разбор падения

    Запуск по расписанию, шаги, что делает CI при красном.

Что агент делает и что остаётся человеку

Пишет тестАгент: одно обещание на тест, понятное сообщение о падении. Человек: говорит, что критично.
Собирает наборАгент: из карты адресов и ворот; новый адрес попадает сам. Человек: решает, что в наборе не нужно.
ГоняетАгент: локально и в CI, с кодом возврата и временем. Человек: выбирает расписание.
Разбирает красноеАгент: адрес, ожидание, факт. Человек: дефект кода или устаревший тест.
Держит наборАгент: обновляет ожидания вместе с требованиями. Человек: подтверждает смену нормы.

Сценарий: от требования до зелёного CI

  1. 1

    Требование

    Ворота приёмки: код, один заголовок, длина описания, живые ссылки.

  2. 2

    Тест

    Агент пишет проверку: адрес, ожидание, фактическое значение в сообщении.

  3. 3

    Прогон

    Локально: pytest -v, вывод и код возврата.

  4. 4

    CI

    Запуск по расписанию и на релиз; при красном — сообщение в чат.

  5. 5

    Разбор

    Красный разбирается как дефект или как устаревший тест — с решением человека.

  6. 6

    Выход

    Набор, вывод прогона, конфиг; история по релизам.

Откуда данные

Что нужно на входе

  • Адрес стенда

    Живой домен, staging или локальная сборка: тесты идут по HTTP.

  • Ворота приёмки

    Что считается нормой — из них рождаются ожидания в тестах.

  • Карта адресов

    Чтобы набор пополнялся сам, а не «когда вспомним».

  • Токен CI

    Право запускать сборку: Timeweb Cloud, Amvera или свой раннер.

Норма, на которую опирается работа

Краевые случаи

Где решает человек, а не агент

  • Тест устарел

    Агент приносит ожидание и факт; править тест или код — решает человек.

  • Тест плавает

    Агент повторяет прогон и помечает «нестабильно», а не «упало».

  • Стенд недоступен

    Прогон помечается «не выполнен»; зелёный цвет не выдаётся за результат.

  • Playwright нужен, а браузера нет

    Агент пишет, что проверка не выполнена, и не выдаёт её за пройденную.

Что обычно возражают

  • «Автотесты пишут разработчики»

    Пусть пишут: набор из ворот приёмки пишется быстрее и не спорит с кодом.

  • «Набор быстро сгниёт»

    Набор строится из карты адресов и ворот: новый адрес попадает сам.

  • «23 секунды — это не серьёзно»

    Серьёзно — это когда прогон можно запускать на каждый коммит.

  • «А Playwright?»

    В этом прогоне браузера не было, и это написано; для него нужен стенд, два дня.

  • «Кто чинит красное?»

    Разработчик — по дефекту, который агент оформляет с адресом и фактом.

Границы

Чего агент не делает

Не выдаёт «не выполнен» за «проходит» и не глушит плавающий тест вместо разбора. Не правит код приложения. Не гоняет тесты по боевым данным клиента. Не обещает покрытие: восемь тестов — это восемь тестов, а не «полное покрытие». Гарантий нет — ст. 5 ФЗ-38.

Вопросы, которые задают первыми

С чего начать?

Пришлите адрес стенда и ворота приёмки — вернём набор, прогон и конфиг CI.

Что нужно от нас?

Адрес стенда; для расписания — токен на запуск сборки, один день.

Сколько идёт прогон?

Восемь тестов — 23 секунды на живом адресе; сорок адресов — около минуты.

Это покроет всё приложение?

Нет: набор закрывает ворота приёмки и пополняется по карте адресов.

Что придёт при падении?

Сообщение с адресом, ожиданием и фактическим значением, плюс ссылка на отчёт.

Роль целиком

Что ещё берёт на себя агент

Роли

Собрать набор автотестов на вашем стенде

Пришлите адрес и ворота приёмки — вернём набор pytest, вывод прогона и конфиг запуска.