"""
Модуль тестов для проверки содержимого отчетов.
Содержит тесты, проверяющие корректность содержимого JSON отчетов,
включая метаданные, метрики атак и их валидность.
"""
import json
import logging
logger = logging.getLogger(__name__)
[документация]
def test_report_content(prepared_test_environment):
"""Тест содержимого отчета.
Проверяет корректность содержимого JSON отчета: наличие обязательных
полей, типы данных и допустимые диапазоны значений метрик.
:param prepared_test_environment: Подготовленное тестовое окружение
:type prepared_test_environment: dict
"""
json_report_path = prepared_test_environment["json_report_path"]
tmp_path = prepared_test_environment["tmp_path"]
# Загружаем отчет
with open(json_report_path, 'r', encoding='utf-8') as f:
report_data = json.load(f)
# Проверяем содержимое метаданных
metadata = report_data["metadata"]
assert metadata["model_type"] is not None, "model_type should not be None"
assert metadata["model_name"] is not None, "model_name should not be None"
assert metadata["dataset_name"] is not None, "dataset_name should not be None"
assert metadata["timestamp"] is not None, "timestamp should not be None"
# Проверяем метрики атак
metrics = report_data["metrics"]
assert len(metrics) > 0, "Should have at least one attack metric"
for metric in metrics:
assert "attack_type" in metric, "Each metric should have attack_type"
assert "success_rate" in metric, "Each metric should have success_rate"
assert isinstance(metric["success_rate"], (int, float)), "success_rate should be numeric"
# Проверяем, что success_rate в допустимом диапазоне
assert 0 <= metric["success_rate"] <= 1, "success_rate should be between 0 and 1"
success_msg = "✅ Report content validation passed"
print(success_msg)
logger.info(success_msg)