Перейти к содержанию

Машинный перевод

Эта страница была автоматически переведена ИИ и может содержать ошибки. Если что-то неясно, обращайтесь к английскому источнику.

Английский источник · Сообщить о проблеме перевода

Тестирование

Набор тестов находится в tests/, вне пакета pplx_export, и выполняется полностью офлайн. Его входные данные в форме API представляют собой детерминированные симулированные данные, зафиксированные в tests/fixtures/; тесты не зависят от живых сервисов или реальной пользовательской конфигурации.

Эта страница содержит текущий перечень тестовых модулей и рабочий процесс для участников. О дизайне регрессионного тестирования см. Архитектура системы тестирования. О контракте входных данных см. Тестовые фикстуры.

1. Запуск тестов

uv run pytest tests

pytest является объявленной зависимостью разработки. Набор гарантирует:

  • Ноль сетевых запросов — симулированные входные данные включены в репозиторий; пути, взаимодействующие с сетью, покрыты заглушками, tmp_path и monkeypatch.
  • Без реальной пользовательской конфигурации — перед импортом любого производственного модуля tests/conftest.py создает временную конфигурацию для процесса и переопределяет PPLX_EXPORT_CONFIG. Затем каждый тест получает свою собственную конфигурацию-заполнитель alice / bob и восстанавливает заполнитель процесса после выполнения. Регрессионные тесты подпроцессов проверяют, что отсутствующая или поврежденная конфигурация вызывающего не может нарушить сбор тестов.
  • Быстрая обратная связь — на 2026-07-25 проект наблюдал 435 тестов, собранных из 32 модулей test_*.py, и полный набор выполнялся примерно за 13–25 секунд в локальных проверочных запусках. Количество — это снимок репозитория на указанную дату и будет расти.

Полезные команды:

Команда Эффект
uv run pytest tests полный набор
uv run pytest tests/test_units.py один модуль
uv run pytest tests -k snapshot тесты, чей идентификатор узла соответствует snapshot
uv run pytest tests -x -q остановка при первой ошибке, тихий вывод
uv run pytest --collect-only -q обновление количества собранных тестов

2. Текущий перечень модулей

Перечень синхронизирован с репозиторием на 2026-07-27:

Функциональная группа Модули Назначение
Снимки рендеринга test_render_snapshots.py повторный рендеринг всех симулированных фикстур полного режима и сокращенных сценариев, затем побайтовое сравнение зафиксированных продуктов
Основные и общие утилиты test_units.py состояние, троттлинг, планирование, нормализация, именование ресурсов, обнаружение режимов, безопасные пути и сквозные регрессии
Контракты документации, навыки и локализация test_agent_skills.py
test_audit_docs.py
test_translate_docs.py
контракты навыков в репозитории плюс изолированные тесты миниатюрных репозиториев для аудитора документации только для чтения и конвейера машинного перевода
Конфигурация, аутентификация и загрузка test_config_external.py
test_cookie_profiles.py
test_credential.py
test_init.py
изоляция внешней конфигурации, профили источников cookie, выбор учетных данных и инициализация
Семантика рендеринга и рабочего процесса test_interruptions.py
test_stub_workflows.py
test_answer_variants.py
test_answer_variant_logging.py
test_relations.py
атрибуция рабочего процесса, состояния прерывания, варианты ответов, журнал аудита и границы отношений
Офлайн-архив и обслуживание индекса test_search_mode_backfill.py
test_sync_deleted.py
test_status.py
обогащение, поведение возобновления/идемпотентности, обнаружение удаления между учетными записями, терминальные состояния и уровни отчетов об изменениях/состоянии офлайн-учетной записи
Регрессии по ревью 16 модулей test_fix_*.py, перечисленных ниже исправления, основанные на результатах ревью; имена модулей сохраняют происхождение ревью

2.1 Происхождение регрессий по ревью

Идентификаторы ревью объясняют, почему существует регрессия; они не являются основной архитектурой набора тестов. Сопоставление намеренно «многие ко многим»: один модуль может покрывать несколько замечаний, а одно замечание может также добавлять тесты в существующий тематический модуль.

Происхождение Выделенные модули
N ревью test_fix_n01_inline_assets.py, test_fix_n02_spaces_link.py, test_fix_n03_n12.py, test_fix_n04_cookies.py, test_fix_n05_n06_n09.py, test_fix_n07_usage_checkpoint.py, test_fix_n08_throttle_overflow.py, test_fix_n10_table_header.py, test_fix_n11_batch_total.py
V3 ревью test_fix_v301_nested_sources_text.py, test_fix_v305_export_products.py
V4 ревью test_fix_v401_thread_dir_migration.py, test_fix_v402_manifest_count.py, test_fix_v403_handle_assets_idempotency.py, test_fix_v405_ask_post_steps.py
V5 ревью test_fix_v5_review.py, плюс целевые дополнения к существующим тематическим модулям
V6 ревью test_fix_v6_atomic_writes.py

Документационные строки модулей остаются авторитетным объяснением старого поведения, исправленного поведения и границы регрессии для каждого замечания.

3. Как снимковые тесты используют производственный путь повторного рендеринга

Снимковые тесты не реализуют параллельный рендерер:

  1. render_fixture в tests/conftest.py копирует симулированные raw_entries.json фикстуры, опциональные raw_blocks.json и thread.json во временную директорию.
  2. Он вызывает pplx_export.commands.rerender_cmd.rerender, ту же функцию, которая используется pplx-export re-render.
  3. Фабрика фикстур rendered возвращает свежий вывод и зафиксированную директорию golden/ фикстуры.
  4. Тесты сравнивают conversation.md и каждый turns/turn_*.md побайтово.

Инварианты содержимого дополняют побайтовое равенство: ответы не должны сворачиваться в пустой заполнитель (无), а остатки представления словаря, такие как {'type': ..., не должны просачиваться в отрендеренный текст.

4. Добавление теста

  • Существующая логика — добавьте тест в соответствующий тематический модуль. Используйте tmp_path, заглушки и monkeypatch; никогда не обращайтесь к сети или реальному ~/.config.
  • Регрессия ошибки — предпочитайте соответствующий тематический модуль. Создайте модуль test_fix_<lineage>_<slug>.py, когда сохранение происхождения ревью существенно улучшает отслеживаемость; не предполагайте один модуль на одно замечание.
  • Регрессия рендеринга — добавьте или сократите симулированную фикстуру, перегенерируйте ее эталонные продукты с помощью инструмента обслуживания, затем зарегистрируйте ее в test_render_snapshots.py или добавьте проверки, специфичные для сценария.

Следуйте стилю соседних модулей: аннотации типов, from __future__ import annotations и двуязычные документационные строки модулей.

5. См. также