Testence: как я проверяю веб-приложения с ИИ

Мне всегда было неудобно принимать результат проверки в формате «я покликал, всё хорошо». Даже если это говорит умный агент. Что он проверил? Как повторить тот же сценарий после следующего изменения? Почему он решил, что данные действительно сохранились?

Я сделал Testence, потому что хотел получать результат, который можно открыть, понять и повторить. Агенту удобно поручать подготовку сценария и расследование ошибки. А саму проверку я хочу запускать столько раз, сколько понадобится, с понятным набором действий.

Для меня главное достоинство Testence — связь между обещанием продукта и доказательством. «Пользователь может сохранить заявку» должно означать, что мы проверили сохранение, а затем сохранили материалы этого прогона. В этом гайде начнём с готового примера и перейдём к собственному приложению.

1. Установите Testence в отдельное окружение

Создайте пустую папку для учебного примера. Установите Python и uv; затем выполните:

uv venv
uv pip install testence
uv run python -m playwright install chromium
uv run testence doctor

Это установка опубликованного пакета. Актуальные требования и варианты работы с системным браузером приведены в README Testence. Проект развивается в alpha-ветке; учебный запуск я делаю на синтетических данных.

2. Получите первый повторяемый прогон

uv run testence init .
uv run testence plan prepare .testence/specs/onboarding.md --project .
uv run testence run --project . --run-id r-onboarding
uv run testence inspect runs/r-onboarding
uv run testence report runs/r-onboarding

Здесь создаётся учебный каркас .testence/. Это пример работы инструмента, а не проверка вашего продукта. Я советую сначала пройти этот короткий маршрут: так гораздо проще понять, куда записываются результаты и как выглядит отчёт.

Если plan prepare сообщает blocker, исправьте указанную предпосылку и повторите команду. Например, подготовьте недостающий стенд. Готовность к запуску стоит выяснять до того, как тратить время на браузер.

3. Посмотрите, как выглядит обнаруженная ошибка

В учебном примере есть сценарий, где интерфейс сообщает об успехе, а независимая проверка его не подтверждает:

uv run testence run --project . --run-id r-demo-failure -- .testence/examples/test_demo_failure.py -q
uv run testence report runs/r-demo-failure

Этот тест должен завершиться неуспешно. Именно такой результат нам и нужен: открыть отчёт и увидеть, почему зелёного сообщения на экране недостаточно. Команды сверены с публичным quick start.

Мне очень нравится этот пример. Он делает разницу между «похоже, работает» и «мы проверили результат» осязаемой за один запуск.

4. Подключите своё приложение

Для первого собственного теста отдельный план не обязателен. Начните с публичной страницы локального стенда. Создайте рядом с тестом testence.json:

{"base_url": "http://localhost:3000", "auth": "none"}

Замените адрес на свой. Затем проверьте доступность:

uv run testence doctor --target

Вот мой минимальный пример test_smoke.py. Название заголовка замените на реально существующее в вашем интерфейсе:

from testence.engine import Target


def test_home_page(ex):
    ex.goto("/", intent="Открыть главную страницу")
    ex.expect_visible(
        Target("role", "heading", name="Добро пожаловать"),
        intent="Проверить заголовок главной страницы",
    )
uv run testence run --project . -- test_smoke.py -q

Это проверка отображения. Для проверки сохранения данных нужен ещё независимый источник результата — например, чтение через API. Подключение реального приложения описано в руководстве первого теста.

5. Дайте агенту задачу, которую можно проверить

Вместо общего «протестируй сайт» я формулирую один сценарий:

Проверь форму заявки на локальном QA-стенде через Testence.
Используй только синтетические данные.
После отправки проверь подтверждение в интерфейсе и запись через API.
Если API недоступен, укажи, что сохранение пока не доказано.
Сохрани тест и отчёт. При ошибке предложи небольшой diff,
а затем повтори тот же сценарий.

Так агент понимает, что считать успехом. Если ошибка повторилась, у меня остаются шаги, состояние страницы и материалы для разбора. Я могу отдать их другому человеку и продолжить работу без пересказа всей переписки.

Практика: добейтесь полезного красного теста

Сначала получите успешный учебный прогон. Затем запустите r-demo-failure, откройте отчёт и объясните, какое обещание не выполнено. После этого напишите один smoke-тест для своей страницы.

Я считаю Testence сильным инструментом именно для работы с кодинг-агентами: он помогает превращать их рассуждения в проверяемую работу. Исходники, документация и обсуждение улучшений — в репозитории Testence.

Если хочется применить этот подход к полезной чужой задаче, продолжайте в гайде ComputeForGood. Ниже — проверка знаний и сохранение прогресса после входа.

Проверка знаний

Читайте свободно. Войдите, чтобы отвечать и сохранять прогресс.

Как проверить сохранение заявки?

Кто выполняет рутинный повтор Testence?

Что делать, если plan prepare сообщает blocker?