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 документацию с группировкой по классам"
)