Машинный перевод
Эта страница была автоматически переведена ИИ и может содержать ошибки. Если что-то неясно, обращайтесь к английскому источнику.
Тестирование¶
Набор тестов находится в 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.pytest_audit_docs.pytest_translate_docs.py |
контракты навыков в репозитории плюс изолированные тесты миниатюрных репозиториев для аудитора документации только для чтения и конвейера машинного перевода |
| Конфигурация, аутентификация и загрузка | test_config_external.pytest_cookie_profiles.pytest_credential.pytest_init.py |
изоляция внешней конфигурации, профили источников cookie, выбор учетных данных и инициализация |
| Семантика рендеринга и рабочего процесса | test_interruptions.pytest_stub_workflows.pytest_answer_variants.pytest_answer_variant_logging.pytest_relations.py |
атрибуция рабочего процесса, состояния прерывания, варианты ответов, журнал аудита и границы отношений |
| Офлайн-архив и обслуживание индекса | test_search_mode_backfill.pytest_sync_deleted.pytest_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. Как снимковые тесты используют производственный путь повторного рендеринга¶
Снимковые тесты не реализуют параллельный рендерер:
render_fixtureвtests/conftest.pyкопирует симулированныеraw_entries.jsonфикстуры, опциональныеraw_blocks.jsonиthread.jsonво временную директорию.- Он вызывает
pplx_export.commands.rerender_cmd.rerender, ту же функцию, которая используетсяpplx-export re-render. - Фабрика фикстур
renderedвозвращает свежий вывод и зафиксированную директориюgolden/фикстуры. - Тесты сравнивают
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. См. также¶
- Тестовые фикстуры — симулированные входные данные, эталонные продукты и контракт обслуживания
- Архитектура системы тестирования — уровни тестирования и гарантии регрессии
- Офлайн-операции — производственный путь повторного рендеринга, используемый снимковыми тестами