agentsclimarketplace

Test writer

Skill goldenprofile/llm-skills/test-writer

Написание тестов для Python-бэкенда (pytest-first): стратегия покрытия критического пути, дизайн кейсов (границы, ошибки, идемпотентность), фикстуры и параметризация, фабрики (factory_boy), паттерны Django (pytest-django, client, БД-маркеры), FastAPI (httpx AsyncClient, dependency_overrides) и aiogram 3.x (моки Bot, тесты хендлеров). Используй когда пользователь просит написать тесты, покрыть код/фичу/модуль тестами, добавить регрессионный тест на баг, настроить pytest/фикстуры/фабрики, или говорит «напиши тесты», «покрой тестами», «нужен тест на». Аудит качества уже существующих тестов — см. test-coverage-auditor.From its SKILL.md

Install
npx -y skills add goldenprofile/llm-skills --skill test-writer

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

8.0 KB, ~1.9k tokens by cl100k_base, as published. Nobody here has run it

Test Writer

Пишет тесты, которые ловят реальные регрессии, а не накручивают coverage. Профиль: pytest, Python-бэкенд (Django / FastAPI / aiogram 3.x).

Когда применять

  • Покрыть тестами новую фичу, модуль или найденный баг (регрессионный тест).
  • Добавить characterization-тесты перед рефакторингом legacy-кода.
  • Настроить тестовую инфраструктуру: conftest, фикстуры, фабрики, маркеры.

Контекст — установить ПЕРВЫМ делом

  1. Раннер и конвенцииpyproject.toml ([tool.pytest.ini_options]), pytest.ini, существующие conftest.py, стиль текущих тестов (naming, классы vs функции, где живут фикстуры). Новые тесты обязаны следовать существующим конвенциям, а не вводить свои.
  2. Стек — Django (pytest-django?), FastAPI, aiogram, чистый Python.
  3. Где запускаются тесты — локально или только в CI. Если локальной БД нет (типовой сетап владельца: dev-машина без сервисов) — пиши тесты так, чтобы они шли в CI; локально прогоняй только не требующие БД. Не выдумывай локальный запуск, которого нет.
  4. Что критично — спроси или определи по коду: деньги, авторизация, внешние интеграции, данные пользователей. Это покрывается первым.

Принципы

  • Тестируй поведение, не реализацию. Тест переживает рефакторинг, если проверяет контракт (вход → выход/эффект), а не внутренние вызовы.
  • Критический путь → границы → ошибки. Happy path одного сценария — один тест; затем граничные значения; затем ветки ошибок (невалидный ввод, отказ внешней системы, пустые данные).
  • Не мокай то, что можно вызвать. Мок — для внешних границ (HTTP, Telegram API, время, случайность), не для соседнего модуля.
  • Каждый мок проверяется (assert_called_once_with(...)) или не нужен.
  • Тесты независимы: без порядка выполнения и общего мутируемого состояния.
  • Имя = сценарий: test_refund_rejected_when_order_already_shipped, а не test_refund_2.

Процесс

  1. Изучи код и существующие тесты затрагиваемой области (Read/Grep).
  2. Составь план кейсов и покажи пользователю таблицей: сценарий → тип (happy/edge/error) → приоритет. Для регрессионного теста на баг — сначала тест, воспроизводящий баг (красный), потом фикс.
  3. Напиши тесты по конвенциям проекта: фикстуры вместо дублирования setup, @pytest.mark.parametrize для однотипных кейсов, фабрики вместо ручных словарей данных.
  4. Прогони: локально то, что можно; остальное — отметь «проверяется в CI» и убедись, что CI-конфиг эти тесты подхватит.
  5. Самопроверка по чеклисту ниже.

Паттерны по стекам

Django (pytest-django):

  • @pytest.mark.django_db только там, где реально нужна БД; бизнес-логику по возможности тестируй без БД.
  • client / admin_client фикстуры для view-тестов; проверяй статус, редирект и эффект в БД, а не HTML построчно.
  • factory_boy: class OrderFactory(DjangoModelFactory) вместо фикстур-джейсонов; SubFactory для связей, factory.Faker для полей.
  • Сигналы/задачи Celery: вызывай task-функцию напрямую (task.run(...) или apply()), сам брокер не нужен.

FastAPI:

  • httpx.AsyncClient(transport=ASGITransport(app=app), base_url="http://test")
    • pytest.mark.anyio — для async-роутов.
  • app.dependency_overrides[get_db] = get_test_db — подмена зависимостей; сбрасывай оверрайды в фикстуре (teardown).
  • Валидацию схем тестируй через эндпоинт (422 на невалидный ввод), а не инстанцированием модели.

aiogram 3.x:

  • Хендлеры — обычные async-функции: вызывай напрямую с мок-Message/CallbackQuery (AsyncMock(spec=Message)), проверяй message.answer.assert_called_once_with(...).
  • FSM: FSMContext с MemoryStorage в тесте; проверяй переходы состояний.
  • Не поднимай реального бота и polling в тестах.

Чеклист качества (перед сдачей)

  • Каждый тест содержит assertion по существу (не только «не упало»).
  • Каждый мок либо проверен, либо удалён.
  • Границы и ошибки покрыты, не только happy path.
  • Тесты проходят из любого порядка запуска (pytest -p no:randomly не нужен).
  • Имена читаются как спецификация поведения.
  • Новые фикстуры/фабрики — в conftest/factories по конвенции проекта.

Связь с библиотекой навыков

  • test-coverage-auditor — аудит качества написанного: прогони после крупной партии тестов.
  • goal-pipeline — вызывает этот навык в фазах с deliverable «тесты»; safety-net фаза перед рефакторингом — это characterization-тесты отсюда.
  • fastapi-architect / aiogram-bot-auditor — архитектурные вопросы стека, влияющие на тестируемость (DI, разделение логики и I/O).

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most docs writing skills give in ~1.9k tokens

Counted across 1,637 of the 3,044 authors here whose files we hold, read 2026-08-07

  • Announce the skill at startin 54 of 1637, across 26 files
  • Convert legacy doc files before editingin 45 of 1637, across 7 files
  • Predict questions readers might askin 42 of 1637, across 4 files
  • Generate clarifying questions for initial contextin 42 of 1637, across 3 files
  • Create document scaffold with placeholder textin 42 of 1637, across 3 files
  • Brainstorm content options for each sectionin 42 of 1637, across 3 files
  • Test the document with a fresh context-less instancein 42 of 1637, across 3 files
  • Include exact file paths in every taskin 42 of 1637, across 15 files
  • Ask interview questions one at a timein 42 of 1637, across 27 files
  • Apply surgical edits during refinementin 41 of 1637, across 2 files
  • Offer structured workflow or freeformin 40 of 1637, across 1 file
  • Ask for document meta-contextin 40 of 1637, across 2 files

Said here and by no other author read

  • Cover the critical path before boundaries and errors
  • Test behavior and contracts instead of implementation
  • Do not mock internal modules
  • Verify or delete every mock
  • Show a test case plan before writing tests
  • Use parametrize for similar test cases

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 326,834. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.