Исходный код conftest

from pathlib import Path
import os
import inspect
from dotenv import load_dotenv

load_dotenv()

pytest_plugins = [
    'fixtures.pages'
]

[документация] def pytest_sessionfinish(session, exitstatus): """Генерация Markdown файлов с группировкой по классам""" if session.config.getoption("--generate-md"): tests_by_file = {} for item in session.items: if not (hasattr(item, 'function') and item.function.__doc__): continue file_path = str(item.fspath) file_name = os.path.splitext(os.path.basename(file_path))[0] if file_name not in tests_by_file: tests_by_file[file_name] = {} # Группируем тесты по классам class_name = item.cls.__name__ if hasattr(item, 'cls') else "Без класса" if class_name not in tests_by_file[file_name]: tests_by_file[file_name][class_name] = { 'doc': inspect.cleandoc(item.cls.__doc__) if hasattr(item, 'cls') and item.cls.__doc__ else "", 'tests': [] } tests_by_file[file_name][class_name]['tests'].append(item) # Создаем директорию docs output_dir = Path("docs") output_dir.mkdir(exist_ok=True) # Генерируем файлы for file_name, classes in tests_by_file.items(): md_content = f"# Документация тестов ({file_name}.py)\n\n" for class_name, class_data in classes.items(): if class_name != "Без класса": md_content += f"## Класс: {class_name}\n" if class_data['doc']: md_content += f"{class_data['doc']}\n\n" for item in class_data['tests']: md_content += f"### {item.name}\n" md_content += f"**Маркеры:** {', '.join(mark.name for mark in item.own_markers)}\n\n" md_content += f"```python\n{inspect.cleandoc(item.function.__doc__)}\n```\n\n" output_file = output_dir / f"{file_name}.md" output_file.write_text(md_content, encoding='utf-8')
[документация] def pytest_addoption(parser): parser.addoption( "--generate-md", action="store_true", default=False, help="Генерировать Markdown документацию с группировкой по классам" )