Загрузка данных
енам
class TU(Enum):
"""Legacy-идентификация ТУ: имитатор (tn{id}_tags.txt), tags и конфигурация стенда."""
raise ValueError(f"ТУ с id = {target_id} не найден")
class AdminTU(Enum):
"""ТУ в Администрировании и WS-подписках (не legacy имитатор)."""
TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST = (
"Тихорецк-Новороссийск-3-Автотест",
TU.TIKHORETSK_NOVOROSSIYSK_3,
)
def __init__(self, admin_name: str, legacy_tu: TU) -> None:
self.admin_name = admin_name
self.legacy_tu = legacy_tu
мод фо тест
TU,
AdminTU,
use_lds_configurator: bool = False
admin_tu: Optional[AdminTU] = None
unmask_du_event: Optional[str] = None
def __post_init__(self) -> None:
self.validate_lds_configurator_config()
def validate_lds_configurator_config(self) -> None:
"""Проверяет согласованность полей LDS Configurator в датасете."""
if not self.use_lds_configurator:
return
if self.admin_tu is None:
raise ValueError(
f"Набор '{self.suite_name}': admin_tu обязателен при use_lds_configurator=True"
)
if self.admin_tu.legacy_tu != self.technological_unit:
raise ValueError(
f"Набор '{self.suite_name}': admin_tu.legacy_tu ({self.admin_tu.legacy_tu}) "
f"не совпадает с technological_unit ({self.technological_unit})"
)
# ===== Свойства для удобства =====
@property
def admin_tu_name(self) -> str:
"""tuName для поиска ТУ в Администрировании."""
if self.admin_tu is None:
return ""
return self.admin_tu.admin_name
@property
def legacy_tu_id(self) -> int:
"""Legacy id ТУ для имитатора, tags.txt и конфигурации стенда."""
return self.technological_unit.id
@property
def legacy_tu_name(self) -> str:
"""Legacy имя ТУ из enum TU."""
return self.technological_unit.description
def tu_name(self) -> str:
"""Имя ТУ для WS-тестов и отчётов: admin при configurator, иначе legacy."""
if self.use_lds_configurator:
return self.admin_tu_name
return self.legacy_tu_name
def tu_id(self) -> int:
"""ID ТУ для WS-тестов: resolved из Администрирования при configurator, иначе legacy."""
if self.use_lds_configurator:
return self.configurator_tu_id
return self.legacy_tu_id
def infra_tu_id(self) -> int:
"""Алиас legacy_tu_id (обратная совместимость)."""
return self.legacy_tu_id
датасет
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST,
конфтест
if suite_config is not None and suite_config.use_lds_configurator:
if suite_config.admin_tu is None:
pytest.exit(
f"[SETUP] [ERROR] Набор '{suite_config.suite_name}': admin_tu обязателен "
"при use_lds_configurator=True"
)
лдс конф тест
4. Сверка статуса СОУ: Администрирование vs Состояние МТ.
"""
tu_id = cfg.tu_id
tu_name = cfg.tu_name
смок сцен
actual_report_state.expected_lds_status_text = LdsStatus.report_text_by_value(
leak.expected_lds_status_in_leaks_report
)
actual_report_state.tu_description_lower = cfg.tu_name.lower()
name_substring=ReportConst.LEAKS_REPORT_NAME_PART,
tu_name_substring=cfg.tu_name,
actual_report_state.report_file_name = report_utils.build_export_report_file_name(
cfg.tu_name,
actual_report_state.target_row = report_utils.find_row_with_object(
actual_report_state.data_rows, cfg.tu_name
with allure.step("Проверка содержимого строки утечки"):
StepCheck("В отчёте есть хотя бы одна строка с данными", "data_rows").actual(
actual_report_state.data_rows
).is_not_empty()
StepCheck(
f"Строка с объектом, содержащим '{cfg.tu_name}'",
).actual(leak_datetime_value).is_between(period_start_lo, period_end_hi)
StepCheck(
f"Колонка '{ReportConst.COL_OBJECT}' содержит '{cfg.tu_name}'",
f"Имя файла содержит '{ReportConst.LEAKS_REPORT_NAME_PART}'", "file_name", soft_failures
).contains(report_file_name_lower, leaks_report_name_part_lower)
StepCheck(
f"Имя файла содержит описание ТУ '{cfg.tu_name}'", "file_name", soft_failures
report_state.period_end_naive = report_utils.normalize_report_period_naive(report_state.period_end)
report_state.tu_description_lower = cfg.tu_name.lower()
name_substring=LdsReportConst.LDS_STATUS_REPORT_NAME_PART,
tu_name_substring=cfg.tu_name,
report_state.report_file_name = report_utils.build_export_report_file_name(
cfg.tu_name,
).contains(report_file_name_lower, lds_report_name_part_lower)
StepCheck(
f"Имя файла содержит описание ТУ '{cfg.tu_name}'",
report_state.expected_period_end_naive = report_utils.normalize_report_period_naive(
report_state.expected_period_end
)
report_state.expected_tu_description_lower = cfg.tu_name.lower()
report_state.expected_file_name = report_utils.build_export_report_file_name(
cfg.tu_name,
expected_data_type=ExportedDataType.STATIONARY_STATUS_REPORT,
name_substring=MtReportConst.MT_MODE_REPORT_NAME_PART,
tu_name_substring=cfg.tu_name,
).contains(report_file_name_lower, mt_report_name_part_lower)
StepCheck(
f"Имя файла содержит описание ТУ '{cfg.tu_name}'",
test lds status везде заменить config.technological_unit.description на config.tu_name
в смоках также
в реджектах также