Загрузка данных
[tool.poetry]
name = "training"
version = "0.1.0"
description = ""
authors = ["Владимиров Никита Михайлович "]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.10"
python-dotenv = "^1.0.1"
black = "24.2.0"
isort = "5.13.2"
flake8 = "6.0.0"
structlog= "^23.2.0"
confluent-kafka = {extras = ["avro", "protobuf"], version = "2.9.0"}
cryptography = "45.0.2"
charset-normalizer = "3.4.0"
requests = "2.32.3"
websockets = "15.0.1"
allure-pytest = "2.13.5"
asyncio = "^3.4.3"
pytest-asyncio = "0.26.0"
protobuf = "6.30.2"
assertpy = "1.1"
websocket-client = "1.8.0"
msgpack = "1.0.2"
pydantic-core = "2.27.1"
pydantic = "2.10.1"
pyyaml = "6.0.2"
dacite = "1.9.2"
tzdata = "2025.2"
pygments = "2.19.1"
openpyxl = "3.1.5"
[tool.pytest.ini_options]
addopts = [
"-v",
"-s",
"--alluredir=allure-results"
]
markers = [
"test_suite_name(name): привязка теста к набору данных",
"test_suite_data_id(id): id набора данных в TestOps для всей группы",
"imitator_duration(minutes): длительность работы имитатора для группы тестов на определнных данных",
"test_case_id(id): id тест кейса в TestOps",
"test_data_name: название набора данных",
"tu_id: id ТУ",
"ost_name: Имя ОСТ",
"offset(minutes): сколько ждать от старта имитатора перед проверкой"
]
asyncio_mode="auto"
norecursedirs = [".*", ".git", ".env", ".env.example", "poetry.lock", "pyproject.toml", "clients", "models", "utils"]
log_cli=true
log_cli_level="INFO"
log_cli_format="[%(levelname)s] %(asctime)s %(filename)s %(message)s"
log_cli_date_format="%Y-%m-%d %H:%M:%S.%f"
[tool.black]
line-length = 120
skip-string-normalization = true
exclude = '/(\.git|\.venv|__pycache__|build|dist|migrations)/'
[tool.isort]
profile = "black"
line_length = 120
skip = [".git", ".venv", "__pycache__", "build", "dist", "migrations"]
[tool.flake8]
max-line-length = 120
exclude = ".git,.venv,__pycache__,build,dist,*/migrations/*"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
case
"""
Конфигурация тестового набора данных Select_6_with_mask
Особенности набора:
- Режим стационара (StationaryStatus.STATIONARY)
- Маскирование и размаскирование ДУ НПС-2 Крымская - НПС Грушовая
- Маскирование и размаскирование датчиков
- Имитация и снятие имитации датчиков
- Одна утечка на координате 56 км
- Объём утечки 113.6 м³
"""
from dataclasses import asdict
from random import randint
from constants.enums import (
TU,
AdminTU,
ConfirmationStatus,
LdsStatus,
MeasureConversionRule,
MessagePriority,
ReservedType,
StationaryReason,
StationaryStatus,
)
from constants.test_constants import BaseTN3Constants as TestConst
from models.subscribe_main_page_signals_info_model import SignalsInfo
from test_config.models_for_tests import CaseData, CaseMarkers, LeakTestConfig, SmokeSuiteConfig
# ===== Константы набора =====
SUITE_NAME = "Case_masking_du"
SUITE_DATA_ID = 15
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Параметры утечки
LEAK_COORDINATE_METERS = 56000.0
LEAK_VOLUME_M3 = 113.6
ALLOWED_TIME_DIFF_SECONDS = 1440 # 24 минуты
LEAK_START_INTERVAL_SECONDS = 2100 # 35 минут
LEAK_TECHNOLOGICAL_OBJECT = "НПС-5 Тихорецкая - НПС-3 Нововеличковская"
LEAK_DIAGNOSTIC_AREA_NAME = "Т-Н-3.НПС-5 «Тихорецкая».УЗР вых - Т-Н-3.НПС-3 «Нововеличковская».УЗР вых"
# ID диагностических участков
LEAK_DIAGNOSTIC_AREA_ID = 2
# ID труб для определения ДУ
DIAGNOSTIC_AREA_2_PIPE_ID = 1463 # Труба на ДУ с утечкой
DIAGNOSTIC_AREA_3_PIPE_ID = 1444 # OUT_NEIGHBOR_DIAGNOSTIC_AREA_PIPE_ID
# ID линейного участка
LINEAR_PART_ID = 407
# Данные при маскировании ДУ
LINEAR_PART_IDENTIFIER_FOR_MASK = 407
MASK_REASON = "Прохождение герметизаторов"
UNMASK_REASON = ""
MASK_ONE_DU = 1
NOT_MASK_DU = 0
TECHNOLOGICAL_SECTION = "Тихорецк-Новороссийск-3"
MASK_DU_EVENT = "Маскирование СОУ"
UNMASK_DU_EVENT = "Снятие маскирования СОУ"
MASK_DU_NAME = "НПС-5 Тихорецкая - НПС-3 Нововеличковская"
MAIN_PIPE_LINE = "МН Тихорецк-Новороссийск-3"
# ===== Значения сигналов для main page signals =====
MAIN_PAGE_SIGNALS = asdict(SignalsInfo())
SUCCESSFUL_STATUS = TestConst.JOURNAL_STATUS_SUCCESS
IMITATION_EVENT = TestConst.JOURNAL_EVENT_IMITATE
UNIMITATION_EVENT = TestConst.JOURNAL_EVENT_UNIMITATE
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# ===== Данные для имитации и маскирования датчиков =====
PRESSURE_SENSOR_ADDRESS = TestConst.PRESSURE_SENSOR_ADDRESS
FLOWMETER_ADDRESS = TestConst.FLOWMETER_ADDRESS
PRESSURE_SENSOR_VAL = randint(*TestConst.PRESSURE_IMITATION_RANGE) * TestConst.KGS_SM2
FLOWMETER_VAL = randint(*TestConst.VOLUME_IMITATION_RANGE) / TestConst.MASS_KG
SIGNAL_QUALITY_GOOD_VAL = TestConst.GOOD_QUALITY_VAL
# ===== Конфигурация набора =====
CASE_MASKING_DU_CONFIG = SmokeSuiteConfig(
# ===== Метаданные =====
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
technological_section=TECHNOLOGICAL_SECTION,
main_pipeline=MAIN_PIPELINE,
mask_reason=MASK_REASON,
unmask_reason=UNMASK_REASON,
mask_one_du=MASK_ONE_DU,
not_mask_du=NOT_MASK_DU,
linear_part_identifier_for_mask=LINEAR_PART_IDENTIFIER_FOR_MASK,
mask_du_name=MASK_DU_NAME,
mask_du_event=MASK_DU_EVENT,
unmask_du_event=UNMASK_DU_EVENT,
main_pipe_line=MAIN_PIPE_LINE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST,
# ----- Данные для проверки имитации -----
exp_mode_mt_message=CaseData(
expected_result=(
StationaryStatus.report_text_by_value(2),
StationaryReason.PRESSURE_AND_FLOW_MOVING_AVERAGES_MEET_CRITERIA.report_text,
MessagePriority.MEDIUM,
),
),
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ----- Ожидаемый статус стационара -----
expected_stationary_status=StationaryStatus.STATIONARY,
# ----- Данные для проверки имитации -----
imitate_flowmeter_signal_test_data=CaseData(
params={"sensor_address": FLOWMETER_ADDRESS},
expected_result=(FLOWMETER_VAL, SIGNAL_QUALITY_GOOD_VAL, IMITATION_EVENT, UNIMITATION_EVENT),
),
imitate_pressure_sensor_signal_test_data=CaseData(
params={"sensor_address": PRESSURE_SENSOR_ADDRESS},
expected_result=(PRESSURE_SENSOR_VAL, SIGNAL_QUALITY_GOOD_VAL, IMITATION_EVENT, UNIMITATION_EVENT),
),
# ----- Данные для проверки маскирования -----
mask_signal_test_data=CaseData(
params={"pressure_sensor_address": PRESSURE_SENSOR_ADDRESS, "flowmeter_address": FLOWMETER_ADDRESS}
),
# ===== Ожидаемый статус сигналов =====
expected_main_page_signals=MAIN_PAGE_SIGNALS,
# ===== БАЗОВЫЕ ТЕСТЫ =====
basic_info_test=CaseMarkers(test_case_id="1", offset=5),
journal_info_test=CaseMarkers(test_case_id="2", offset=5),
lds_status_initialization_test=CaseMarkers(test_case_id="29", offset=5),
main_page_info_test=CaseMarkers(test_case_id="3", offset=6),
mode_mt_in_journal_test=CaseMarkers(test_case_id="236", offset=7),
main_page_info_signals_test=CaseMarkers(test_case_id="120", offset=7),
mask_signal_test=CaseMarkers(test_case_id="32", offset=8),
mask_info_in_journal_test=CaseMarkers(test_case_id="213", offset=9),
imitate_flowmeter_signal_test=CaseMarkers(test_case_id="216", offset=10),
imitate_pressure_sensor_signal_test=CaseMarkers(test_case_id="216", offset=10.5),
mask_du_on_mini_scheme_test=CaseMarkers(test_case_id="126", offset=11),
lds_status_initialization_out_test=CaseMarkers(test_case_id="30", offset=30),
unmask_du_on_mini_scheme_test=CaseMarkers(test_case_id="173", offset=35),
# ===== КОНФИГУРАЦИЯ УТЕЧКИ =====
leak=LeakTestConfig(
# ----- Параметры утечки -----
diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
coordinate_meters=LEAK_COORDINATE_METERS,
volume_m3=LEAK_VOLUME_M3,
linear_part_id=LINEAR_PART_ID,
technological_object=LEAK_TECHNOLOGICAL_OBJECT,
# ----- Временные интервалы -----
leak_start_interval_seconds=LEAK_START_INTERVAL_SECONDS,
allowed_time_diff_seconds=ALLOWED_TIME_DIFF_SECONDS,
# ----- Ожидаемые статусы -----
expected_lds_status=LdsStatus.SERVICEABLE,
expected_stationary_status=StationaryStatus.STATIONARY,
expected_algorithm_type=ReservedType.STATIONARY_FLOW,
expected_leak_status=ConfirmationStatus.CONFIRMED,
# ----- Тест AllLeaksInfo -----
all_leaks_info_test=CaseMarkers(test_case_id="15", offset=59),
# ----- Тест LeaksContent -----
leaks_content_test=CaseMarkers(test_case_id="97", offset=59),
# ----- Тест MessageInfo -----
leak_info_in_journal=CaseMarkers(test_case_id="119", offset=59),
# ----- Тест TuLeaksInfo -----
tu_leaks_info_test=CaseMarkers(test_case_id="5", offset=59),
# ----- Тест AcknowledgeLeak -----
acknowledge_leak_test=CaseMarkers(test_case_id="6", offset=60),
# # ----- Тест OutputSignals -----
output_signals_test=CaseMarkers(test_case_id="33", offset=61),
),
)
test_config/datasets/imitative_1.py
"""
Конфигурация тестового набора Imitative_1_tn3_56km_113 (режим остановленной перекачки)
Особенности набора:
- Режим МТ Остановленная перекачка (StationaryStatus.STOPPED)
- Одна утечка на координате 56 км
- Объём утечки 113.6 м³
- Интенсивность утечки 3,6%
- При перестройке путей течения, Режим СОУ может меняться
"""
from constants.enums import (
TU,
AdminTU,
ConfirmationStatus,
LdsStatus,
MeasureConversionRule,
ReservedType,
StationaryStatus,
)
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import CaseData, CaseMarkers, LeakTestConfig, SmokeSuiteConfig
# ===== Константы набора =====
SUITE_NAME = "Imitative_1_tn3_56km_113"
SUITE_DATA_ID = 20
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# Параметры утечки
LEAK_COORDINATE_METERS = 56000.0
LEAK_VOLUME_M3 = 113.6
ALLOWED_TIME_DIFF_SECONDS = 1440 # 24 минуты
LEAK_START_INTERVAL_SECONDS = 1800 # 30 минут
FLOW_RATE_SETTINGS_THRESHOLD = 7
# ID диагностических участков
LEAK_DIAGNOSTIC_AREA_ID = 2
LEAK_DIAGNOSTIC_AREA_NAME = "Т-Н-3.НПС-5 «Тихорецкая».УЗР вых - Т-Н-3.УЗР НПС-3 «Нововеличковская»."
# ID труб для определения ДУ
DIAGNOSTIC_AREA_2_PIPE_ID = 1463 # Труба на ДУ с утечкой
DIAGNOSTIC_AREA_3_PIPE_ID = 1444 # OUT_NEIGHBOR_DIAGNOSTIC_AREA_PIPE_ID
# ID линейного участка
LINEAR_PART_ID = 407
# ===== Конфигурация набора =====
IMITATIVE_1_CONFIG = SmokeSuiteConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
main_pipeline=MAIN_PIPELINE,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST,
# ----- Ожидаемый статус стационара -----
expected_stationary_status=StationaryStatus.STOPPED,
expected_report_stationary_status=StationaryStatus.STOPPED.value,
# ----- Ожидаемые статусы для проверки режимов на ЭФ Диагностика сигналов -----
controlled_sites_with_segment=CaseData(
expected_result={
"exp_tixoreczkaya_novovelichkovskaya": (StationaryStatus.STOPPED, LdsStatus.SERVICEABLE),
"exp_novovelichkovskaya_krymskaya": (StationaryStatus.STOPPED, LdsStatus.SERVICEABLE),
"exp_krymskaya_grushovaya": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_bejsug": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_ponura": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_kuban": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_afipskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_ilinskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
}
),
# ===== БАЗОВЫЕ ТЕСТЫ =====
basic_info_test=CaseMarkers(test_case_id="1", offset=5),
journal_info_test=CaseMarkers(test_case_id="2", offset=5),
lds_status_initialization_test=CaseMarkers(test_case_id="86", offset=5),
lds_status_init_in_journal_test=CaseMarkers(test_case_id="228", offset=5),
main_page_info_test=CaseMarkers(test_case_id="3", offset=6),
mask_signal_test=CaseMarkers(test_case_id="32", offset=8),
mask_info_in_journal_test=CaseMarkers(test_case_id="213", offset=9),
diagnostics_of_signals_after_initialization_test=CaseMarkers(test_case_id="210", offset=25),
lds_status_initialization_out_test=CaseMarkers(test_case_id="30", offset=30),
lds_status_init_out_in_journal_test=CaseMarkers(test_case_id="214", offset=31),
export_lds_status_report_test=CaseMarkers(test_case_id="235", offset=58),
export_mt_mode_report_test=CaseMarkers(test_case_id="240", offset=59),
# ===== КОНФИГУРАЦИЯ УТЕЧКИ =====
leak=LeakTestConfig(
# ----- Параметры утечки -----
coordinate_meters=LEAK_COORDINATE_METERS,
volume_m3=LEAK_VOLUME_M3,
linear_part_id=LINEAR_PART_ID,
flow_rate_settings_threshold=FLOW_RATE_SETTINGS_THRESHOLD,
diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
# ----- Временные интервалы -----
leak_start_interval_seconds=LEAK_START_INTERVAL_SECONDS,
allowed_time_diff_seconds=ALLOWED_TIME_DIFF_SECONDS,
# ----- Ожидаемые статусы -----
expected_algorithm_type=ReservedType.STOP,
expected_stationary_status=StationaryStatus.STOPPED,
expected_lds_status=LdsStatus.SERVICEABLE,
expected_leak_status=ConfirmationStatus.CONFIRMED,
expected_lds_status_in_leaks_report=LdsStatus.SERVICEABLE.value,
expected_report_stationary_status=StationaryStatus.STOPPED.value,
# ----- Тест BalanceAlgorithmResultsContent -----
balance_algorithm_leak_waiting_test=CaseMarkers(test_case_id="175", offset=41), # Длительность теста 5 минут
balance_algorithm_leak_detected_test=CaseMarkers(test_case_id="177", offset=54),
# ----- Тест MessageInfo -----
possible_leak_in_journal_test=CaseMarkers(test_case_id="211", offset=46),
# ----- Тест AllLeaksInfo -----
all_leaks_info_test=CaseMarkers(test_case_id="20", offset=54),
# ----- Тест LeaksContent -----
leaks_content_test=CaseMarkers(test_case_id="91", offset=54),
# ----- Тест TuLeaksInfo -----
tu_leaks_info_test=CaseMarkers(test_case_id="84", offset=54),
# ----- Тест MessageInfo -----
leak_info_in_journal=CaseMarkers(test_case_id="154", offset=54),
# ----- Тест MainPageInfoContent -----
leak_is_confirm_on_main_page_test=CaseMarkers(test_case_id="182", offset=55),
# ----- Тест AcknowledgeLeak -----
acknowledge_leak_test=CaseMarkers(test_case_id="6", offset=55),
acknowledge_leak_in_journal_test=CaseMarkers(test_case_id="212", offset=55.5),
# ----- Тест OutputSignals -----
output_signals_test=CaseMarkers(test_case_id="158", offset=56),
# ----- Тест ExportReports -----
export_leaks_report_test=CaseMarkers(test_case_id="234", offset=57),
),
)
2
"""
Конфигурация тестового набора Imitative_2_tn3_106km_113 (режим остановленной перекачки)
Особенности набора:
- Режим МТ Остановленная перекачка (StationaryStatus.STOPPED)
- Одна утечка на координате 106 км
- Объём утечки 113.6 м³
- Интенсивность утечки 3,6%
"""
from constants.enums import (
TU,
AdminTU,
ConfirmationStatus,
LdsStatus,
MeasureConversionRule,
ReservedType,
StationaryStatus,
)
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import CaseData, CaseMarkers, LeakTestConfig, SmokeSuiteConfig
# ===== Константы набора =====
SUITE_NAME = "Imitative_2_tn3_106km_113"
SUITE_DATA_ID = 21
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# Параметры утечки
LEAK_COORDINATE_METERS = 106000.0
LEAK_VOLUME_M3 = 113.6
ALLOWED_TIME_DIFF_SECONDS = 1440 # 24 минуты
LEAK_START_INTERVAL_SECONDS = 1800 # 30 минут
FLOW_RATE_SETTINGS_THRESHOLD = 7
# ID диагностических участков
LEAK_DIAGNOSTIC_AREA_ID = 2
LEAK_DIAGNOSTIC_AREA_NAME = "Т-Н-3.НПС-5 «Тихорецкая».УЗР вых - Т-Н-3.УЗР НПС-3 «Нововеличковская»."
# ID труб для определения ДУ
DIAGNOSTIC_AREA_2_PIPE_ID = 1463 # Труба на ДУ с утечкой
DIAGNOSTIC_AREA_3_PIPE_ID = 1444 # OUT_NEIGHBOR_DIAGNOSTIC_AREA_PIPE_ID
# ID линейного участка
LINEAR_PART_ID = 407
# ===== Конфигурация набора =====
IMITATIVE_2_CONFIG = SmokeSuiteConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
main_pipeline=MAIN_PIPELINE,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST,
# ----- Ожидаемый статус стационара -----
expected_stationary_status=StationaryStatus.STOPPED,
expected_report_stationary_status=StationaryStatus.STOPPED.value,
# ----- Ожидаемые статусы для проверки режимов на ЭФ Диагностика сигналов -----
controlled_sites_with_segment=CaseData(
expected_result={
"exp_tixoreczkaya_novovelichkovskaya": (StationaryStatus.STOPPED, LdsStatus.SERVICEABLE),
"exp_novovelichkovskaya_krymskaya": (StationaryStatus.STOPPED, LdsStatus.SERVICEABLE),
"exp_krymskaya_grushovaya": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_bejsug": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_ponura": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_kuban": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_afipskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_ilinskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
}
),
# ===== БАЗОВЫЕ ТЕСТЫ =====
basic_info_test=CaseMarkers(test_case_id="1", offset=5),
journal_info_test=CaseMarkers(test_case_id="2", offset=5),
lds_status_initialization_test=CaseMarkers(test_case_id="86", offset=5),
lds_status_init_in_journal_test=CaseMarkers(test_case_id="228", offset=5),
main_page_info_test=CaseMarkers(test_case_id="3", offset=6),
mask_signal_test=CaseMarkers(test_case_id="32", offset=8),
mask_info_in_journal_test=CaseMarkers(test_case_id="213", offset=9),
diagnostics_of_signals_after_initialization_test=CaseMarkers(test_case_id="210", offset=25),
lds_status_initialization_out_test=CaseMarkers(test_case_id="30", offset=30),
lds_status_init_out_in_journal_test=CaseMarkers(test_case_id="214", offset=31),
export_lds_status_report_test=CaseMarkers(test_case_id="235", offset=58),
export_mt_mode_report_test=CaseMarkers(test_case_id="240", offset=59),
# ===== КОНФИГУРАЦИЯ УТЕЧКИ =====
leak=LeakTestConfig(
# ----- Параметры утечки -----
coordinate_meters=LEAK_COORDINATE_METERS,
volume_m3=LEAK_VOLUME_M3,
linear_part_id=LINEAR_PART_ID,
flow_rate_settings_threshold=FLOW_RATE_SETTINGS_THRESHOLD,
diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
# ----- Временные интервалы -----
leak_start_interval_seconds=LEAK_START_INTERVAL_SECONDS,
allowed_time_diff_seconds=ALLOWED_TIME_DIFF_SECONDS,
# ----- Ожидаемые статусы -----
expected_algorithm_type=ReservedType.STOP,
expected_stationary_status=StationaryStatus.STOPPED,
expected_lds_status=LdsStatus.SERVICEABLE,
expected_leak_status=ConfirmationStatus.CONFIRMED,
expected_lds_status_in_leaks_report=LdsStatus.SERVICEABLE.value,
expected_report_stationary_status=StationaryStatus.STOPPED.value,
# ----- Тест BalanceAlgorithmResultsContent -----
balance_algorithm_leak_waiting_test=CaseMarkers(test_case_id="175", offset=41), # Длительность теста 5 минут
balance_algorithm_leak_detected_test=CaseMarkers(test_case_id="177", offset=54),
# ----- Тест MessageInfo -----
possible_leak_in_journal_test=CaseMarkers(test_case_id="211", offset=46),
# ----- Тест AllLeaksInfo -----
all_leaks_info_test=CaseMarkers(test_case_id="21", offset=54),
# ----- Тест LeaksContent -----
leaks_content_test=CaseMarkers(test_case_id="91", offset=54),
# ----- Тест TuLeaksInfo -----
tu_leaks_info_test=CaseMarkers(test_case_id="84", offset=54),
# ----- Тест MessageInfo -----
leak_info_in_journal=CaseMarkers(test_case_id="154", offset=54),
# ----- Тест MainPageInfoContent -----
leak_is_confirm_on_main_page_test=CaseMarkers(test_case_id="182", offset=55),
# ----- Тест AcknowledgeLeak -----
acknowledge_leak_test=CaseMarkers(test_case_id="6", offset=55),
acknowledge_leak_in_journal_test=CaseMarkers(test_case_id="212", offset=55.5),
# ----- Тест OutputSignals -----
output_signals_test=CaseMarkers(test_case_id="158", offset=56),
# ----- Тест ExportReports -----
export_leaks_report_test=CaseMarkers(test_case_id="234", offset=57),
),
)
4
"""
Конфигурация тестового набора Imitative_4_tn3_129km_113 (режим остановленной перекачки)
Особенности набора:
- Режим МТ Остановленная перекачка (StationaryStatus.STOPPED)
- Одна утечка на координате 129 км
- Объём утечки 113.6 м³
- Интенсивность утечки 3,6%
- Отбор на НПС Нововеличковская
- При перестройке путей течения, Режим СОУ может меняться
"""
from constants.enums import (
TU,
AdminTU,
ConfirmationStatus,
LdsStatus,
MeasureConversionRule,
ReservedType,
StationaryStatus,
)
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import CaseData, CaseMarkers, LeakTestConfig, SmokeSuiteConfig
# ===== Константы набора =====
SUITE_NAME = "Imitative_4_tn3_129km_113"
SUITE_DATA_ID = 22
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# Параметры утечки
LEAK_COORDINATE_METERS = 129000.0
LEAK_VOLUME_M3 = 113.6
ALLOWED_TIME_DIFF_SECONDS = 1440 # 24 минуты
LEAK_START_INTERVAL_SECONDS = 1800 # 30 минут
FLOW_RATE_SETTINGS_THRESHOLD = 7
# ID диагностических участков
LEAK_DIAGNOSTIC_AREA_ID = 3
LEAK_DIAGNOSTIC_AREA_NAME = "Т-Н-3.НПС-5 «Тихорецкая».УЗР СИКН ТН-3 - НПЗ Афипский"
# ID линейного участка
LINEAR_PART_ID = 407
# ===== Конфигурация набора =====
IMITATIVE_4_CONFIG = SmokeSuiteConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
main_pipeline=MAIN_PIPELINE,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST,
# ----- Ожидаемый статус стационара -----
expected_stationary_status=StationaryStatus.STOPPED,
expected_report_stationary_status=StationaryStatus.STOPPED.value,
# ----- Ожидаемые статусы для проверки режимов на ЭФ Диагностика сигналов -----
controlled_sites_with_segment=CaseData(
expected_result={
"exp_tixoreczkaya_novovelichkovskaya": (StationaryStatus.STOPPED, LdsStatus.SERVICEABLE),
"exp_novovelichkovskaya_krymskaya": (StationaryStatus.STOPPED, LdsStatus.SERVICEABLE),
"exp_krymskaya_grushovaya": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_bejsug": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_ponura": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_kuban": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_afipskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_ilinskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
}
),
# ===== БАЗОВЫЕ ТЕСТЫ =====
basic_info_test=CaseMarkers(test_case_id="1", offset=5),
journal_info_test=CaseMarkers(test_case_id="2", offset=5),
lds_status_initialization_test=CaseMarkers(test_case_id="86", offset=5),
lds_status_init_in_journal_test=CaseMarkers(test_case_id="228", offset=5),
main_page_info_test=CaseMarkers(test_case_id="3", offset=6),
mask_signal_test=CaseMarkers(test_case_id="32", offset=8),
mask_info_in_journal_test=CaseMarkers(test_case_id="213", offset=9),
diagnostics_of_signals_after_initialization_test=CaseMarkers(test_case_id="210", offset=25),
lds_status_initialization_out_test=CaseMarkers(test_case_id="30", offset=30),
lds_status_init_out_in_journal_test=CaseMarkers(test_case_id="214", offset=31),
export_lds_status_report_test=CaseMarkers(test_case_id="235", offset=58),
export_mt_mode_report_test=CaseMarkers(test_case_id="240", offset=59),
# ===== КОНФИГУРАЦИЯ УТЕЧКИ =====
leak=LeakTestConfig(
# ----- Параметры утечки -----
coordinate_meters=LEAK_COORDINATE_METERS,
volume_m3=LEAK_VOLUME_M3,
linear_part_id=LINEAR_PART_ID,
flow_rate_settings_threshold=FLOW_RATE_SETTINGS_THRESHOLD,
diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
# ----- Временные интервалы -----
leak_start_interval_seconds=LEAK_START_INTERVAL_SECONDS,
allowed_time_diff_seconds=ALLOWED_TIME_DIFF_SECONDS,
# ----- Ожидаемые статусы -----
expected_algorithm_type=ReservedType.STOP,
expected_stationary_status=StationaryStatus.STOPPED,
expected_lds_status=LdsStatus.SERVICEABLE,
expected_leak_status=ConfirmationStatus.CONFIRMED,
expected_lds_status_in_leaks_report=LdsStatus.SERVICEABLE.value,
expected_report_stationary_status=StationaryStatus.STOPPED.value,
# ----- Тест BalanceAlgorithmResultsContent -----
balance_algorithm_leak_waiting_test=CaseMarkers(test_case_id="175", offset=41), # Длительность теста 5 минут
balance_algorithm_leak_detected_test=CaseMarkers(test_case_id="177", offset=54),
# ----- Тест MessageInfo -----
possible_leak_in_journal_test=CaseMarkers(test_case_id="211", offset=46),
# ----- Тест AllLeaksInfo -----
all_leaks_info_test=CaseMarkers(test_case_id="22", offset=54),
# ----- Тест LeaksContent -----
leaks_content_test=CaseMarkers(test_case_id="91", offset=54),
# ----- Тест TuLeaksInfo -----
tu_leaks_info_test=CaseMarkers(test_case_id="84", offset=54),
# ----- Тест MessageInfo -----
leak_info_in_journal=CaseMarkers(test_case_id="154", offset=54),
# ----- Тест MainPageInfoContent -----
leak_is_confirm_on_main_page_test=CaseMarkers(test_case_id="182", offset=55),
# ----- Тест AcknowledgeLeak -----
acknowledge_leak_test=CaseMarkers(test_case_id="6", offset=55),
acknowledge_leak_in_journal_test=CaseMarkers(test_case_id="212", offset=55.5),
# ----- Тест OutputSignals -----
output_signals_test=CaseMarkers(test_case_id="158", offset=56),
# ----- Тест ExportReports -----
export_leaks_report_test=CaseMarkers(test_case_id="234", offset=57),
),
)
7
"""
Конфигурация тестового набора Imitative_7_tn3_215km_50 (режим остановленной перекачки)
Особенности набора:
- Режим МТ Остановленная перекачка (StationaryStatus.STOPPED)
- Одна утечка на координате 215 км
- Объём утечки 50,0 м³
- Интенсивность утечки 1,8%
- При перестройке путей течения, Режим СОУ может меняться
"""
from constants.enums import (
TU,
AdminTU,
ConfirmationStatus,
LdsStatus,
MeasureConversionRule,
ReservedType,
StationaryStatus,
)
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import CaseData, CaseMarkers, LeakTestConfig, SmokeSuiteConfig
# ===== Константы набора =====
SUITE_NAME = "Imitative_7_tn3_215km_50"
SUITE_DATA_ID = 23
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# Параметры утечки
LEAK_COORDINATE_METERS = 215000.0
LEAK_VOLUME_M3 = 50.0
ALLOWED_TIME_DIFF_SECONDS = 1800 # 30 минут
LEAK_START_INTERVAL_SECONDS = 1800 # 30 минут
FLOW_RATE_SETTINGS_THRESHOLD = 7
# ID диагностических участков
LEAK_DIAGNOSTIC_AREA_ID = 3
LEAK_DIAGNOSTIC_AREA_NAME = "Т-Н-3.УЗР НПС-3 «Нововеличковская». - Т-Н-3.НПС-2 «Крымская».УЗР СИКН Т-К"
# ID линейного участка
LINEAR_PART_ID = 408
# ===== Конфигурация набора =====
IMITATIVE_7_CONFIG = SmokeSuiteConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
main_pipeline=MAIN_PIPELINE,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST,
# ----- Ожидаемый статус стационара -----
expected_stationary_status=StationaryStatus.STOPPED,
expected_report_stationary_status=StationaryStatus.STOPPED.value,
# ----- Ожидаемые статусы для проверки режимов на ЭФ Диагностика сигналов -----
controlled_sites_with_segment=CaseData(
expected_result={
"exp_tixoreczkaya_novovelichkovskaya": (StationaryStatus.STOPPED, LdsStatus.SERVICEABLE),
"exp_novovelichkovskaya_krymskaya": (StationaryStatus.STOPPED, LdsStatus.SERVICEABLE),
"exp_krymskaya_grushovaya": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_bejsug": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_ponura": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_kuban": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_afipskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_ilinskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
}
),
# ===== БАЗОВЫЕ ТЕСТЫ =====
basic_info_test=CaseMarkers(test_case_id="1", offset=5),
journal_info_test=CaseMarkers(test_case_id="2", offset=5),
lds_status_initialization_test=CaseMarkers(test_case_id="86", offset=5),
lds_status_init_in_journal_test=CaseMarkers(test_case_id="228", offset=5),
main_page_info_test=CaseMarkers(test_case_id="3", offset=6),
mask_signal_test=CaseMarkers(test_case_id="32", offset=8),
mask_info_in_journal_test=CaseMarkers(test_case_id="213", offset=9),
diagnostics_of_signals_after_initialization_test=CaseMarkers(test_case_id="210", offset=25),
lds_status_initialization_out_test=CaseMarkers(test_case_id="30", offset=30),
lds_status_init_out_in_journal_test=CaseMarkers(test_case_id="214", offset=31),
export_lds_status_report_test=CaseMarkers(test_case_id="235", offset=64),
export_mt_mode_report_test=CaseMarkers(test_case_id="240", offset=65),
# ===== КОНФИГУРАЦИЯ УТЕЧКИ =====
leak=LeakTestConfig(
# ----- Параметры утечки -----
coordinate_meters=LEAK_COORDINATE_METERS,
volume_m3=LEAK_VOLUME_M3,
linear_part_id=LINEAR_PART_ID,
flow_rate_settings_threshold=FLOW_RATE_SETTINGS_THRESHOLD,
diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
# ----- Временные интервалы -----
leak_start_interval_seconds=LEAK_START_INTERVAL_SECONDS,
allowed_time_diff_seconds=ALLOWED_TIME_DIFF_SECONDS,
# ----- Ожидаемые статусы -----
expected_algorithm_type=ReservedType.STOP,
expected_leak_status=ConfirmationStatus.CONFIRMED,
expected_lds_status=LdsStatus.SERVICEABLE, # При перестройке путей течения, Режим СОУ может меняться
expected_stationary_status=StationaryStatus.STOPPED,
expected_lds_status_in_leaks_report=LdsStatus.SERVICEABLE.value,
expected_report_stationary_status=StationaryStatus.STOPPED.value,
# ----- Тест BalanceAlgorithmResultsContent -----
balance_algorithm_leak_waiting_test=CaseMarkers(test_case_id="175", offset=42), # Длительность теста 5 минут
balance_algorithm_leak_detected_test=CaseMarkers(test_case_id="177", offset=60),
# ----- Тест MessageInfo -----
possible_leak_in_journal_test=CaseMarkers(test_case_id="211", offset=42),
# ----- Тест AllLeaksInfo -----
all_leaks_info_test=CaseMarkers(test_case_id="23", offset=60),
# ----- Тест LeaksContent -----
leaks_content_test=CaseMarkers(test_case_id="91", offset=60),
# ----- Тест TuLeaksInfo -----
tu_leaks_info_test=CaseMarkers(test_case_id="84", offset=60),
# ----- Тест MessageInfo -----
leak_info_in_journal=CaseMarkers(test_case_id="154", offset=60),
# ----- Тест MainPageInfoContent -----
leak_is_confirm_on_main_page_test=CaseMarkers(test_case_id="182", offset=61),
# ----- Тест AcknowledgeLeak -----
acknowledge_leak_test=CaseMarkers(test_case_id="6", offset=61),
acknowledge_leak_in_journal_test=CaseMarkers(test_case_id="212", offset=61.5),
# ----- Тест OutputSignals -----
output_signals_test=CaseMarkers(test_case_id="158", offset=62),
# ----- Тест ExportReports -----
export_leaks_report_test=CaseMarkers(test_case_id="234", offset=63),
),
)
17
"""
Конфигурация тестового набора Imitative_17_tn3_5km_113
Особенности набора:
- Режим МТ стационар, минимальный
- Одна утечка на координате 5 км
- Объём утечки 113 м³
- Интенсивность утечки 3,6%
- Отбор на участке между СИ давления на выходе головной НПС и СИ давления на следующем КП на ЛЧ (на входе первой ЗА ЛЧ)
"""
from constants.enums import (
TU,
AdminTU,
ConfirmationStatus,
LdsStatus,
LdsStatusInitialization,
MeasureConversionRule,
ReservedType,
StationaryStatus,
)
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import (
CaseData,
CaseMarkers,
DiagnosticAreaStatusConfig,
LeakTestConfig,
SmokeSuiteConfig,
)
# ===== Константы набора =====
SUITE_NAME = "Imitative_17_tn3_5km_113"
SUITE_DATA_ID = 24
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# Параметры утечки
LEAK_COORDINATE_METERS = 5400.0
LEAK_VOLUME_M3 = 113.0
ALLOWED_TIME_DIFF_SECONDS = 1440 # 24 минуты
LEAK_START_INTERVAL_SECONDS = 2100 # 35 минут
FLOW_RATE_SETTINGS_THRESHOLD = 17
# ID диагностических участков
LEAK_DIAGNOSTIC_AREA_ID = 2
LEAK_DIAGNOSTIC_AREA_NAME = "Т-Н-3.НПС-5 «Тихорецкая».УЗР вых - Т-Н-3.УЗР НПС-3 «Нововеличковская»."
# ID труб для определения ДУ
DIAGNOSTIC_AREA_2_PIPE_ID = 1463 # Труба на ДУ с утечкой
DIAGNOSTIC_AREA_3_PIPE_ID = 1444 # OUT_NEIGHBOR_DIAGNOSTIC_AREA_PIPE_ID
# ID линейного участка
LINEAR_PART_ID = 407
# ===== Конфигурация набора =====
IMITATIVE_17_CONFIG = SmokeSuiteConfig(
# ===== Метаданные =====
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
main_pipeline=MAIN_PIPELINE,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST,
# ----- Ожидаемый статус стационара -----
expected_stationary_status=StationaryStatus.STATIONARY,
expected_report_stationary_status=StationaryStatus.STATIONARY.value,
# ----- Ожидаемые статусы для проверки режимов на ЭФ Диагностика сигналов -----
controlled_sites_with_segment=CaseData(
expected_result={
"exp_tixoreczkaya_novovelichkovskaya": (StationaryStatus.STATIONARY, LdsStatus.SERVICEABLE),
"exp_novovelichkovskaya_krymskaya": (StationaryStatus.STATIONARY, LdsStatus.SERVICEABLE),
"exp_krymskaya_grushovaya": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_bejsug": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_ponura": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_kuban": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_afipskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_ilinskij": (StationaryStatus.STATIONARY, LdsStatus.FAULTY),
}
),
# ===== БАЗОВЫЕ ТЕСТЫ =====
basic_info_test=CaseMarkers(test_case_id="1", offset=5),
journal_info_test=CaseMarkers(test_case_id="2", offset=5),
lds_status_initialization_test=CaseMarkers(test_case_id="86", offset=5),
lds_status_init_in_journal_test=CaseMarkers(test_case_id="228", offset=5),
main_page_info_test=CaseMarkers(test_case_id="3", offset=6),
mask_signal_test=CaseMarkers(test_case_id="32", offset=8),
mask_info_in_journal_test=CaseMarkers(test_case_id="213", offset=9),
diagnostics_of_signals_after_initialization_test=CaseMarkers(test_case_id="210", offset=25),
lds_status_initialization_out_test=CaseMarkers(test_case_id="30", offset=30),
lds_status_init_out_in_journal_test=CaseMarkers(test_case_id="214", offset=31),
export_lds_status_report_test=CaseMarkers(test_case_id="235", offset=64),
export_mt_mode_report_test=CaseMarkers(test_case_id="240", offset=65),
# # ===== КОНФИГУРАЦИЯ УТЕЧКИ =====
leak=LeakTestConfig(
# ----- Конфигурация статусов СОУ во время утечки -----
lds_status_during_leak_config=DiagnosticAreaStatusConfig(
leak_diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
leak_du_expected_lds_status=LdsStatus.INITIALIZATION,
neighbors_du_expected_lds_status=LdsStatus.DEGRADATION,
),
# ----- Ожидаемый статус СОУ -----
lds_status_after_confirming_leak_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_2_PIPE_ID},
expected_result=(
LdsStatus.INITIALIZATION,
LdsStatusInitialization.ACCUMULATION_DATA.value,
),
),
# ----- Параметры утечки -----
coordinate_meters=LEAK_COORDINATE_METERS,
volume_m3=LEAK_VOLUME_M3,
linear_part_id=LINEAR_PART_ID,
flow_rate_settings_threshold=FLOW_RATE_SETTINGS_THRESHOLD,
diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
# ----- Временные интервалы -----
leak_start_interval_seconds=LEAK_START_INTERVAL_SECONDS,
allowed_time_diff_seconds=ALLOWED_TIME_DIFF_SECONDS,
# ----- Ожидаемые статусы -----
expected_lds_status=LdsStatus.SERVICEABLE,
expected_stationary_status=StationaryStatus.STATIONARY,
expected_algorithm_type=ReservedType.STATIONARY_FLOW,
expected_leak_status=ConfirmationStatus.CONFIRMED,
expected_lds_status_in_leaks_report=LdsStatus.SERVICEABLE.value,
expected_report_stationary_status=StationaryStatus.STATIONARY.value,
# ----- Тест BalanceAlgorithmResultsContent -----
balance_algorithm_leak_waiting_test=CaseMarkers(test_case_id="175", offset=47), # Длительность теста 5 минут
balance_algorithm_leak_detected_test=CaseMarkers(test_case_id="177", offset=58),
possible_leak_in_journal_test=CaseMarkers(test_case_id="211", offset=52),
# ----- Тест AllLeaksInfo -----
all_leaks_info_test=CaseMarkers(test_case_id="24", offset=58),
# ----- Тест LeakContent -----
leaks_content_test=CaseMarkers(test_case_id="91", offset=58),
# ----- Тест TuLeaksInfo -----
tu_leaks_info_test=CaseMarkers(test_case_id="84", offset=58),
# ----- Тест MessageInfo -----
leak_info_in_journal=CaseMarkers(test_case_id="154", offset=58),
# ----- Тест CommonSchemeContent -----
lds_status_during_leak_test=CaseMarkers(test_case_id="31", offset=58.5),
# ----- Тест MainPageInfoContent -----
leak_is_confirm_on_main_page_test=CaseMarkers(test_case_id="182", offset=60),
lds_status_after_confirming_leak_test=CaseMarkers(test_case_id="201", offset=60),
# ----- Тест AcknowledgeLeak -----
acknowledge_leak_test=CaseMarkers(test_case_id="6", offset=60.5),
acknowledge_leak_in_journal_test=CaseMarkers(test_case_id="212", offset=61),
# ----- Тест OutputSignals -----
output_signals_test=CaseMarkers(test_case_id="158", offset=62),
# ----- Тест ExportReports -----
export_leaks_report_test=CaseMarkers(test_case_id="234", offset=63),
),
)
20
"""
Конфигурация тестового набора Imitative_20_tn3_129km_113
Особенности набора:
- Режим МТ стационар, минимальный
- Одна утечка на координате 129 км
- Объём утечки 113.6 м³
- Интенсивность утечки 3,6%
- Отбор на НПС Нововеличковская (до МНС)
"""
from constants.enums import (
TU,
AdminTU,
ConfirmationStatus,
LdsStatus,
MeasureConversionRule,
ReservedType,
StationaryStatus,
)
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import (
CaseData,
CaseMarkers,
DiagnosticAreaStatusConfig,
LeakTestConfig,
SmokeSuiteConfig,
)
# ===== Константы набора =====
SUITE_NAME = "Imitative_20_tn3_129km_113"
SUITE_DATA_ID = 25
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# Параметры утечки
LEAK_COORDINATE_METERS = 129000
LEAK_VOLUME_M3 = 113.6
ALLOWED_TIME_DIFF_SECONDS = 1440 # 24 минуты
LEAK_START_INTERVAL_SECONDS = 2100 # 35 минут
LEAK_TECHNOLOGICAL_OBJECT = "НПС-5 Тихорецкая - НПС-3 Нововеличковская"
FLOW_RATE_SETTINGS_THRESHOLD = 17
# ID диагностических участков
LEAK_DIAGNOSTIC_AREA_ID = 3
LEAK_DIAGNOSTIC_AREA_NAME = "Т-Н-3.НПС-5 «Тихорецкая».УЗР вых - Т-Н-3.УЗР НПС-3 «Нововеличковская»."
# ID труб для определения ДУ
DIAGNOSTIC_AREA_3_PIPE_ID = 474 # Труба на ДУ с утечкой
DIAGNOSTIC_AREA_2_PIPE_ID = 1463 # IN_NEIGHBOR_DIAGNOSTIC_AREA_PIPE_ID
DIAGNOSTIC_AREA_6_PIPE_ID = 999205440 # OUT_NEIGHBOR_DIAGNOSTIC_AREA_PIPE_ID
# ID линейного участка
LINEAR_PART_ID = 407
# ===== Конфигурация набора =====
IMITATIVE_20_CONFIG = SmokeSuiteConfig(
# ===== Метаданные =====
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
main_pipeline=MAIN_PIPELINE,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST,
# ----- Ожидаемый статус стационара -----
expected_stationary_status=StationaryStatus.STATIONARY,
expected_report_stationary_status=StationaryStatus.STATIONARY.value,
# ----- Ожидаемые статусы для проверки режимов на ЭФ Диагностика сигналов -----
controlled_sites_with_segment=CaseData(
expected_result={
"exp_tixoreczkaya_novovelichkovskaya": (StationaryStatus.STATIONARY, LdsStatus.SERVICEABLE),
"exp_novovelichkovskaya_krymskaya": (StationaryStatus.STATIONARY, LdsStatus.SERVICEABLE),
"exp_krymskaya_grushovaya": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_bejsug": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_ponura": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_kuban": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_afipskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_ilinskij": (StationaryStatus.STATIONARY, LdsStatus.FAULTY),
}
),
# ===== БАЗОВЫЕ ТЕСТЫ =====
basic_info_test=CaseMarkers(test_case_id="1", offset=5),
journal_info_test=CaseMarkers(test_case_id="2", offset=5),
lds_status_initialization_test=CaseMarkers(test_case_id="86", offset=5),
lds_status_init_in_journal_test=CaseMarkers(test_case_id="228", offset=5),
main_page_info_test=CaseMarkers(test_case_id="3", offset=6),
mask_signal_test=CaseMarkers(test_case_id="32", offset=8),
mask_info_in_journal_test=CaseMarkers(test_case_id="213", offset=9),
diagnostics_of_signals_after_initialization_test=CaseMarkers(test_case_id="210", offset=25),
lds_status_initialization_out_test=CaseMarkers(test_case_id="30", offset=30),
lds_status_init_out_in_journal_test=CaseMarkers(test_case_id="214", offset=31),
export_lds_status_report_test=CaseMarkers(test_case_id="235", offset=63),
export_mt_mode_report_test=CaseMarkers(test_case_id="240", offset=64),
# ===== КОНФИГУРАЦИЯ УТЕЧКИ =====
leak=LeakTestConfig(
# ----- Конфигурация статусов СОУ во время утечки -----
lds_status_during_leak_config=DiagnosticAreaStatusConfig(
leak_diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
leak_du_expected_lds_status=LdsStatus.INITIALIZATION,
neighbors_du_expected_lds_status=LdsStatus.DEGRADATION,
),
# ----- Параметры утечки -----
coordinate_meters=LEAK_COORDINATE_METERS,
volume_m3=LEAK_VOLUME_M3,
linear_part_id=LINEAR_PART_ID,
technological_object=LEAK_TECHNOLOGICAL_OBJECT,
flow_rate_settings_threshold=FLOW_RATE_SETTINGS_THRESHOLD,
diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
# ----- Временные интервалы -----
leak_start_interval_seconds=LEAK_START_INTERVAL_SECONDS,
allowed_time_diff_seconds=ALLOWED_TIME_DIFF_SECONDS,
# ----- Ожидаемые статусы -----
expected_lds_status=LdsStatus.SERVICEABLE,
expected_stationary_status=StationaryStatus.STATIONARY,
expected_algorithm_type=ReservedType.STATIONARY_FLOW,
expected_leak_status=ConfirmationStatus.CONFIRMED,
expected_lds_status_in_leaks_report=LdsStatus.SERVICEABLE.value,
expected_report_stationary_status=StationaryStatus.STATIONARY.value,
# ----- Тест BalanceAlgorithmResultsContent -----
balance_algorithm_leak_waiting_test=CaseMarkers(test_case_id="175", offset=46), # Длительность теста 5 минут
balance_algorithm_leak_detected_test=CaseMarkers(test_case_id="177", offset=59),
possible_leak_in_journal_test=CaseMarkers(test_case_id="211", offset=51),
# ----- Тест AllLeaksInfo -----
all_leaks_info_test=CaseMarkers(test_case_id="25", offset=59),
# ----- Тест LeaksContent -----
leaks_content_test=CaseMarkers(test_case_id="91", offset=59),
# ----- Тест MessageInfo -----
leak_info_in_journal=CaseMarkers(test_case_id="154", offset=59),
# ----- Тест TuLeaksInfo -----
tu_leaks_info_test=CaseMarkers(test_case_id="84", offset=59),
# ----- Тест CommonSchemeContent -----
lds_status_during_leak_test=CaseMarkers(test_case_id="31", offset=59.5),
# ----- Тест MainPageInfoContent -----
leak_is_confirm_on_main_page_test=CaseMarkers(test_case_id="182", offset=60),
# ----- Тест AcknowledgeLeak -----
acknowledge_leak_test=CaseMarkers(test_case_id="6", offset=60.5),
acknowledge_leak_in_journal_test=CaseMarkers(test_case_id="212", offset=61),
# ----- Тест OutputSignals -----
output_signals_test=CaseMarkers(test_case_id="158", offset=61.5),
# ----- Тест ExportReports -----
export_leaks_report_test=CaseMarkers(test_case_id="234", offset=62),
),
)
29
"""
Конфигурация тестового набора Imitative_29_tn3_56km_3156
Особенности набора:
- Режим МТ стационар, минимальный
- Одна утечка на координате 56 км
- Объём утечки 3156 м³
- Интенсивность утечки 100%
"""
from constants.enums import (
TU,
AdminTU,
ConfirmationStatus,
LdsStatus,
LdsStatusInitialization,
MeasureConversionRule,
ReservedType,
StationaryStatus,
)
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import (
CaseData,
CaseMarkers,
DiagnosticAreaStatusConfig,
LeakTestConfig,
SmokeSuiteConfig,
)
# ===== Константы набора =====
SUITE_NAME = "Imitative_29_tn3_56km_3156"
SUITE_DATA_ID = 33
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# Параметры утечки
LEAK_COORDINATE_METERS = 56000.0
LEAK_VOLUME_M3 = 3156.0
ALLOWED_TIME_DIFF_SECONDS = 360 # 6 мин
LEAK_START_INTERVAL_SECONDS = 1800 # 30 минут
FLOW_RATE_SETTINGS_THRESHOLD = 17
# ID диагностических участков
LEAK_DIAGNOSTIC_AREA_ID = 2
LEAK_DIAGNOSTIC_AREA_NAME = "Т-Н-3.НПС-5 «Тихорецкая».УЗР вых - Т-Н-3.УЗР НПС-3 «Нововеличковская»."
# ID труб для определения ДУ
DIAGNOSTIC_AREA_2_PIPE_ID = 1463 # Труба на ДУ с утечкой
DIAGNOSTIC_AREA_3_PIPE_ID = 1444 # OUT_NEIGHBOR_DIAGNOSTIC_AREA_PIPE_ID
# ID линейного участка
LINEAR_PART_ID = 407
# ===== Конфигурация набора =====
IMITATIVE_29_CONFIG = SmokeSuiteConfig(
# ===== Метаданные =====
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
main_pipeline=MAIN_PIPELINE,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST,
# ----- Ожидаемый статус стационара -----
expected_stationary_status=StationaryStatus.STATIONARY,
expected_report_stationary_status=StationaryStatus.STATIONARY.value,
# ----- Ожидаемые статусы для проверки режимов на ЭФ Диагностика сигналов -----
controlled_sites_with_segment=CaseData(
expected_result={
"exp_tixoreczkaya_novovelichkovskaya": (StationaryStatus.STATIONARY, LdsStatus.SERVICEABLE),
"exp_novovelichkovskaya_krymskaya": (StationaryStatus.STATIONARY, LdsStatus.DEGRADATION),
"exp_krymskaya_grushovaya": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_bejsug": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_ponura": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_kuban": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_afipskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_ilinskij": (StationaryStatus.STATIONARY, LdsStatus.FAULTY),
}
),
# ===== БАЗОВЫЕ ТЕСТЫ =====
basic_info_test=CaseMarkers(test_case_id="1", offset=5),
journal_info_test=CaseMarkers(test_case_id="2", offset=5),
lds_status_initialization_test=CaseMarkers(test_case_id="86", offset=5),
lds_status_init_in_journal_test=CaseMarkers(test_case_id="228", offset=5),
main_page_info_test=CaseMarkers(test_case_id="3", offset=6),
mask_signal_test=CaseMarkers(test_case_id="32", offset=8),
mask_info_in_journal_test=CaseMarkers(test_case_id="213", offset=9),
diagnostics_of_signals_after_initialization_test=CaseMarkers(test_case_id="210", offset=25),
lds_status_initialization_out_test=CaseMarkers(test_case_id="30", offset=30),
lds_status_init_out_in_journal_test=CaseMarkers(test_case_id="214", offset=30),
export_lds_status_report_test=CaseMarkers(test_case_id="235", offset=42),
export_mt_mode_report_test=CaseMarkers(test_case_id="240", offset=43),
# ===== КОНФИГУРАЦИЯ УТЕЧКИ =====
leak=LeakTestConfig(
# ----- Конфигурация статусов СОУ во время утечки -----
lds_status_during_leak_config=DiagnosticAreaStatusConfig(
leak_diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
leak_du_expected_lds_status=LdsStatus.INITIALIZATION,
neighbors_du_expected_lds_status=LdsStatus.DEGRADATION,
),
# ----- Ожидаемый статус СОУ -----
lds_status_after_confirming_leak_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_2_PIPE_ID},
expected_result=(
LdsStatus.INITIALIZATION,
LdsStatusInitialization.ACCUMULATION_DATA.value,
),
),
# ----- Параметры утечки -----
coordinate_meters=LEAK_COORDINATE_METERS,
volume_m3=LEAK_VOLUME_M3,
linear_part_id=LINEAR_PART_ID,
flow_rate_settings_threshold=FLOW_RATE_SETTINGS_THRESHOLD,
diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
# ----- Временные интервалы -----
leak_start_interval_seconds=LEAK_START_INTERVAL_SECONDS,
allowed_time_diff_seconds=ALLOWED_TIME_DIFF_SECONDS,
# ----- Ожидаемые статусы -----
expected_lds_status=LdsStatus.DEGRADATION,
expected_stationary_status=StationaryStatus.STATIONARY,
expected_algorithm_type=ReservedType.STATIONARY_FLOW,
expected_leak_status=ConfirmationStatus.CONFIRMED,
expected_lds_status_in_leaks_report=LdsStatus.DEGRADATION.value,
expected_report_stationary_status=StationaryStatus.STATIONARY.value,
# ----- Тест BalanceAlgorithmResultsContent -----
balance_algorithm_leak_waiting_test=CaseMarkers(test_case_id="175", offset=30), # Длительность теста 5 минут
balance_algorithm_leak_detected_test=CaseMarkers(test_case_id="177", offset=36),
possible_leak_in_journal_test=CaseMarkers(test_case_id="211", offset=32),
# ----- Тест AllLeaksInfo -----
all_leaks_info_test=CaseMarkers(test_case_id="33", offset=36),
# ----- Тест LeakContent -----
leaks_content_test=CaseMarkers(test_case_id="91", offset=36),
# ----- Тест TuLeaksInfo -----
tu_leaks_info_test=CaseMarkers(test_case_id="84", offset=36),
# ----- Тест MessageInfo -----
leak_info_in_journal=CaseMarkers(test_case_id="154", offset=36),
# ----- Тест CommonSchemeContent -----
lds_status_during_leak_test=CaseMarkers(test_case_id="31", offset=36.5),
# ----- Тест MainPageInfoContent -----
leak_is_confirm_on_main_page_test=CaseMarkers(test_case_id="182", offset=38),
lds_status_after_confirming_leak_test=CaseMarkers(test_case_id="201", offset=38),
# ----- Тест AcknowledgeLeak -----
acknowledge_leak_test=CaseMarkers(test_case_id="6", offset=38.5),
acknowledge_leak_in_journal_test=CaseMarkers(test_case_id="212", offset=39),
# ----- Тест OutputSignals -----
output_signals_test=CaseMarkers(test_case_id="158", offset=40),
# ----- Тест ExportReports -----
export_leaks_report_test=CaseMarkers(test_case_id="234", offset=41),
),
)
31
"""
Конфигурация тестового набора Imitative_31_tn3_215km_284
Особенности набора:
- Режим МТ стационар, минимальный
- Одна утечка на координате 215 км
- Объём утечки 284 м³
- Интенсивность утечки 9%
"""
from constants.enums import (
TU,
AdminTU,
ConfirmationStatus,
LdsStatus,
LdsStatusInitialization,
MeasureConversionRule,
ReservedType,
StationaryStatus,
)
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import (
CaseData,
CaseMarkers,
DiagnosticAreaStatusConfig,
LeakTestConfig,
SmokeSuiteConfig,
)
# ===== Константы набора =====
SUITE_NAME = "Imitative_31_tn3_215km_284"
SUITE_DATA_ID = 26
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# Параметры утечки
LEAK_COORDINATE_METERS = 215000.0
LEAK_VOLUME_M3 = 284.0
ALLOWED_TIME_DIFF_SECONDS = 1440 # 24 минуты
LEAK_START_INTERVAL_SECONDS = 1800 # 30 минут
FLOW_RATE_SETTINGS_THRESHOLD = 17
# ID диагностических участков (2 соседних ДУ)
LEAK_DIAGNOSTIC_AREA_ID = 3
LEAK_DIAGNOSTIC_AREA_NAME = "Т-Н-3.УЗР НПС-3 «Нововеличковская». - Т-Н-3.НПС-2 «Крымская».УЗР СИКН Т-К"
# ID труб для определения ДУ
DIAGNOSTIC_AREA_3_PIPE_ID = 474 # Труба на ДУ с утечкой
DIAGNOSTIC_AREA_2_PIPE_ID = 1463 # IN_NEIGHBOR_DIAGNOSTIC_AREA_PIPE_ID
DIAGNOSTIC_AREA_6_PIPE_ID = 999205440 # OUT_NEIGHBOR_DIAGNOSTIC_AREA_PIPE_ID
# ID линейного участка
LINEAR_PART_ID = 408
# ===== Конфигурация набора =====
IMITATIVE_31_CONFIG = SmokeSuiteConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
main_pipeline=MAIN_PIPELINE,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST,
# ----- Ожидаемый статус стационара -----
expected_stationary_status=StationaryStatus.STATIONARY,
expected_report_stationary_status=StationaryStatus.STATIONARY.value,
# ----- Ожидаемые статусы для проверки режимов на ЭФ Диагностика сигналов -----
controlled_sites_with_segment=CaseData(
expected_result={
"exp_tixoreczkaya_novovelichkovskaya": (StationaryStatus.STATIONARY, LdsStatus.SERVICEABLE),
"exp_novovelichkovskaya_krymskaya": (StationaryStatus.STATIONARY, LdsStatus.SERVICEABLE),
"exp_krymskaya_grushovaya": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_bejsug": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_ponura": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_kuban": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_afipskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_ilinskij": (StationaryStatus.STATIONARY, LdsStatus.FAULTY),
}
),
# ===== БАЗОВЫЕ ТЕСТЫ =====
basic_info_test=CaseMarkers(test_case_id="1", offset=5),
journal_info_test=CaseMarkers(test_case_id="2", offset=5),
lds_status_initialization_test=CaseMarkers(test_case_id="86", offset=5),
lds_status_init_in_journal_test=CaseMarkers(test_case_id="228", offset=5),
main_page_info_test=CaseMarkers(test_case_id="3", offset=6),
mask_signal_test=CaseMarkers(test_case_id="32", offset=8),
mask_info_in_journal_test=CaseMarkers(test_case_id="213", offset=9),
diagnostics_of_signals_after_initialization_test=CaseMarkers(test_case_id="210", offset=25),
lds_status_initialization_out_test=CaseMarkers(test_case_id="30", offset=30),
lds_status_init_out_in_journal_test=CaseMarkers(test_case_id="214", offset=31),
export_lds_status_report_test=CaseMarkers(test_case_id="235", offset=59),
export_mt_mode_report_test=CaseMarkers(test_case_id="240", offset=60),
# ===== КОНФИГУРАЦИЯ УТЕЧКИ =====
leak=LeakTestConfig(
# ----- Конфигурация статусов СОУ во время утечки -----
lds_status_during_leak_config=DiagnosticAreaStatusConfig(
leak_diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
leak_du_expected_lds_status=LdsStatus.INITIALIZATION,
neighbors_du_expected_lds_status=LdsStatus.DEGRADATION,
),
# ----- Ожидаемый статус СОУ -----
lds_status_after_confirming_leak_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_2_PIPE_ID},
expected_result=(
LdsStatus.INITIALIZATION,
LdsStatusInitialization.ACCUMULATION_DATA,
),
),
# ----- Параметры утечки -----
coordinate_meters=LEAK_COORDINATE_METERS,
volume_m3=LEAK_VOLUME_M3,
linear_part_id=LINEAR_PART_ID,
flow_rate_settings_threshold=FLOW_RATE_SETTINGS_THRESHOLD,
diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
# ----- Временные интервалы -----
leak_start_interval_seconds=LEAK_START_INTERVAL_SECONDS,
allowed_time_diff_seconds=ALLOWED_TIME_DIFF_SECONDS,
# ----- Ожидаемые статусы -----
expected_lds_status=LdsStatus.SERVICEABLE,
expected_stationary_status=StationaryStatus.STATIONARY,
expected_algorithm_type=ReservedType.STATIONARY_FLOW,
expected_leak_status=ConfirmationStatus.CONFIRMED,
expected_report_stationary_status=StationaryStatus.STATIONARY.value,
expected_lds_status_in_leaks_report=LdsStatus.SERVICEABLE.value,
# ----- Тест BalanceAlgorithmResultsContent -----
balance_algorithm_leak_waiting_test=CaseMarkers(test_case_id="175", offset=41), # Длительность теста 5 минут
balance_algorithm_leak_detected_test=CaseMarkers(test_case_id="177", offset=54),
possible_leak_in_journal_test=CaseMarkers(test_case_id="211", offset=37),
# ----- Тест AllLeaksInfo -----
all_leaks_info_test=CaseMarkers(test_case_id="26", offset=54),
# ----- Тест LeaksContent -----
leaks_content_test=CaseMarkers(test_case_id="91", offset=54),
# ----- Тест TuLeaksInfo -----
tu_leaks_info_test=CaseMarkers(test_case_id="84", offset=54),
# ----- Тест MessageInfo -----
leak_info_in_journal=CaseMarkers(test_case_id="154", offset=54),
# ----- Тест CommonSchemeContent -----
lds_status_during_leak_test=CaseMarkers(test_case_id="31", offset=54.5),
# ----- Тест MainPageInfoContent -----
leak_is_confirm_on_main_page_test=CaseMarkers(test_case_id="182", offset=55),
lds_status_after_confirming_leak_test=CaseMarkers(test_case_id="201", offset=55),
# ----- Тест AcknowledgeLeak -----
acknowledge_leak_test=CaseMarkers(test_case_id="6", offset=56),
acknowledge_leak_in_journal_test=CaseMarkers(test_case_id="212", offset=56.5),
# ----- Тест OutputSignals -----
output_signals_test=CaseMarkers(test_case_id="158", offset=57),
# ----- Тесты на факт завершения утечки -----
the_leak_is_complete_on_kg_test=CaseMarkers(test_case_id="180", offset=86),
leak_is_complete_on_main_page_test=CaseMarkers(test_case_id="199", offset=86),
leak_is_complete_in_output_signals_test=CaseMarkers(test_case_id="180", offset=86),
complete_tu_leaks_info_content_test=CaseMarkers(test_case_id="180", offset=86),
completed_leak_info_in_journal_test=CaseMarkers(test_case_id="215", offset=86),
lds_status_completed_leak_test=CaseMarkers(test_case_id="202", offset=94),
all_leaks_is_empty_test=CaseMarkers(test_case_id="187", offset=96),
# ----- Тест ExportReports -----
export_leaks_report_test=CaseMarkers(test_case_id="234", offset=58),
),
)
rejected
"""
Конфигурация тестового набора is_rejected_regress
Особенности набора:
- Проверка отбраковки сигналов с датчиков давления и расходомеров
- Типы отбраковки: empty, quality, VTOR, nearbySensors,
diagnosticInfo, constantSignal, range
- Для каждого типа - отдельный RejectionTestCase на снятие отбраковки
Запуск:
pytest tests/test_is_rejected_regress.py --suites=is_rejected_regress
"""
from constants.enums import TU, AdminTU, MeasureConversionRule, RejectionCriteria, RejectionSensorTag
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import CaseMarkers, IsRejectedConfig, RejectionTestCase
# ===== Константы набора =====
SUITE_NAME = "is_rejected_regress"
SUITE_DATA_ID = 16
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# ===== Тегированные датчики =====
FLOW_KRIM = RejectionSensorTag.NPS_KRIM_P_Vmom
PRESSURE_VELKRIM = RejectionSensorTag.KP_209_1_Pin
FLOW_TIH = RejectionSensorTag.NPS_TIH_5_Vmom
PRESSURE_KP7 = RejectionSensorTag.KP_7_Pin
PRESSURE_KP8_PIN = RejectionSensorTag.KP_8_Pin
PRESSURE_KP8_POUT = RejectionSensorTag.KP_8_Pout
# ===== Ожидаемые signalName =====
SIGNAL_FLOW = "СИ расхода. Расход"
SIGNAL_PRESSURE = "СИ давления"
# ===== Конфигурация набора =====
IS_REJECTED_REGRESS_CONFIG = IsRejectedConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
main_pipeline=MAIN_PIPELINE,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST_REJECT,
# ===== Vault settings =====
requires_process_empty_values_rejection=True,
# ===== Tests =====
# rejection_report_test=CaseMarkers(test_case_id="210", offset=72),
rejection_cases=[
# ===== emptyFilterSettings =====
RejectionTestCase(
name="empty_flow",
sensor=FLOW_KRIM,
expected_event="Отбраковка по отсутствию значения",
expected_signal_name=SIGNAL_FLOW,
expected_criteria_names=RejectionCriteria.EMPTY,
time_range_start_s=0,
time_range_end_s=240,
rejection_input_signals_test=CaseMarkers(test_case_id="189", offset=3),
rejection_main_page_test=CaseMarkers(test_case_id="189", offset=3),
rejection_scheme_signals_state_test=CaseMarkers(test_case_id="189", offset=3),
),
RejectionTestCase(
name="empty_pressure",
sensor=PRESSURE_VELKRIM,
expected_event="Отбраковка по отсутствию значения",
expected_signal_name=SIGNAL_PRESSURE,
expected_criteria_names=RejectionCriteria.EMPTY,
time_range_start_s=0,
time_range_end_s=540,
rejection_input_signals_test=CaseMarkers(test_case_id="190", offset=4),
rejection_main_page_test=CaseMarkers(test_case_id="190", offset=6),
rejection_scheme_signals_state_test=CaseMarkers(test_case_id="190", offset=5),
),
# ===== qualityFilterSettings =====
RejectionTestCase(
name="quality_flow",
sensor=FLOW_KRIM,
expected_event="Отбраковка по качеству",
expected_signal_name=SIGNAL_FLOW,
expected_criteria_names=RejectionCriteria.QUALITY,
time_range_start_s=600,
time_range_end_s=840,
rejection_input_signals_test=CaseMarkers(test_case_id="191", offset=13),
rejection_journal_test=CaseMarkers(test_case_id="191", offset=14),
rejection_main_page_test=CaseMarkers(test_case_id="191", offset=11),
rejection_scheme_signals_state_test=CaseMarkers(test_case_id="191", offset=12),
),
RejectionTestCase(
name="quality_flow_clearance",
sensor=FLOW_KRIM,
expected_event="Отбраковка по качеству снята",
expected_signal_name=SIGNAL_FLOW,
expected_is_rejected=False,
time_range_start_s=600,
time_range_end_s=840,
# rejection_input_signals_test=CaseMarkers(test_case_id="191", offset=16), blocked by DEVOPS-95
rejection_journal_test=CaseMarkers(test_case_id="191", offset=16),
rejection_scheme_signals_state_test=CaseMarkers(test_case_id="191", offset=16),
),
# RejectionTestCase(
# name="quality_pressure",
# sensor=PRESSURE_VELKRIM,
# expected_event="Отбраковка по качеству",
# expected_signal_name=SIGNAL_PRESSURE,
# expected_criteria_names=RejectionCriteria.QUALITY,
# time_range_start_s=900,
# time_range_end_s=1140,
# rejection_input_signals_test=CaseMarkers(test_case_id="205", offset=18),
# rejection_journal_test=CaseMarkers(test_case_id="205", offset=19),
# rejection_main_page_test=CaseMarkers(test_case_id="205", offset=16.5),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="205", offset=17),
# ),
# RejectionTestCase(
# name="quality_pressure_clearance",
# sensor=PRESSURE_VELKRIM,
# expected_event="Отбраковка по качеству снята",
# expected_signal_name=SIGNAL_PRESSURE,
# expected_is_rejected=False,
# time_range_start_s=900,
# time_range_end_s=1140,
# # rejection_input_signals_test=CaseMarkers(test_case_id="205", offset=21), blocked by DEVOPS-95
# rejection_journal_test=CaseMarkers(test_case_id="205", offset=21),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="205", offset=21),
# ),
# # ===== vtorFilterSettings =====
# RejectionTestCase(
# name="vtor_flow",
# sensor=FLOW_TIH,
# expected_event="Отбраковка по сигналу ВТОР",
# expected_signal_name=SIGNAL_FLOW,
# expected_criteria_names=RejectionCriteria.VTOR,
# time_range_start_s=1200,
# time_range_end_s=1440,
# rejection_input_signals_test=CaseMarkers(test_case_id="206", offset=23),
# rejection_journal_test=CaseMarkers(test_case_id="206", offset=24),
# rejection_main_page_test=CaseMarkers(test_case_id="206", offset=21.5),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="206", offset=22),
# ),
# RejectionTestCase(
# name="vtor_flow_clearance",
# sensor=FLOW_TIH,
# expected_event="Отбраковка по сигналу ВТОР снята",
# expected_signal_name=SIGNAL_FLOW,
# expected_is_rejected=False,
# time_range_start_s=1200,
# time_range_end_s=1440,
# # rejection_input_signals_test=CaseMarkers(test_case_id="206", offset=26), blocked by DEVOPS-95
# rejection_journal_test=CaseMarkers(test_case_id="206", offset=26),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="206", offset=26),
# ),
# RejectionTestCase(
# name="vtor_pressure",
# sensor=PRESSURE_KP7,
# expected_event="Отбраковка по сигналу ВТОР",
# expected_signal_name=SIGNAL_PRESSURE,
# expected_criteria_names=RejectionCriteria.VTOR,
# time_range_start_s=1500,
# time_range_end_s=1740,
# rejection_input_signals_test=CaseMarkers(test_case_id="207", offset=28),
# rejection_journal_test=CaseMarkers(test_case_id="207", offset=29),
# rejection_main_page_test=CaseMarkers(test_case_id="207", offset=26.5),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="207", offset=27),
# ),
# RejectionTestCase(
# name="vtor_pressure_clearance",
# sensor=PRESSURE_KP7,
# expected_event="Отбраковка по сигналу ВТОР снята",
# expected_signal_name=SIGNAL_PRESSURE,
# expected_is_rejected=False,
# time_range_start_s=1500,
# time_range_end_s=1740,
# # rejection_input_signals_test=CaseMarkers(test_case_id="207", offset=30.5), blocked by DEVOPS-95
# rejection_journal_test=CaseMarkers(test_case_id="207", offset=30.5),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="207", offset=30.5),
# ),
# # ===== nearbySensorsFilterSettings =====
# RejectionTestCase(
# name="nearby_pressure_pin",
# sensor=PRESSURE_KP8_PIN,
# expected_event="Отбраковка по разнице показаний СИ давления на КП",
# expected_signal_name=SIGNAL_PRESSURE,
# expected_criteria_names=RejectionCriteria.NEARBY,
# time_range_start_s=1800,
# time_range_end_s=2040,
# rejection_input_signals_test=CaseMarkers(test_case_id="192", offset=32),
# rejection_journal_test=CaseMarkers(test_case_id="192", offset=32.5),
# rejection_main_page_test=CaseMarkers(test_case_id="192", offset=31),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="192", offset=31.5),
# ),
# RejectionTestCase(
# name="nearby_pressure_pout",
# sensor=PRESSURE_KP8_POUT,
# expected_event="Отбраковка по разнице показаний СИ давления на КП",
# expected_signal_name=SIGNAL_PRESSURE,
# expected_criteria_names=RejectionCriteria.NEARBY,
# time_range_start_s=1800,
# time_range_end_s=2040,
# rejection_input_signals_test=CaseMarkers(test_case_id="193", offset=34),
# rejection_journal_test=CaseMarkers(test_case_id="193", offset=34.5),
# rejection_main_page_test=CaseMarkers(test_case_id="193", offset=33),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="193", offset=33.5),
# ),
# RejectionTestCase(
# name="nearby_pressure_pin_clearance",
# sensor=PRESSURE_KP8_PIN,
# expected_event="Отбраковка по разнице показаний СИ давления на КП снята",
# expected_signal_name=SIGNAL_PRESSURE,
# expected_is_rejected=False,
# time_range_start_s=1800,
# time_range_end_s=2040,
# # rejection_input_signals_test=CaseMarkers(test_case_id="192", offset=35.5), blocked by DEVOPS-95
# rejection_journal_test=CaseMarkers(test_case_id="192", offset=35.5),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="192", offset=35.5),
# ),
# RejectionTestCase(
# name="nearby_pressure_pout_clearance",
# sensor=PRESSURE_KP8_POUT,
# expected_event="Отбраковка по разнице показаний СИ давления на КП снята",
# expected_signal_name=SIGNAL_PRESSURE,
# expected_is_rejected=False,
# time_range_start_s=1800,
# time_range_end_s=2040,
# # rejection_input_signals_test=CaseMarkers(test_case_id="193", offset=35.5), blocked by DEVOPS-95
# rejection_journal_test=CaseMarkers(test_case_id="193", offset=35.5),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="193", offset=35.5),
# ),
# # ===== diagnosticInfoFilterSettings =====
# RejectionTestCase(
# name="diagnostic_info_flow",
# sensor=FLOW_TIH,
# expected_event="Отбраковка по диагностической информации",
# expected_signal_name=SIGNAL_FLOW,
# expected_criteria_names=RejectionCriteria.DIAGNOSTIC_INFO,
# time_range_start_s=2100,
# time_range_end_s=2340,
# rejection_input_signals_test=CaseMarkers(test_case_id="194", offset=38),
# # rejection_journal_test=CaseMarkers(test_case_id="194", offset=39), # blocked by LDS-12394
# rejection_main_page_test=CaseMarkers(test_case_id="194", offset=36),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="194", offset=37),
# ),
# RejectionTestCase(
# name="diagnostic_info_flow_clearance",
# sensor=FLOW_TIH,
# expected_event="Отбраковка по диагностической информации снята",
# expected_signal_name=SIGNAL_FLOW,
# expected_is_rejected=False,
# time_range_start_s=2100,
# time_range_end_s=2340,
# # rejection_input_signals_test=CaseMarkers(test_case_id="194", offset=40.5), blocked by DEVOPS-95
# # rejection_journal_test=CaseMarkers(test_case_id="194", offset=40.5), # blocked by LDS-12394
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="194", offset=40.5),
# ),
# # ===== constantSignalFilter =====
# # RejectionTestCase( blocked by DEVOPS-95
# # name="constant_signal_flow",
# # sensor=FLOW_TIH,
# # expected_event="Отбраковка по постоянному сигналу",
# # expected_signal_name=SIGNAL_FLOW,
# # expected_criteria_names=RejectionCriteria.CONSTANT_SIGNAL,
# # time_range_start_s=2400,
# # time_range_end_s=2640,
# # rejection_input_signals_test=CaseMarkers(test_case_id="208", offset=43),
# # rejection_journal_test=CaseMarkers(test_case_id="208", offset=44),
# # rejection_main_page_test=CaseMarkers(test_case_id="208", offset=41),
# # rejection_scheme_signals_state_test=CaseMarkers(test_case_id="208", offset=42),
# # ),
# # RejectionTestCase( blocked by DEVOPS-95
# # name="constant_signal_flow_clearance",
# # sensor=FLOW_TIH,
# # expected_event="Отбраковка по постоянному сигналу снята",
# # expected_signal_name=SIGNAL_FLOW,
# # expected_is_rejected=False,
# # time_range_start_s=2400,
# # time_range_end_s=2640,
# # rejection_input_signals_test=CaseMarkers(test_case_id="208", offset=45),
# # rejection_journal_test=CaseMarkers(test_case_id="208", offset=45),
# # rejection_scheme_signals_state_test=CaseMarkers(test_case_id="208", offset=45),
# # ),
# # RejectionTestCase( blocked by DEVOPS-95
# # name="constant_signal_pressure",
# # sensor=PRESSURE_KP8_PIN,
# # expected_event="Отбраковка по постоянному сигналу",
# # expected_signal_name=SIGNAL_PRESSURE,
# # expected_criteria_names=RejectionCriteria.CONSTANT_SIGNAL,
# # time_range_start_s=2700,
# # time_range_end_s=2940,
# # rejection_input_signals_test=CaseMarkers(test_case_id="209", offset=48),
# # rejection_journal_test=CaseMarkers(test_case_id="209", offset=49),
# # rejection_main_page_test=CaseMarkers(test_case_id="209", offset=46),
# # rejection_scheme_signals_state_test=CaseMarkers(test_case_id="209", offset=47),
# # ),
# # RejectionTestCase( blocked by DEVOPS-95
# # name="constant_signal_pressure_clearance",
# # sensor=PRESSURE_KP8_PIN,
# # expected_event="Отбраковка по постоянному сигналу снята",
# # expected_signal_name=SIGNAL_PRESSURE,
# # expected_is_rejected=False,
# # time_range_start_s=2700,
# # time_range_end_s=2940,
# # rejection_input_signals_test=CaseMarkers(test_case_id="209", offset=50),
# # rejection_journal_test=CaseMarkers(test_case_id="209", offset=50),
# # rejection_scheme_signals_state_test=CaseMarkers(test_case_id="209", offset=50),
# # ),
# # ===== rangeFilterSettings =====
# RejectionTestCase(
# name="range_upper_flow",
# sensor=FLOW_TIH,
# expected_event="Отбраковка по допустимому диапазону",
# expected_signal_name=SIGNAL_FLOW,
# expected_criteria_names=RejectionCriteria.RANGE,
# time_range_start_s=3000,
# time_range_end_s=3240,
# rejection_input_signals_test=CaseMarkers(test_case_id="195", offset=53),
# rejection_journal_test=CaseMarkers(test_case_id="195", offset=54),
# rejection_main_page_test=CaseMarkers(test_case_id="195", offset=51),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="195", offset=52),
# ),
# RejectionTestCase(
# name="range_upper_flow_clearance",
# sensor=FLOW_TIH,
# expected_event="Отбраковка по допустимому диапазону снята",
# expected_signal_name=SIGNAL_FLOW,
# expected_is_rejected=False,
# time_range_start_s=3000,
# time_range_end_s=3240,
# # rejection_input_signals_test=CaseMarkers(test_case_id="195", offset=55.8), blocked by DEVOPS-95
# rejection_journal_test=CaseMarkers(test_case_id="195", offset=55.8),
# # rejection_scheme_signals_state_test=CaseMarkers(test_case_id="195", offset=55.8), blocked by DEVOPS-95
# ),
# RejectionTestCase(
# name="range_lower_flow",
# sensor=FLOW_TIH,
# expected_event="Отбраковка по допустимому диапазону",
# expected_signal_name=SIGNAL_FLOW,
# expected_criteria_names=RejectionCriteria.RANGE,
# time_range_start_s=3300,
# time_range_end_s=3540,
# rejection_input_signals_test=CaseMarkers(test_case_id="197", offset=58),
# rejection_journal_test=CaseMarkers(test_case_id="197", offset=59),
# rejection_main_page_test=CaseMarkers(test_case_id="197", offset=56),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="197", offset=57),
# ),
# RejectionTestCase(
# name="range_lower_flow_clearance",
# sensor=FLOW_TIH,
# expected_event="Отбраковка по допустимому диапазону снята",
# expected_signal_name=SIGNAL_FLOW,
# expected_is_rejected=False,
# time_range_start_s=3300,
# time_range_end_s=3540,
# # rejection_input_signals_test=CaseMarkers(test_case_id="197", offset=60.8), blocked by DEVOPS-95
# rejection_journal_test=CaseMarkers(test_case_id="197", offset=60.8),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="197", offset=60.8),
# ),
# RejectionTestCase(
# name="range_upper_pressure",
# sensor=PRESSURE_KP8_PIN,
# expected_event="Отбраковка по допустимому диапазону",
# expected_signal_name=SIGNAL_PRESSURE,
# expected_criteria_names=RejectionCriteria.RANGE,
# time_range_start_s=3600,
# time_range_end_s=3840,
# rejection_input_signals_test=CaseMarkers(test_case_id="196", offset=63),
# rejection_journal_test=CaseMarkers(test_case_id="196", offset=64),
# rejection_main_page_test=CaseMarkers(test_case_id="196", offset=61),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="196", offset=62),
# ),
# RejectionTestCase(
# name="range_upper_pressure_clearance",
# sensor=PRESSURE_KP8_PIN,
# expected_event="Отбраковка по допустимому диапазону снята",
# expected_signal_name=SIGNAL_PRESSURE,
# expected_is_rejected=False,
# time_range_start_s=3600,
# time_range_end_s=3840,
# # rejection_input_signals_test=CaseMarkers(test_case_id="196", offset=65.8), blocked by DEVOPS-95
# rejection_journal_test=CaseMarkers(test_case_id="196", offset=65.8),
# # rejection_scheme_signals_state_test=CaseMarkers(test_case_id="196", offset=65.8), blocked by DEVOPS-95
# ),
# RejectionTestCase(
# name="range_lower_pressure",
# sensor=PRESSURE_KP8_PIN,
# expected_event="Отбраковка по допустимому диапазону",
# expected_signal_name=SIGNAL_PRESSURE,
# expected_criteria_names=RejectionCriteria.RANGE,
# time_range_start_s=3900,
# time_range_end_s=4140,
# rejection_input_signals_test=CaseMarkers(test_case_id="198", offset=68),
# rejection_journal_test=CaseMarkers(test_case_id="198", offset=69),
# rejection_main_page_test=CaseMarkers(test_case_id="198", offset=66),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="198", offset=67),
# ),
# RejectionTestCase(
# name="range_lower_pressure_clearance",
# sensor=PRESSURE_KP8_PIN,
# expected_event="Отбраковка по допустимому диапазону снята",
# expected_signal_name=SIGNAL_PRESSURE,
# expected_is_rejected=False,
# time_range_start_s=3900,
# time_range_end_s=4140,
# # rejection_input_signals_test=CaseMarkers(test_case_id="198", offset=71), blocked by DEVOPS-95
# rejection_journal_test=CaseMarkers(test_case_id="198", offset=71),
# rejection_scheme_signals_state_test=CaseMarkers(test_case_id="198", offset=71),
# ),
],
)
lds_status_bik
"""
Конфигурация тестового набора Lds_status_regress_in_flow
Особенности набора:
- В течении
- Проверка режимов работы СОУ
- Проверка группы причин режимов работы СОУ, связанных с БИК
"""
from constants.enums import TU, AdminTU, LdsStatus, LdsStatusDegradation, LdsStatusInitialization, MeasureConversionRule
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import CaseData, CaseMarkers, LDSStatusConfig
# ===== Константы набора =====
SUITE_NAME = "Lds_status_regress_bik"
SUITE_DATA_ID = 18
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
DIAGNOSTIC_AREA_2_PIPE_ID = 1463
DIAGNOSTIC_AREA_3_PIPE_ID = 474
DIAGNOSTIC_AREA_5_PIPE_ID = 1474
DIAGNOSTIC_AREA_2_CONTROL_POINT = "ЗА 105-3 - ЗА 129-3"
DIAGNOSTIC_AREA_3_CONTROL_POINT = "ЗА 180-3 - ЗА 207-3"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# ===== Конфигурация набора =====
LDS_STATUS_BIK_CONFIG = LDSStatusConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST_DATA_ABSENCE_FALSE_BIK,
main_pipeline=MAIN_PIPELINE,
init_cold_start_test_data=CaseData(
expected_result=(LdsStatus.INITIALIZATION, LdsStatusInitialization.COLD_START_OF_SERVERS),
),
deg_rejection_temperature_sensor_on_du_2_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_2_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.REJECTION_TEMPERATURE_SENSOR,
),
),
deg_rejection_temperature_sensor_on_du_3_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_3_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.REJECTION_TEMPERATURE_SENSOR,
),
),
deg_rejection_temperature_sensor_on_du_5_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_5_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.REJECTION_TEMPERATURE_SENSOR,
),
),
deg_rejection_density_and_viscosity_on_du_2_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_2_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.REJECTION_DENSITY_SENSOR,
LdsStatusDegradation.REJECTION_VISCOSITY_SENSOR,
),
),
deg_rejection_density_and_viscosity_on_du_3_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_3_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.REJECTION_DENSITY_SENSOR,
LdsStatusDegradation.REJECTION_VISCOSITY_SENSOR,
),
),
deg_rejection_density_and_viscosity_on_du_5_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_5_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.REJECTION_DENSITY_SENSOR,
LdsStatusDegradation.REJECTION_VISCOSITY_SENSOR,
),
),
degradation_temperature_du_2_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_2_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.REJECTION_TEMPERATURE_SENSOR.report_text,
),
),
degradation_density_du_2_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_2_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.REJECTION_DENSITY_SENSOR.report_text,
),
),
degradation_viscosity_du_2_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_2_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.REJECTION_VISCOSITY_SENSOR.report_text,
),
),
degradation_temperature_sensor_du_3_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_3_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.REJECTION_TEMPERATURE_SENSOR.report_text,
),
),
degradation_density_du_3_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_3_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.REJECTION_DENSITY_SENSOR.report_text,
),
),
degradation_viscosity_du_3_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_3_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.REJECTION_VISCOSITY_SENSOR.report_text,
),
),
# ===== Базовые ТЕСТЫ ====
lds_status_basic_info_test=CaseMarkers(test_case_id="1", offset=5),
init_cold_start_test=CaseMarkers(test_case_id="18", offset=7),
init_cold_start_in_journal_test=CaseMarkers(test_case_id="228", offset=7),
# ===== ТЕСТЫ состония СОУ на схеме =====
deg_rejection_temperature_sensor_on_du_2_test=CaseMarkers(test_case_id="179", offset=25),
deg_rejection_density_and_viscosity_on_du_2_test=CaseMarkers(test_case_id="181", offset=35),
deg_rejection_temperature_sensor_on_du_3_test=CaseMarkers(test_case_id="179", offset=46),
deg_rejection_density_and_viscosity_on_du_3_test=CaseMarkers(test_case_id="181", offset=53),
# ===== ТЕСТЫ в журнале для ДУ2 =====
degradation_temperature_du_2_in_journal_test=CaseMarkers(test_case_id="179", offset=23),
degradation_density_du_2_in_journal_test=CaseMarkers(test_case_id="181", offset=32),
degradation_viscosity_du_2_in_journal_test=CaseMarkers(test_case_id="181", offset=32),
# ===== ТЕСТЫ в журнале для ДУ3 =====
degradation_temperature_du_3_in_journal_test=CaseMarkers(test_case_id="179", offset=46),
degradation_density_du_3_in_journal_test=CaseMarkers(test_case_id="181", offset=53),
degradation_viscosity_du_3_in_journal_test=CaseMarkers(test_case_id="181", offset=53),
)
lds_status_regress_flow
"""
Конфигурация тестового набора Lds_status_regress_in_flow
Особенности набора:
- В течении
- Проверка режимов работы СОУ
- Проверка причин режимов работы СОУ
"""
from constants.enums import (
TU,
AdminTU,
LdsStatus,
LdsStatusDegradation,
LdsStatusFaulty,
LdsStatusInitialization,
MeasureConversionRule,
StationaryStatus,
UnStationaryReason,
)
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import CaseData, CaseMarkers, LDSStatusConfig
# ===== Константы набора =====
SUITE_NAME = "Lds_status_regress_in_flow"
SUITE_DATA_ID = 17
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
DIAGNOSTIC_AREA_2_PIPE_ID = 1463
DIAGNOSTIC_AREA_3_PIPE_ID = 474
DIAGNOSTIC_AREA_5_PIPE_ID = 1478
PIG_TRAP_ID = 344
DIAGNOSTIC_AREA_2_CONTROL_POINT = "ЗА 105-3 - ЗА 129-3"
DIAGNOSTIC_AREA_3_CONTROL_POINT = "ЗА 180-3 - ЗА 207-3"
DIAGNOSTIC_AREA_5_CONTROL_POINT = "ЗА 235-3-1 - ЗА 246-3-2"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# ===== Конфигурация набора =====
LDS_STATUS_INFLOW_CONFIG = LDSStatusConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
main_pipeline=MAIN_PIPELINE,
technological_unit=TECHNOLOGICAL_UNIT,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST_DATA_ABSENCE_FALSE,
# ===== Ожидания для сообщений о состоянии СОУ. ЭФ Схема =====
init_cold_start_test_data=CaseData(
expected_result=(LdsStatus.INITIALIZATION, LdsStatusInitialization.COLD_START_OF_SERVERS),
),
serviceable_all_in_journal_test_data=CaseData(
expected_result=(LdsStatus.INITIALIZATION, LdsStatusInitialization.COLD_START_OF_SERVERS),
),
serviceable_all_test_data=CaseData(
params={"pipe_ids": [DIAGNOSTIC_AREA_2_PIPE_ID, DIAGNOSTIC_AREA_3_PIPE_ID]},
expected_result=LdsStatus.SERVICEABLE,
),
deg_additive_injectors_operation_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_3_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.ADDITIVE_INJECTORS_OPERATION,
),
),
deg_exceeding_distance_between_pressure_sensors_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_3_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.EXCEEDING_DISTANCE_BETWEEN_SERVICEABLE_PRESSURE_SENSORS,
),
),
deg_absence_min_pressure_sensors_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_5_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.ABSENCE_MIN_PRESSURE_SENSORS_REQUIRED_NUMBER,
),
),
deg_faulty_pressure_sensors_at_pump_station_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_2_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.FAULTY_PRESSURE_SENSORS_AT_PUMP_STATION_NODES,
),
),
deg_gravity_section_pumping_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_5_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.GRAVITY_SECTION_IN_PUMPING_MODE,
),
),
deg_pig_sensor_passage_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_2_PIPE_ID, "pig_trap_id": PIG_TRAP_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.PIG_SENSOR_PASSAGE,
),
),
deg_starting_pumping_out_pumps_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_2_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.STARTING_PUMPING_OUT_PUMPS,
StationaryStatus.UNSTATIONARY,
UnStationaryReason.CHANGING_WORKING_OF_PUMPING_OUT_PUMPS,
),
),
faulty_absence_min_flow_meters_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_5_PIPE_ID},
expected_result=(
LdsStatus.FAULTY,
LdsStatusFaulty.ABSENCE_MIN_FLOW_METERS_REQUIRED_NUMBER,
),
),
deg_exceeding_distance_between_flow_meters_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_3_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.EXCEEDING_DISTANCE_BETWEEN_FLOW_METERS,
),
),
# ===== Ожидания для сообщений о состоянии СОУ. ЭФ Журнал =====
between_si_pressure_more_50_km_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_3_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.EXCEEDING_DISTANCE_BETWEEN_SERVICEABLE_PRESSURE_SENSORS.report_text,
),
),
deg_gravity_section_pumping_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_5_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.GRAVITY_SECTION_IN_PUMPING_MODE.report_text,
),
),
deg_absence_min_pressure_sensors_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_5_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.ABSENCE_MIN_PRESSURE_SENSORS_REQUIRED_NUMBER.report_text,
),
),
serviceable_after_deg_absence_min_pressure_sensors_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_5_CONTROL_POINT]},
expected_result=(LdsStatus.SERVICEABLE.report_text,),
),
deg_starting_pumping_out_pumps_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_2_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.STARTING_PUMPING_OUT_PUMPS.report_text,
),
),
serviceable_after_deg_starting_pumping_out_pumps_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_2_CONTROL_POINT]},
expected_result=(LdsStatus.SERVICEABLE.report_text,),
),
faulty_absence_min_flow_meters_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_5_CONTROL_POINT]},
expected_result=(
LdsStatus.FAULTY.report_text,
LdsStatusFaulty.ABSENCE_MIN_FLOW_METERS_REQUIRED_NUMBER.report_text,
),
),
serviceable_after_faulty_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_2_CONTROL_POINT]},
expected_result=(LdsStatus.SERVICEABLE.report_text,),
),
deg_exceeding_distance_between_flow_meters_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_3_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.EXCEEDING_DISTANCE_BETWEEN_FLOW_METERS.report_text,
),
),
deg_faulty_pressure_sensors_at_pump_station_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_2_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.FAULTY_PRESSURE_SENSORS_AT_PUMP_STATION_NODES.report_text,
),
),
serviceable_after_deg_faulty_pressure_sensors_at_pump_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_2_CONTROL_POINT]},
expected_result=(LdsStatus.SERVICEABLE.report_text,),
),
deg_additive_injectors_operation_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_3_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.ADDITIVE_INJECTORS_OPERATION.report_text,
),
),
deg_pig_sensor_passage_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_2_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.PIG_SENSOR_PASSAGE.report_text,
),
),
# ===== ТЕСТЫ состояния СОУ на схеме =====
lds_status_basic_info_test=CaseMarkers(test_case_id="1", offset=5),
init_cold_start_test=CaseMarkers(test_case_id="160", offset=7),
serviceable_after_cold_start_test=CaseMarkers(test_case_id="186", offset=22),
deg_exceeding_distance_between_pressure_sensors_test=CaseMarkers(test_case_id="164", offset=32),
deg_gravity_section_pumping_test=CaseMarkers(test_case_id="167", offset=34),
deg_absence_min_pressure_sensors_test=CaseMarkers(test_case_id="166", offset=38),
serviceable_after_deg_absence_min_pressure_sensors_test=CaseMarkers(test_case_id="186", offset=43),
deg_starting_pumping_out_pumps_test=CaseMarkers(test_case_id="174", offset=46),
serviceable_after_deg_starting_pumping_out_pumps_test=CaseMarkers(test_case_id="186", offset=52.5),
faulty_absence_min_flow_meters_test=CaseMarkers(test_case_id="170", offset=60),
faulty_absence_min_flow_meters_continuous_test=CaseMarkers(test_case_id="170", offset=73),
serviceable_after_faulty_test=CaseMarkers(test_case_id="186", offset=76),
deg_exceeding_distance_between_flow_meters_test=CaseMarkers(test_case_id="169", offset=107),
# serviceable_after_deg_exceeding_distance_between_flow_meters_test=CaseMarkers(test_case_id="186", offset=114.5),
# TODO разобраться в LDS-14444
deg_faulty_pressure_sensors_at_pump_station_test=CaseMarkers(test_case_id="184", offset=122),
serviceable_after_deg_faulty_pressure_sensors_at_pump_test=CaseMarkers(test_case_id="186", offset=126),
deg_additive_injectors_operation_test=CaseMarkers(test_case_id="188", offset=132),
deg_pig_sensor_passage_test=CaseMarkers(test_case_id="165", offset=140),
# ===== ТЕСТЫ состояния СОУ на схеме =====
init_cold_start_in_journal_test=CaseMarkers(test_case_id="228", offset=7),
between_si_pressure_more_50_km_in_journal_test=CaseMarkers(test_case_id="228", offset=35),
deg_gravity_section_pumping_in_journal_test=CaseMarkers(test_case_id="167", offset=34),
deg_absence_min_pressure_sensors_in_journal_test=CaseMarkers(test_case_id="166", offset=36),
serviceable_after_deg_absence_min_pressure_sensors_in_journal_test=CaseMarkers(test_case_id="186", offset=43),
deg_starting_pumping_out_pumps_in_journal_test=CaseMarkers(test_case_id="174", offset=46),
serviceable_after_deg_starting_pumping_out_pumps_in_journal_test=CaseMarkers(test_case_id="186", offset=53),
faulty_absence_min_flow_meters_in_journal_test=CaseMarkers(test_case_id="170", offset=57),
serviceable_after_faulty_in_journal_test=CaseMarkers(test_case_id="186", offset=76),
deg_exceeding_distance_between_flow_meters_in_journal_test=CaseMarkers(test_case_id="169", offset=107), # 106
deg_faulty_pressure_sensors_at_pump_station_in_journal_test=CaseMarkers(test_case_id="184", offset=120),
deg_additive_injectors_operation_in_journal_test=CaseMarkers(test_case_id="188", offset=132),
deg_pig_sensor_passage_in_journal_test=CaseMarkers(test_case_id="165", offset=140),
)
lds_status_regress_stopping
"""
Конфигурация тестового набора Lds_status_regress_in_flow
Особенности набора:
- В режиме МТ: Режим остановленной перекачки
- Проверка режимов работы СОУ
- Проверка причин режимов работы СОУ
"""
from constants.enums import (
TU,
AdminTU,
LdsStatus,
LdsStatusDegradation,
LdsStatusFaulty,
LdsStatusInitialization,
MeasureConversionRule,
)
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import CaseData, CaseMarkers, LDSStatusConfig
# ===== Константы набора =====
SUITE_NAME = "Lds_status_regress_stopping"
SUITE_DATA_ID = 19
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
DIAGNOSTIC_AREA_2_PIPE_ID = 1463
DIAGNOSTIC_AREA_3_PIPE_ID = 474
DIAGNOSTIC_AREA_5_PIPE_ID = 1474
DIAGNOSTIC_AREA_2_CONTROL_POINT = "ЗА 105-3 - ЗА 129-3"
DIAGNOSTIC_AREA_3_CONTROL_POINT = "ЗА 180-3 - ЗА 207-3"
DIAGNOSTIC_AREA_5_CONTROL_POINT = "ЗА 235-3-1 - ЗА 246-3-2"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# ===== Конфигурация набора =====
LDS_STATUS_STOPPING_CONFIG = LDSStatusConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST_DATA_ABSENCE_FALSE,
main_pipeline=MAIN_PIPELINE,
init_accumulation_data_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_2_PIPE_ID},
expected_result=(
LdsStatus.INITIALIZATION,
LdsStatusInitialization.ACCUMULATION_DATA,
),
),
init_accumulation_data_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_2_CONTROL_POINT]},
expected_result=(
LdsStatus.INITIALIZATION.report_text,
LdsStatusInitialization.ACCUMULATION_DATA.report_text,
),
),
init_cold_start_test_data=CaseData(
expected_result=(LdsStatus.INITIALIZATION, LdsStatusInitialization.COLD_START_OF_SERVERS),
),
init_switching_shut_off_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_3_PIPE_ID},
expected_result=(
LdsStatus.INITIALIZATION,
LdsStatusInitialization.SWITCHING_SHUT_OFF_IN_STOPPED_PUMPING_MODE,
),
),
init_switching_shut_off_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_3_CONTROL_POINT]},
expected_result=(
LdsStatus.INITIALIZATION.report_text,
LdsStatusInitialization.SWITCHING_SHUT_OFF_IN_STOPPED_PUMPING_MODE.report_text,
),
),
serviceable_all_test_data=CaseData(
params={"pipe_ids": [DIAGNOSTIC_AREA_3_PIPE_ID]},
expected_result=LdsStatus.SERVICEABLE,
),
serviceable_all_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_3_CONTROL_POINT]},
expected_result=LdsStatus.SERVICEABLE.report_text,
),
deg_gravity_section_pumping_in_stopping_test_data=CaseData(
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.GRAVITY_SECTION_IN_STOPPED_PUMPING_MODE,
),
),
deg_gravity_section_pumping_in_stopping_in_journal_test_data=CaseData(
params={
"control_points": [
DIAGNOSTIC_AREA_2_CONTROL_POINT,
DIAGNOSTIC_AREA_3_CONTROL_POINT,
DIAGNOSTIC_AREA_5_CONTROL_POINT,
]
},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.GRAVITY_SECTION_IN_STOPPED_PUMPING_MODE.report_text,
),
),
deg_exceeding_distance_between_pressure_sensors_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_2_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.EXCEEDING_DISTANCE_BETWEEN_SERVICEABLE_PRESSURE_SENSORS,
),
),
deg_exceeding_distance_between_pressure_sensors_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_2_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.EXCEEDING_DISTANCE_BETWEEN_SERVICEABLE_PRESSURE_SENSORS.report_text,
),
),
deg_faulty_pressure_sensors_at_pump_station_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_2_PIPE_ID},
expected_result=(
LdsStatus.DEGRADATION,
LdsStatusDegradation.FAULTY_PRESSURE_SENSORS_AT_PUMP_STATION_NODES,
),
),
deg_faulty_pressure_sensors_at_pump_station_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_2_CONTROL_POINT]},
expected_result=(
LdsStatus.DEGRADATION.report_text,
LdsStatusDegradation.FAULTY_PRESSURE_SENSORS_AT_PUMP_STATION_NODES.report_text,
),
),
faulty_absence_min_pressure_sensors_test_data=CaseData(
params={"pipe_id": DIAGNOSTIC_AREA_5_PIPE_ID},
expected_result=(
LdsStatus.FAULTY,
LdsStatusFaulty.ABSENCE_MIN_PRESSURE_SENSORS_REQUIRED_NUMBER,
),
),
faulty_absence_min_pressure_sensors_in_journal_test_data=CaseData(
params={"control_points": [DIAGNOSTIC_AREA_5_CONTROL_POINT]},
expected_result=(
LdsStatus.FAULTY.report_text,
LdsStatusFaulty.ABSENCE_MIN_PRESSURE_SENSORS_REQUIRED_NUMBER.report_text,
),
),
# ===== ТЕСТЫ =====
lds_status_basic_info_test=CaseMarkers(test_case_id="1", offset=5),
init_cold_start_test=CaseMarkers(test_case_id="19", offset=7),
init_cold_start_in_journal_test=CaseMarkers(test_case_id="228", offset=7),
deg_gravity_section_pumping_in_stopping_test=CaseMarkers(test_case_id="167", offset=22),
deg_gravity_section_pumping_in_stopping_in_journal_test=CaseMarkers(test_case_id="239", offset=22),
init_switching_shut_off_test=CaseMarkers(test_case_id="204", offset=32),
init_switching_shut_off_in_journal_test=CaseMarkers(test_case_id="239", offset=32),
serviceable_after_switching_shut_off_test=CaseMarkers(test_case_id="162", offset=35),
serviceable_after_switching_shut_off_in_journal_test=CaseMarkers(test_case_id="239", offset=35),
deg_faulty_pressure_sensors_at_pump_station_test=CaseMarkers(test_case_id="184", offset=37.5),
deg_faulty_pressure_sensors_at_pump_station_in_journal_test=CaseMarkers(test_case_id="239", offset=37.5),
serviceable_after_deg_faulty_pressure_sensors_at_pump_test=CaseMarkers(test_case_id="162", offset=42),
serviceable_after_deg_faulty_pressure_sensors_at_pump_in_journal_test=CaseMarkers(test_case_id="239", offset=42),
deg_exceeding_distance_between_pressure_sensors_test=CaseMarkers(test_case_id="164", offset=49),
deg_exceeding_distance_between_pressure_sensors_in_journal_test=CaseMarkers(test_case_id="239", offset=49),
init_accumulation_data_test=CaseMarkers(test_case_id="203", offset=70),
init_accumulation_data_in_journal_test=CaseMarkers(test_case_id="239", offset=70),
faulty_absence_min_pressure_sensors_test=CaseMarkers(test_case_id="170", offset=85),
faulty_absence_min_pressure_sensors_in_journal_test=CaseMarkers(test_case_id="239", offset=85),
)
real_70
"""
Конфигурация тестового набора Real_70_tn3_216km_56 (режим остановленной перекачки)
Особенности набора:
- Режим МТ стационар
- Режим МТ Остановленная перекачка (StationaryStatus.STOPPED) на участке, где ожидаем утечку
- Одна утечка на координате 216 км
- Объём утечки 56,8 м³
- Интенсивность утечки 1,8%
- Запускать с dataAbsence false в конфигурации
"""
from constants.enums import (
TU,
AdminTU,
ConfirmationStatus,
LdsStatus,
MeasureConversionRule,
ReservedType,
StationaryStatus,
)
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import CaseData, CaseMarkers, LeakTestConfig, SmokeSuiteConfig
# ===== Константы набора =====
SUITE_NAME = "Real_70_tn3_216km_56"
SUITE_DATA_ID = 13
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# Параметры утечки
LEAK_COORDINATE_METERS = 216000
LEAK_VOLUME_M3 = 56
ALLOWED_TIME_DIFF_SECONDS = 1440 # 24 минуты
LEAK_START_INTERVAL_SECONDS = 2100 # 35 минут
FLOW_RATE_SETTINGS_THRESHOLD = 7
# ID диагностических участков
LEAK_DIAGNOSTIC_AREA_ID = 3
LEAK_DIAGNOSTIC_AREA_NAME = "Т-Н-3.УЗР НПС-3 «Нововеличковская». - Т-Н-3.НПС-2 «Крымская».УЗР СИКН Т-К"
# ID линейного участка
LINEAR_PART_ID = 408
# ===== Конфигурация набора =====
REAL_70_CONFIG = SmokeSuiteConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
technological_unit=TECHNOLOGICAL_UNIT,
main_pipeline=MAIN_PIPELINE,
measure_conversion_rules=MeasureConversionRule.MPA_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST_DATA_ABSENCE_FALSE,
# ----- Ожидаемый статус стационара -----
expected_stationary_status=StationaryStatus.STATIONARY,
expected_report_stationary_status=StationaryStatus.STATIONARY.value,
# ----- Ожидаемые статусы для проверки режимов на ЭФ Диагностика сигналов -----
controlled_sites_with_segment=CaseData(
expected_result={
"exp_tixoreczkaya_novovelichkovskaya": (StationaryStatus.STATIONARY, LdsStatus.SERVICEABLE),
"exp_novovelichkovskaya_krymskaya": (StationaryStatus.STATIONARY, LdsStatus.SERVICEABLE),
"exp_krymskaya_grushovaya": (StationaryStatus.STOPPED, LdsStatus.DEGRADATION),
"exp_backup_route_bejsug": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_backup_route_ponura": (StationaryStatus.STATIONARY, LdsStatus.SERVICEABLE),
"exp_backup_route_kuban": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_afipskij": (StationaryStatus.STOPPED, LdsStatus.FAULTY),
"exp_npz_ilinskij": (StationaryStatus.STATIONARY, LdsStatus.DEGRADATION),
}
),
# ===== БАЗОВЫЕ ТЕСТЫ ==
basic_info_test=CaseMarkers(test_case_id="1", offset=5),
journal_info_test=CaseMarkers(test_case_id="2", offset=5),
lds_status_initialization_test=CaseMarkers(test_case_id="86", offset=5),
lds_status_init_in_journal_test=CaseMarkers(test_case_id="228", offset=5),
main_page_info_test=CaseMarkers(test_case_id="3", offset=6),
mask_signal_test=CaseMarkers(test_case_id="32", offset=8),
mask_info_in_journal_test=CaseMarkers(test_case_id="213", offset=9),
# diagnostics_of_signals_after_initialization_test=CaseMarkers(test_case_id="210", offset=25), TODO решить LDS-14255
lds_status_initialization_out_test=CaseMarkers(test_case_id="30", offset=30),
lds_status_init_out_in_journal_test=CaseMarkers(test_case_id="214", offset=31),
export_lds_status_report_test=CaseMarkers(test_case_id="235", offset=63),
export_mt_mode_report_test=CaseMarkers(test_case_id="240", offset=64),
# ===== КОНФИГУРАЦИЯ УТЕЧКИ =====
leak=LeakTestConfig(
# ----- Параметры утечки -----
coordinate_meters=LEAK_COORDINATE_METERS,
volume_m3=LEAK_VOLUME_M3,
linear_part_id=LINEAR_PART_ID,
flow_rate_settings_threshold=FLOW_RATE_SETTINGS_THRESHOLD,
diagnostic_area_name=LEAK_DIAGNOSTIC_AREA_NAME,
# ----- Временные интервалы -----
leak_start_interval_seconds=LEAK_START_INTERVAL_SECONDS,
allowed_time_diff_seconds=ALLOWED_TIME_DIFF_SECONDS,
# ----- Ожидаемые статусы -----
expected_algorithm_type=ReservedType.STOP,
expected_leak_status=ConfirmationStatus.CONFIRMED,
expected_lds_status=LdsStatus.DEGRADATION,
expected_stationary_status=StationaryStatus.STOPPED,
expected_lds_status_in_leaks_report=LdsStatus.DEGRADATION.value,
expected_report_stationary_status=StationaryStatus.STOPPED.value,
# ----- Тест BalanceAlgorithmResultsContent -----
balance_algorithm_leak_waiting_test=CaseMarkers(test_case_id="175", offset=42), # Длительность теста 5 минут
balance_algorithm_leak_detected_test=CaseMarkers(test_case_id="177", offset=59),
# ----- Тест MessageInfo -----
possible_leak_in_journal_test=CaseMarkers(test_case_id="211", offset=47),
# ----- Тест AllLeaksInfo -----
all_leaks_info_test=CaseMarkers(test_case_id="13", offset=59),
# ----- Тест LeaksContent -----
leaks_content_test=CaseMarkers(test_case_id="91", offset=59),
# ----- Тест TuLeaksInfo -----
tu_leaks_info_test=CaseMarkers(test_case_id="84", offset=59),
# ----- Тест MessageInfo -----
leak_info_in_journal=CaseMarkers(test_case_id="154", offset=59),
# ----- Тест MainPageInfoContent -----
leak_is_confirm_on_main_page_test=CaseMarkers(test_case_id="182", offset=60),
# ----- Тест AcknowledgeLeak -----
acknowledge_leak_test=CaseMarkers(test_case_id="6", offset=60),
acknowledge_leak_in_journal_test=CaseMarkers(test_case_id="212", offset=60.5),
# ----- Тест OutputSignals -----
output_signals_test=CaseMarkers(test_case_id="158", offset=61),
# ----- Тест ExportReports -----
export_leaks_report_test=CaseMarkers(test_case_id="234", offset=62),
),
)
stationary_status_regress_stationary.py
"""
Конфигурация тестового набора Stationary_status_regress_stationary
Особенности набора:
- Режим МТ Стационар
- Проверка режимов работы МТ
- Проверка причин режимов работы МТ
"""
from constants.enums import TU, AdminTU, MeasureConversionRule, StationaryReason, StationaryStatus, UnStationaryReason
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import CaseData, CaseMarkers, StationaryStatusConfig
# ===== Константы набора =====
SUITE_NAME = "Stationary_status_regress_stationary"
SUITE_DATA_ID = 32
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
DIAGNOSTIC_AREA_2_PIPE_ID = 1463
DIAGNOSTIC_AREA_3_PIPE_ID = 474
DIAGNOSTIC_AREA_5_PIPE_ID = 1478
CONTROL_POINTS = [
"ЗА 105-3 - ЗА 129-3",
"ЗА 180-3 - ЗА 207-3",
]
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# ===== Конфигурация набора =====
STATIONARY_STATUS_REGRESS_STATIONARY_CONFIG = StationaryStatusConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
main_pipeline=MAIN_PIPELINE,
technological_unit=TECHNOLOGICAL_UNIT,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST_DATA_ABSENCE_FALSE,
status_unstationary_cold_start_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(StationaryStatus.UNSTATIONARY, UnStationaryReason.COLD_START),
),
status_stationary_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(StationaryStatus.STATIONARY, StationaryReason.PRESSURE_AND_FLOW_MOVING_AVERAGES_MEET_CRITERIA),
),
journal_unstationary_cold_start_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(
StationaryStatus.UNSTATIONARY.report_text,
UnStationaryReason.COLD_START.report_text,
),
),
journal_stationary_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(
StationaryStatus.STATIONARY.report_text,
StationaryReason.PRESSURE_AND_FLOW_MOVING_AVERAGES_MEET_CRITERIA.report_text,
),
),
# ===== ТЕСТЫ =====
stationary_status_basic_info_test=CaseMarkers(test_case_id="44", offset=2),
common_scheme_cold_start_test=CaseMarkers(test_case_id="42", offset=2),
journal_cold_start_test=CaseMarkers(test_case_id="43", offset=2),
main_page_info_cold_start_test=CaseMarkers(test_case_id="39", offset=2),
output_signals_cold_start_test=CaseMarkers(test_case_id="41", offset=2),
common_scheme_stationary_after_cold_test=CaseMarkers(test_case_id="32", offset=7),
journal_stationary_after_cold_test=CaseMarkers(test_case_id="43", offset=7),
main_page_info_stationary_after_cold_test=CaseMarkers(test_case_id="38", offset=7),
output_signals_stationary_after_cold_test=CaseMarkers(test_case_id="41", offset=7),
)
status_regress_unstationary_block_valves_status.py
"""
Конфигурация тестового набора Status_regress_unstationary_block_valves_status
Особенности набора:
- Режим МТ Нестационар
- Причина МТ: Полное или частичное открытие/закрытие задвижки
- Проверка режимов работы МТ
- Проверка причин режимов работы МТ
- Старт данных 19.03.2026 13:14:00.000
- Частичное открытие задвижек AK.CHTN.NPS_TIH_5.SW_0-3-3.Status ~ 13:24
- Начало нестационара примерно в 13:24, окончание примерно 13:31
- Частичное закрытие задвижек AK.CHTN.NPS_TIH_5.SW_0-1-3.Status ~ 13:34
- Начало нестационара примерно в 13:34, окончание примерно 13:41
"""
from constants.enums import TU, AdminTU, MeasureConversionRule, StationaryReason, StationaryStatus, UnStationaryReason
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import CaseData, CaseMarkers, StationaryStatusConfig
# ===== Константы набора =====
SUITE_NAME = "Status_regress_unstationary_block_valves_status"
SUITE_DATA_ID = 35
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
DIAGNOSTIC_AREA_2_PIPE_ID = 1463
DIAGNOSTIC_AREA_3_PIPE_ID = 474
DIAGNOSTIC_AREA_5_PIPE_ID = 1478
CONTROL_POINTS = [
"ЗА 105-3 - ЗА 129-3",
"ЗА 180-3 - ЗА 207-3",
]
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# ===== Конфигурация набора =====
STATUS_REGRESS_UNSTATIONARY_BLOCK_VALVES_STATUS_CONFIG = StationaryStatusConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
main_pipeline=MAIN_PIPELINE,
technological_unit=TECHNOLOGICAL_UNIT,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST,
status_unstationary_cold_start_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(StationaryStatus.UNSTATIONARY, UnStationaryReason.COLD_START),
),
status_unstationary_switch_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(StationaryStatus.UNSTATIONARY, UnStationaryReason.CHANGING_BLOCK_VALVES_STATUS),
),
status_stationary_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(StationaryStatus.STATIONARY, StationaryReason.PRESSURE_AND_FLOW_MOVING_AVERAGES_MEET_CRITERIA),
),
journal_unstationary_cold_start_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(
StationaryStatus.UNSTATIONARY.report_text,
UnStationaryReason.COLD_START.report_text,
),
),
journal_unstationary_switch_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(
StationaryStatus.UNSTATIONARY.report_text,
UnStationaryReason.CHANGING_BLOCK_VALVES_STATUS.report_text,
),
),
journal_stationary_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(
StationaryStatus.STATIONARY.report_text,
StationaryReason.PRESSURE_AND_FLOW_MOVING_AVERAGES_MEET_CRITERIA.report_text,
),
),
# ===== ТЕСТЫ =====
stationary_status_basic_info_test=CaseMarkers(test_case_id="44", offset=2),
common_scheme_cold_start_test=CaseMarkers(test_case_id="42", offset=2),
journal_cold_start_test=CaseMarkers(test_case_id="43", offset=2),
main_page_info_cold_start_test=CaseMarkers(test_case_id="39", offset=2),
output_signals_cold_start_test=CaseMarkers(test_case_id="41", offset=2),
common_scheme_stationary_after_cold_test=CaseMarkers(test_case_id="42", offset=7),
journal_stationary_after_cold_test=CaseMarkers(test_case_id="43", offset=7),
main_page_info_stationary_after_cold_test=CaseMarkers(test_case_id="39", offset=7),
output_signals_stationary_after_cold_test=CaseMarkers(test_case_id="41", offset=7),
common_scheme_switch_on_test=CaseMarkers(test_case_id="35", offset=14),
journal_switch_on_test=CaseMarkers(test_case_id="43", offset=14),
main_page_info_switch_on_test=CaseMarkers(test_case_id="39", offset=14),
output_signals_switch_on_test=CaseMarkers(test_case_id="41", offset=14),
common_scheme_stationary_after_switch_on_test=CaseMarkers(test_case_id="42", offset=29),
journal_stationary_after_switch_on_test=CaseMarkers(test_case_id="43", offset=29),
main_page_info_stationary_after_switch_on_test=CaseMarkers(test_case_id="39", offset=29),
output_signals_stationary_after_switch_on_test=CaseMarkers(test_case_id="41", offset=29),
common_scheme_switch_off_test=CaseMarkers(test_case_id="35", offset=24),
journal_switch_off_test=CaseMarkers(test_case_id="43", offset=24),
main_page_info_switch_off_test=CaseMarkers(test_case_id="39", offset=24),
output_signals_switch_off_test=CaseMarkers(test_case_id="41", offset=24),
common_scheme_stationary_after_switch_off_test=CaseMarkers(test_case_id="42", offset=36),
journal_stationary_after_switch_off_test=CaseMarkers(test_case_id="43", offset=36),
main_page_info_stationary_after_switch_off_test=CaseMarkers(test_case_id="39", offset=36),
output_signals_stationary_after_switch_off_test=CaseMarkers(test_case_id="41", offset=36),
)
status_regress_unstationary_equipment_status.py
"""
Конфигурация тестового набора Status_regress_unstationary_equipment_status
Особенности набора:
- Режим МТ Нестационар
- Причина МТ: Пуск/остановка трубопровода; включение/отключение магистрального насоса; включение/отключение НПС
- Проверка режимов работы МТ
- Проверка причин режимов работы МТ
- Старт данных 19.03.2026 13:14:00.000
- Включение насоса AK.CHTN.NPS_VEL_3.MNA_4.ON ~ 13:24
- Начало нестационара примерно в 13:24, окончание примерно 13:31
- Выключение насоса AK.CHTN.NPS_VEL_3.MNA_4.ON ~ 13:34
- Начало нестационара примерно в 13:34, окончание примерно 13:41
"""
from constants.enums import TU, AdminTU, MeasureConversionRule, StationaryReason, StationaryStatus, UnStationaryReason
from constants.test_constants import BaseTN3Constants as TestConst
from test_config.models_for_tests import CaseData, CaseMarkers, StationaryStatusConfig
# ===== Константы набора =====
SUITE_NAME = "Status_regress_unstationary_equipment_status"
SUITE_DATA_ID = 34
ARCHIVE_NAME = f"{SUITE_NAME}.tar.gz"
DIAGNOSTIC_AREA_2_PIPE_ID = 1463
DIAGNOSTIC_AREA_3_PIPE_ID = 474
DIAGNOSTIC_AREA_5_PIPE_ID = 1478
CONTROL_POINTS = [
"ЗА 105-3 - ЗА 129-3",
"ЗА 180-3 - ЗА 207-3",
]
# Технологический участок
TECHNOLOGICAL_UNIT = TU.TIKHORETSK_NOVOROSSIYSK_3
# Название МН
MAIN_PIPELINE = "МН Тихорецк-Новороссийск-3"
# ===== Конфигурация набора =====
STATUS_REGRESS_UNSTATIONARY_EQUIPMENT_STATUS_CONFIG = StationaryStatusConfig(
# ----- Метаданные -----
ost_name=TestConst.CHTN_OST_NAME,
suite_name=SUITE_NAME,
suite_data_id=SUITE_DATA_ID,
archive_name=ARCHIVE_NAME,
main_pipeline=MAIN_PIPELINE,
technological_unit=TECHNOLOGICAL_UNIT,
measure_conversion_rules=MeasureConversionRule.KG_CM_MEASURE,
# ===== LDS Configurator =====
use_lds_configurator=True,
admin_tu=AdminTU.TIKHORETSK_NOVOROSSIYSK_3_AUTOTEST_DATA_ABSENCE_FALSE,
status_unstationary_cold_start_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(StationaryStatus.UNSTATIONARY, UnStationaryReason.COLD_START),
),
status_unstationary_switch_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(StationaryStatus.UNSTATIONARY, UnStationaryReason.CHANGING_EQUIPMENT_STATUS),
),
status_stationary_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(StationaryStatus.STATIONARY, StationaryReason.PRESSURE_AND_FLOW_MOVING_AVERAGES_MEET_CRITERIA),
),
journal_unstationary_cold_start_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(
StationaryStatus.UNSTATIONARY.report_text,
UnStationaryReason.COLD_START.report_text,
),
),
journal_unstationary_switch_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(
StationaryStatus.UNSTATIONARY.report_text,
UnStationaryReason.CHANGING_EQUIPMENT_STATUS.report_text,
),
),
journal_stationary_test_data=CaseData(
params={TestConst.CONTROL_POINTS_KEY: CONTROL_POINTS},
expected_result=(
StationaryStatus.STATIONARY.report_text,
StationaryReason.PRESSURE_AND_FLOW_MOVING_AVERAGES_MEET_CRITERIA.report_text,
),
),
# ===== ТЕСТЫ =====
stationary_status_basic_info_test=CaseMarkers(test_case_id="44", offset=2),
common_scheme_cold_start_test=CaseMarkers(test_case_id="42", offset=2),
journal_cold_start_test=CaseMarkers(test_case_id="43", offset=2),
main_page_info_cold_start_test=CaseMarkers(test_case_id="39", offset=2),
output_signals_cold_start_test=CaseMarkers(test_case_id="41", offset=2),
common_scheme_stationary_after_cold_test=CaseMarkers(test_case_id="42", offset=7),
journal_stationary_after_cold_test=CaseMarkers(test_case_id="43", offset=7),
main_page_info_stationary_after_cold_test=CaseMarkers(test_case_id="39", offset=7),
output_signals_stationary_after_cold_test=CaseMarkers(test_case_id="41", offset=7),
common_scheme_switch_on_test=CaseMarkers(test_case_id="34", offset=14),
journal_switch_on_test=CaseMarkers(test_case_id="43", offset=14),
main_page_info_switch_on_test=CaseMarkers(test_case_id="39", offset=14),
output_signals_switch_on_test=CaseMarkers(test_case_id="41", offset=14),
common_scheme_stationary_after_switch_on_test=CaseMarkers(test_case_id="42", offset=29),
journal_stationary_after_switch_on_test=CaseMarkers(test_case_id="43", offset=29),
main_page_info_stationary_after_switch_on_test=CaseMarkers(test_case_id="39", offset=29),
output_signals_stationary_after_switch_on_test=CaseMarkers(test_case_id="41", offset=29),
)
models for
"""
Датаклассы для конфигурации тестовых наборов.
Архитектура:
- TestSuiteConfig - главный конфиг набора, содержит всё для запуска тестов
- LeakTestConfig - конфиг утечки с параметрами и тест-кейсами
- TestCaseMarkers - маркеры для allure и pytest
Принцип: один файл конфига select_xx.py в папке datasets = один набор данных.
"""
from dataclasses import asdict, dataclass, field
from datetime import datetime
from pathlib import Path
from typing import Any, Dict, Optional
from constants.enums import (
TU,
AdminTU,
ConfirmationStatus,
LdsStatus,
MeasureConversionRule,
RejectionCriteria,
RejectionSensorTag,
ReservedType,
StationaryStatus,
)
from constants.test_constants import BaseTN3Constants
from models.export_reports_model import ReportDataExportedNotification
from models.get_exported_files_list_model import ExportedDataItem
from models.subscribe_main_page_signals_info_model import SignalsInfo
from models.upload_exported_file_model import DownloadExportedDataReply
from utils.helpers.report_xlsx_utils import LeakReportRow, ReportTitleInfo
@dataclass
class CaseMarkers:
"""
Маркеры тест-кейса для pytest и allure.
"""
test_case_id: str
offset: float
class SuiteTuIdentityMixin:
"""
Идентификация ТУ для WS-тестов и legacy-стенда.
Поля technological_unit, use_lds_configurator, admin_tu, resolved_tu_id
объявляются в BaseSuiteConfig.
"""
technological_unit: TU
use_lds_configurator: bool
admin_tu: Optional[AdminTU]
resolved_tu_id: Optional[int]
@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
@property
def tu_name(self) -> str:
"""Имя ТУ для WS-тестов и отчётов: admin при configurator, иначе legacy."""
if self.use_lds_configurator:
if self.admin_tu is None:
return ""
return self.admin_tu.admin_name
return self.technological_unit.description
@property
def tu_id(self) -> int:
"""ID ТУ для WS-тестов: resolved из Администрирования при configurator, иначе legacy."""
if self.use_lds_configurator:
if self.resolved_tu_id is None:
raise RuntimeError(
"resolved_tu_id не установлен - выполнить lds_configurator_admin_setup "
"перед операциями Администрирования"
)
return self.resolved_tu_id
return self.technological_unit.id
@property
def configurator_tu_id(self) -> int:
"""tuId из Администрирования после configurator setup (LaunchLds/StopLds)."""
if self.resolved_tu_id is None:
raise RuntimeError(
"resolved_tu_id не установлен - выполнить lds_configurator_admin_setup "
"перед операциями Администрирования"
)
return self.resolved_tu_id
@property
def infra_tu_id(self) -> int:
"""Алиас legacy_tu_id (обратная совместимость)."""
return self.technological_unit.id
@dataclass
class BaseSuiteConfig(SuiteTuIdentityMixin):
"""
Структура:
1. Метаданные набора (имя, id, архив)
2. Технологический участок (из enum TU)
"""
# ===== Метаданные набора =====
ost_name: str
suite_name: str
suite_data_id: int
archive_name: str = "" # Автоматически вычисляется из suite_name
# ===== Технологический участок =====
technological_unit: TU = TU.TIKHORETSK_NOVOROSSIYSK_3
# ===== LDS Configurator (Администрирование) =====
use_lds_configurator: bool = False
admin_tu: Optional[AdminTU] = None
resolved_tu_id: Optional[int] = None
# ===== Название Магистрального Нефтепровода =====
main_pipeline: Optional[str] = None
# ===== Правила конвертации единиц измерения давления на стенде =====
measure_conversion_rules: Optional[MeasureConversionRule] = None
# ===== Общие константы (можно переопределить) =====
allowed_distance_diff_meters: int = BaseTN3Constants.ALLOWED_DISTANCE_DIFF_METERS
precision: int = BaseTN3Constants.PRECISION
basic_message_timeout: float = BaseTN3Constants.BASIC_MESSAGE_TIMEOUT
mask_message_timeout: float = BaseTN3Constants.MASK_MESSAGE_TIMEOUT
mask_du_name: Optional[str] = None
main_pipe_line: Optional[str] = None
mask_du_event: Optional[str] = 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 has_multiple_leaks(self) -> bool:
return False
@dataclass
class CaseData:
"""
Данные тест-кейса.
"""
name: str = ""
params: Optional[Dict[str, Any]] = None
expected_result: Optional[Any] = None
description: str = ""
@dataclass
class DiagnosticAreaStatusConfig:
"""
Конфигурация ожидаемых статусов СОУ для диагностического участка.
Используется в тесте lds_status_during_leak.
"""
leak_diagnostic_area_name: str
leak_du_expected_lds_status: Any
neighbors_du_expected_lds_status: Any
leak_diagnostic_area_id: Optional[int] = None
@dataclass
class LeakTestConfig:
"""
Полная конфигурация утечки со всеми параметрами и тест-кейсами.
Все данные для тестов утечки:
- Параметры утечки (координата, объём)
- Временные интервалы
- Ожидаемые значения
- Маркеры тестов (AllLeaksInfo, TuLeaksInfo, и т.д.)
"""
# ===== Идентификаторы =====
control_site_id: Optional[int] = None
diagnostic_area_id: Optional[int] = None
diagnostic_area_name: Optional[str] = None
linear_part_id: Optional[int] = None
technological_object: Optional[str] = None
message_event_leak_completion: Optional[str] = None
# ===== Параметры утечки =====
coordinate_meters: float = None
volume_m3: float = None
max_pumping_m3: int = 2500 # Производительность(максимальная перекачка)
flow_rate_settings_threshold: Optional[float] = None # Порог объема дебаланса для текущего ДУ в текущем режиме
# ===== Временные интервалы (секунды) =====
leak_start_interval_seconds: int = BaseTN3Constants.LEAK_START_INTERVAL
allowed_time_diff_seconds: int = 0 # Допустимое время обнаружения
output_test_delay_seconds: int = BaseTN3Constants.OUTPUT_TEST_DELAY
# ===== Ожидаемые статусы =====
expected_lds_status: Any = LdsStatus.SERVICEABLE
# Режим СОУ в xlsx export_leaks_report (колонка 'Режим работы СОУ')
expected_lds_status_in_leaks_report: Optional[int] = None
expected_report_stationary_status: int = StationaryStatus.STATIONARY.value
expected_stationary_status: Any = StationaryStatus.STATIONARY
expected_algorithm_type: Any = ReservedType.STATIONARY_FLOW
expected_leak_status: Any = ConfirmationStatus.CONFIRMED
expected_complete_leak_status: Any = ConfirmationStatus.CONFIRMED_AND_LEAK_CLOSED
# ===== Конфигурация статусов СОУ во время утечки =====
lds_status_during_leak_config: Optional[DiagnosticAreaStatusConfig] = None
# ===== Данные тест-кейсов =====
lds_status_after_confirming_leak_data: Optional[CaseData] = None
lds_status_after_completed_leak_data: Optional[CaseData] = None
# ===== Тест-кейсы для этой утечки =====
balance_algorithm_leak_waiting_test: Optional[CaseMarkers] = None
balance_algorithm_leak_detected_test: Optional[CaseMarkers] = None
leaks_content_test: Optional[CaseMarkers] = None
all_leaks_info_test: Optional[CaseMarkers] = None
all_leaks_is_empty_test: Optional[CaseMarkers] = None
tu_leaks_info_test: Optional[CaseMarkers] = None
leak_info_in_journal: Optional[CaseMarkers] = None
possible_leak_in_journal_test: Optional[CaseMarkers] = None
acknowledge_leak_test: Optional[CaseMarkers] = None
acknowledge_leak_in_journal_test: Optional[CaseMarkers] = None
output_signals_test: Optional[CaseMarkers] = None
lds_status_during_leak_test: Optional[CaseMarkers] = None
lds_status_after_confirming_leak_test: Optional[CaseMarkers] = None
lds_status_completed_leak_test: Optional[CaseMarkers] = None
the_leak_is_complete_on_kg_test: Optional[CaseMarkers] = None
leak_is_complete_in_output_signals_test: Optional[CaseMarkers] = None
leak_is_complete_on_main_page_test: Optional[CaseMarkers] = None
leak_is_confirm_on_main_page_test: Optional[CaseMarkers] = None
complete_tu_leaks_info_content_test: Optional[CaseMarkers] = None
completed_leak_info_in_journal_test: Optional[CaseMarkers] = None
balance_algorithm_leak_completed_test: Optional[CaseMarkers] = None
export_leaks_report_test: Optional[CaseMarkers] = None
@property
def leak_diagnostic_area_id(self) -> Optional[int]:
"""ID диагностического участка с утечкой из lds_status_during_leak_config"""
if self.lds_status_during_leak_config is not None:
return self.lds_status_during_leak_config.leak_diagnostic_area_id
return None
@property
def allowed_volume_m3(self) -> float:
"""Допустимая погрешность объёма"""
return self.volume_m3 * BaseTN3Constants.ALLOWED_VOLUME_DIFF
@property
def leak_rate_percentages(self) -> float:
"""Интенсивность утечки в процентах"""
return round((self.volume_m3 / self.max_pumping_m3) * 100, 2)
@property
def allowed_time_diff_minutes(self) -> float:
"""Допустимое время обнаружения утечки в минутах"""
return round(self.allowed_time_diff_seconds / 60, 2)
@property
def output_allowed_time_diff_seconds(self) -> int:
"""Допустимое время для теста выходных сигналов"""
return self.allowed_time_diff_seconds + self.output_test_delay_seconds
@dataclass
class SmokeSuiteConfig(BaseSuiteConfig):
"""
Полная конфигурация тестового набора.
Один конфиг = один набор данных = один файл в test_config/datasets/
Структура:
1. Базовые тесты с маркерами
2. Конфигурации утечек (LeakTestConfig)
"""
# ===== Ожидаемый статусы для main_page_info =====
expected_stationary_status: Any = StationaryStatus.STATIONARY
expected_main_page_signals: dict = field(default_factory=lambda: asdict(SignalsInfo()))
# ===== Ожидаемые переменные при маскировании ДУ =====
mask_reason: Optional[str] = None
unmask_reason: Optional[str] = None
mask_one_du: Optional[int] = None
not_mask_du: Optional[int] = None
linear_part_identifier_for_mask: Optional[int] = None
technological_section: Optional[str] = None
imitate_flowmeter_signal_test_data: Optional[CaseData] = None
imitate_pressure_sensor_signal_test_data: Optional[CaseData] = None
exp_mode_mt_message: Optional[CaseData] = None
# Режим МТ в xlsx export_leaks_report
expected_report_stationary_status: int = StationaryStatus.STATIONARY.value
# ===== Данные участков КП-КП =====
controlled_sites_with_segment: Optional[CaseData] = None
# дефолтные значения для датчиков маскирования
mask_signal_test_data: Optional[CaseData] = CaseData(
params={
"pressure_sensor_address": BaseTN3Constants.PRESSURE_SENSOR_ADDRESS,
"flowmeter_address": BaseTN3Constants.FLOWMETER_ADDRESS,
}
)
# ===== Базовые тесты =====
basic_info_test: Optional[CaseMarkers] = None
imitate_flowmeter_signal_test: Optional[CaseMarkers] = None
imitate_pressure_sensor_signal_test: Optional[CaseMarkers] = None
journal_info_test: Optional[CaseMarkers] = None
lds_status_initialization_test: Optional[CaseMarkers] = None
lds_status_init_in_journal_test: Optional[CaseMarkers] = None
main_page_info_test: Optional[CaseMarkers] = None
main_page_info_signals_test: Optional[CaseMarkers] = None
mask_signal_test: Optional[CaseMarkers] = None
mask_info_in_journal_test: Optional[CaseMarkers] = None
lds_status_initialization_out_test: Optional[CaseMarkers] = None
lds_status_init_out_in_journal_test: Optional[CaseMarkers] = None
mask_du_on_mini_scheme_test: Optional[CaseMarkers] = None
unmask_du_on_mini_scheme_test: Optional[CaseMarkers] = None
diagnostics_of_signals_after_initialization_test: Optional[CaseMarkers] = None
mode_mt_in_journal_test: Optional[CaseMarkers] = None
export_lds_status_report_test: Optional[CaseMarkers] = None
export_mt_mode_report_test: Optional[CaseMarkers] = None
# ===== Конфигурации утечек =====
# Для наборов с одной утечкой
leak: Optional[LeakTestConfig] = None
# Для наборов с несколькими утечками (select_19_20)
leaks: list[LeakTestConfig] = field(default_factory=list)
# Участки в xlsx-отчёте о режиме работы СОУ (export_lds_status_report)
lds_status_report_section_names: list[str] = field(default_factory=list)
# ===== Дополнительные тесты для двух утечек =====
main_page_info_unstationary_test: Optional[CaseMarkers] = None
def get_leak(self, index: int = 0) -> Optional[LeakTestConfig]:
"""Получить конфигурацию утечки по индексу"""
if self.leak and index == 0:
return self.leak
if self.leaks and index < len(self.leaks):
return self.leaks[index]
return None
@property
def has_multiple_leaks(self) -> bool:
"""Проверить, есть ли несколько утечек"""
return len(self.leaks) > 1
@property
def allowed_volume_diff(self) -> float:
"""Относительная погрешность по объёму"""
return BaseTN3Constants.ALLOWED_VOLUME_DIFF
@dataclass
class LDSStatusConfig(BaseSuiteConfig):
"""
Полная конфигурация тестового набора.
Один конфиг = один набор данных = один файл в test_config/datasets/
Структура:
1. Данные для тестов(параметры и ожидаемый результат)
2. Тесты с маркерами
"""
# ===== Данные для тестов на схеме=====
init_accumulation_data_test_data: Optional[CaseData] = None
init_accumulation_data_in_journal_test_data: Optional[CaseData] = None
init_cold_start_test_data: Optional[CaseData] = None
init_exiting_faulty_test_data: Optional[CaseData] = None
init_switching_shut_off_test_data: Optional[CaseData] = None
init_switching_shut_off_in_journal_test_data: Optional[CaseData] = None
serviceable_all_test_data: Optional[CaseData] = None
serviceable_all_in_journal_test_data: Optional[CaseData] = None
serviceable_after_switching_shut_off_test_data: Optional[CaseData] = None
serviceable_after_switching_shut_off_in_journal_test_data: Optional[CaseData] = None
serviceable_after_deg_faulty_pressure_sensors_at_pump_test_data: Optional[CaseData] = None
serviceable_after_deg_faulty_pressure_sensors_at_pump_in_journal_test_data: Optional[CaseData] = None
deg_faulty_pressure_sensors_at_pump_station_test_data: Optional[CaseData] = None
deg_faulty_pressure_sensors_at_pump_station_in_journal_test_data: Optional[CaseData] = None
deg_additive_injectors_operation_test_data: Optional[CaseData] = None
deg_absence_min_pressure_sensors_test_data: Optional[CaseData] = None
deg_exceeding_distance_between_pressure_sensors_test_data: Optional[CaseData] = None
deg_exceeding_distance_between_pressure_sensors_in_journal_test_data: Optional[CaseData] = None
deg_gravity_section_pumping_test_data: Optional[CaseData] = None
deg_gravity_section_pumping_in_stopping_test_data: Optional[CaseData] = None
deg_gravity_section_pumping_in_stopping_in_journal_test_data: Optional[CaseData] = None
deg_pig_sensor_passage_test_data: Optional[CaseData] = None
deg_starting_pumping_out_pumps_test_data: Optional[CaseData] = None
deg_exceeding_distance_between_flow_meters_test_data: Optional[CaseData] = None
deg_rejection_temperature_sensor_on_du_2_test_data: Optional[CaseData] = None
deg_rejection_temperature_sensor_on_du_3_test_data: Optional[CaseData] = None
deg_rejection_temperature_sensor_on_du_5_test_data: Optional[CaseData] = None
deg_rejection_density_and_viscosity_on_du_2_test_data: Optional[CaseData] = None
deg_rejection_density_and_viscosity_on_du_3_test_data: Optional[CaseData] = None
deg_rejection_density_and_viscosity_on_du_5_test_data: Optional[CaseData] = None
faulty_absence_min_flow_meters_test_data: Optional[CaseData] = None
faulty_absence_min_pressure_sensors_test_data: Optional[CaseData] = None
# ===== Данные для тестов в журнале бики ДУ2=====
degradation_temperature_du_2_in_journal_test_data: Optional[CaseData] = None
degradation_density_du_2_in_journal_test_data: Optional[CaseData] = None
degradation_viscosity_du_2_in_journal_test_data: Optional[CaseData] = None
# ===== Данные для тестов в журнале бики ДУ3=====
degradation_temperature_sensor_du_3_in_journal_test_data: Optional[CaseData] = None
degradation_density_du_3_in_journal_test_data: Optional[CaseData] = None
degradation_viscosity_du_3_in_journal_test_data: Optional[CaseData] = None
# ===== Данные для тестов в журнале для набора данных "В течении"=====
between_si_pressure_more_50_km_in_journal_test_data: Optional[CaseData] = None
deg_gravity_section_pumping_in_journal_test_data: Optional[CaseData] = None
deg_absence_min_pressure_sensors_in_journal_test_data: Optional[CaseData] = None
serviceable_after_deg_absence_min_pressure_sensors_in_journal_test_data: Optional[CaseData] = None
deg_starting_pumping_out_pumps_in_journal_test_data: Optional[CaseData] = None
serviceable_after_faulty_in_journal_test_data: Optional[CaseData] = None
deg_additive_injectors_operation_in_journal_test_data: Optional[CaseData] = None
deg_pig_sensor_passage_in_journal_test_data: Optional[CaseData] = None
deg_exceeding_distance_between_flow_meters_in_journal_test_data: Optional[CaseData] = None
serviceable_after_deg_starting_pumping_out_pumps_in_journal_test_data: Optional[CaseData] = None
faulty_absence_min_flow_meters_in_journal_test_data: Optional[CaseData] = None
faulty_absence_min_pressure_sensors_in_journal_test_data: Optional[CaseData] = None
# ===== Тесты =====
lds_status_basic_info_test: Optional[CaseMarkers] = None
init_accumulation_data_test: Optional[CaseMarkers] = None
init_accumulation_data_in_journal_test: Optional[CaseMarkers] = None
init_cold_start_test: Optional[CaseMarkers] = None
init_cold_start_in_journal_test: Optional[CaseMarkers] = None
init_exiting_faulty_test: Optional[CaseMarkers] = None
init_switching_shut_off_test: Optional[CaseMarkers] = None
init_switching_shut_off_in_journal_test: Optional[CaseMarkers] = None
serviceable_after_cold_start_test: Optional[CaseMarkers] = None
serviceable_after_cold_start_in_journal_test: Optional[CaseMarkers] = None
serviceable_after_switching_shut_off_test: Optional[CaseMarkers] = None
serviceable_after_switching_shut_off_in_journal_test: Optional[CaseMarkers] = None
serviceable_after_deg_absence_min_pressure_sensors_test: Optional[CaseMarkers] = None
serviceable_after_deg_additive_injectors_operation_test: Optional[CaseMarkers] = None
serviceable_after_deg_starting_pumping_out_pumps_test: Optional[CaseMarkers] = None
serviceable_after_deg_faulty_pressure_sensors_at_pump_test: Optional[CaseMarkers] = None
serviceable_after_deg_faulty_pressure_sensors_at_pump_in_journal_test: Optional[CaseMarkers] = None
serviceable_after_deg_exceeding_distance_between_flow_meters_test: Optional[CaseMarkers] = None
serviceable_after_faulty_test: Optional[CaseMarkers] = None
deg_additive_injectors_operation_test: Optional[CaseMarkers] = None
deg_exceeding_distance_between_pressure_sensors_test: Optional[CaseMarkers] = None
deg_exceeding_distance_between_pressure_sensors_in_journal_test: Optional[CaseMarkers] = None
deg_absence_min_pressure_sensors_test: Optional[CaseMarkers] = None
deg_faulty_pressure_sensors_at_pump_station_test: Optional[CaseMarkers] = None
deg_faulty_pressure_sensors_at_pump_station_in_journal_test: Optional[CaseMarkers] = None
deg_gravity_section_pumping_test: Optional[CaseMarkers] = None
deg_gravity_section_pumping_in_stopping_test: Optional[CaseMarkers] = None
deg_gravity_section_pumping_in_stopping_in_journal_test: Optional[CaseMarkers] = None
deg_pig_sensor_passage_test: Optional[CaseMarkers] = None
deg_starting_pumping_out_pumps_test: Optional[CaseMarkers] = None
deg_exceeding_distance_between_flow_meters_test: Optional[CaseMarkers] = None
# ===== ТЕСТЫ на схеме бики=====
deg_rejection_temperature_sensor_on_du_2_test: Optional[CaseMarkers] = None
deg_rejection_temperature_sensor_on_du_3_test: Optional[CaseMarkers] = None
deg_rejection_temperature_sensor_on_du_5_test: Optional[CaseMarkers] = None
deg_rejection_density_and_viscosity_on_du_2_test: Optional[CaseMarkers] = None
deg_rejection_density_and_viscosity_on_du_3_test: Optional[CaseMarkers] = None
deg_rejection_density_and_viscosity_on_du_5_test: Optional[CaseMarkers] = None
faulty_absence_min_flow_meters_test: Optional[CaseMarkers] = None
faulty_absence_min_flow_meters_continuous_test: Optional[CaseMarkers] = None
faulty_absence_min_pressure_sensors_test: Optional[CaseMarkers] = None
faulty_absence_min_pressure_sensors_in_journal_test: Optional[CaseMarkers] = None
# ===== ТЕСТЫ в журнале бики ДУ2=====
degradation_temperature_du_2_in_journal_test: Optional[CaseMarkers] = None
degradation_density_du_2_in_journal_test: Optional[CaseMarkers] = None
degradation_viscosity_du_2_in_journal_test: Optional[CaseMarkers] = None
# ===== ТЕСТЫ в журнале бики ДУ3=====
degradation_temperature_du_3_in_journal_test: Optional[CaseMarkers] = None
degradation_density_du_3_in_journal_test: Optional[CaseMarkers] = None
degradation_viscosity_du_3_in_journal_test: Optional[CaseMarkers] = None
# ===== ТЕСТЫ в журнале для набора данных "В течении"=====
between_si_pressure_more_50_km_in_journal_test: Optional[CaseMarkers] = None
deg_gravity_section_pumping_in_journal_test: Optional[CaseMarkers] = None
deg_absence_min_pressure_sensors_in_journal_test: Optional[CaseMarkers] = None
serviceable_after_deg_absence_min_pressure_sensors_in_journal_test: Optional[CaseMarkers] = None
deg_starting_pumping_out_pumps_in_journal_test: Optional[CaseMarkers] = None
serviceable_after_deg_starting_pumping_out_pumps_in_journal_test: Optional[CaseMarkers] = None
faulty_absence_min_flow_meters_in_journal_test: Optional[CaseMarkers] = None
serviceable_after_faulty_in_journal_test: Optional[CaseMarkers] = None
deg_exceeding_distance_between_flow_meters_in_journal_test: Optional[CaseMarkers] = None
deg_additive_injectors_operation_in_journal_test: Optional[CaseMarkers] = None
deg_pig_sensor_passage_in_journal_test: Optional[CaseMarkers] = None
@dataclass
class StationaryStatusConfig(BaseSuiteConfig):
# ===== Данные для тестов =====
status_unstationary_cold_start_test_data: Optional[CaseData] = None
status_stationary_test_data: Optional[CaseData] = None
status_unstationary_switch_test_data: Optional[CaseData] = None
journal_unstationary_cold_start_test_data: Optional[CaseData] = None
journal_stationary_test_data: Optional[CaseData] = None
journal_unstationary_switch_test_data: Optional[CaseData] = None
# ===== Тесты =====
stationary_status_basic_info_test: Optional[CaseMarkers] = None
common_scheme_cold_start_test: Optional[CaseMarkers] = None
journal_cold_start_test: Optional[CaseMarkers] = None
main_page_info_cold_start_test: Optional[CaseMarkers] = None
output_signals_cold_start_test: Optional[CaseMarkers] = None
common_scheme_stationary_after_cold_test: Optional[CaseMarkers] = None
journal_stationary_after_cold_test: Optional[CaseMarkers] = None
main_page_info_stationary_after_cold_test: Optional[CaseMarkers] = None
output_signals_stationary_after_cold_test: Optional[CaseMarkers] = None
common_scheme_switch_on_test: Optional[CaseMarkers] = None
journal_switch_on_test: Optional[CaseMarkers] = None
main_page_info_switch_on_test: Optional[CaseMarkers] = None
output_signals_switch_on_test: Optional[CaseMarkers] = None
common_scheme_stationary_after_switch_on_test: Optional[CaseMarkers] = None
journal_stationary_after_switch_on_test: Optional[CaseMarkers] = None
main_page_info_stationary_after_switch_on_test: Optional[CaseMarkers] = None
output_signals_stationary_after_switch_on_test: Optional[CaseMarkers] = None
common_scheme_switch_off_test: Optional[CaseMarkers] = None
journal_switch_off_test: Optional[CaseMarkers] = None
main_page_info_switch_off_test: Optional[CaseMarkers] = None
output_signals_switch_off_test: Optional[CaseMarkers] = None
common_scheme_stationary_after_switch_off_test: Optional[CaseMarkers] = None
journal_stationary_after_switch_off_test: Optional[CaseMarkers] = None
main_page_info_stationary_after_switch_off_test: Optional[CaseMarkers] = None
output_signals_stationary_after_switch_off_test: Optional[CaseMarkers] = None
@dataclass
class RejectionTestCase:
"""
Описание одного события отбраковки для тестирования.
Содержит:
- Тег и id датчика (из RejectionSensorTag)
- Ожидаемые значения для проверок журнала и схемы
- Маркеры (offset и test_case_id)
"""
name: str = ""
sensor: RejectionSensorTag = ""
expected_event: str = ""
expected_signal_name: str = ""
expected_criteria_names: Optional[RejectionCriteria] = None
expected_is_rejected: bool = True
time_range_start_s: float = 0
time_range_end_s: float = 0
rejection_input_signals_test: Optional[CaseMarkers] = None
rejection_journal_test: Optional[CaseMarkers] = None
rejection_main_page_test: Optional[CaseMarkers] = None
rejection_scheme_signals_state_test: Optional[CaseMarkers] = None
@dataclass
class RejectionReportRow:
"""Разобранная строка отчёта об отбракованных входных данных."""
row_index: int
datetime_value: Optional[datetime] = None
object_value: str = ""
event_value: str = ""
value_text: str = ""
duration_seconds: int = 0
tag_value: str = ""
@dataclass
class IsRejectedConfig(BaseSuiteConfig):
"""
Конфигурация тестового набора отбраковки сигналов.
Структура:
1. Название МН
2. Список случаев отбраковки (RejectionTestCase)
"""
rejection_cases: list[RejectionTestCase] = field(default_factory=list)
rejection_report_test: Optional[CaseMarkers] = None
requires_process_empty_values_rejection: bool = False
@dataclass
class ExportLeaksReportState:
"""
Состояние сценария формирования xlsx-отчёта об утечках между allure-шагами.
Заполняется по ходу export_leaks_report в smoke_scenarios.
"""
report_test: Optional[CaseMarkers] = None
period_start: Optional[datetime] = None
period_end: Optional[datetime] = None
period_start_naive: Optional[datetime] = None
period_end_naive: Optional[datetime] = None
expected_mt_mode: Optional[str] = None
expected_lds_status_text: Optional[str] = None
time_offset_hours: Optional[int] = None
tu_description_lower: str = ""
notification: Optional[ReportDataExportedNotification] = None
report_item: Optional[ExportedDataItem] = None
report_file_name: str = ""
download_invocation_id: Optional[str] = None
download_payload: Optional[list] = None
download_reply: Optional[DownloadExportedDataReply] = None
file_bytes: Optional[bytes] = None
temp_file_path: Optional[Path] = None
worksheet: Any = None
title_info: Optional[ReportTitleInfo] = None
data_rows: list[LeakReportRow] = field(default_factory=list)
target_row: Optional[LeakReportRow] = None
@dataclass
class ExportLdsStatusReportState:
"""Состояние сценария формирования xlsx-отчёта о режиме работы СОУ."""
report_test: Optional[CaseMarkers] = None
period_start: Optional[datetime] = None
period_end: Optional[datetime] = None
period_start_naive: Optional[datetime] = None
period_end_naive: Optional[datetime] = None
time_offset_hours: Optional[int] = None
tu_description_lower: str = ""
notification: Optional[ReportDataExportedNotification] = None
report_item: Optional[ExportedDataItem] = None
report_file_name: str = ""
download_invocation_id: Optional[str] = None
download_reply: Optional[DownloadExportedDataReply] = None
file_bytes: Optional[bytes] = None
temp_file_path: Optional[Path] = None
worksheet: Any = None
parsed_report: Any = None
@dataclass
class ExportRejectedReportState:
"""
Состояние сценария формирования xlsx-отчёта об отбракованных входных данных.
Поля с префиксом expected_ - из конфигурации теста, actual_ - из ответов бэка и разбора xlsx.
"""
# --- expected: конфигурация теста и расчётные ожидания ---
expected_report_test: Optional[CaseMarkers] = None
expected_period_start: Optional[datetime] = None
expected_period_end: Optional[datetime] = None
expected_period_start_naive: Optional[datetime] = None
expected_period_end_naive: Optional[datetime] = None
expected_tu_description_lower: str = ""
expected_file_name: str = ""
# --- actual: ответы бэка ---
actual_time_offset_hours: Optional[int] = None
actual_notification: Optional[ReportDataExportedNotification] = None
actual_report_item: Optional[ExportedDataItem] = None
actual_download_invocation_id: Optional[str] = None
actual_download_reply: Optional[DownloadExportedDataReply] = None
actual_file_bytes: Optional[bytes] = None
# --- actual: разбор xlsx ---
actual_temp_file_path: Optional[Path] = None
actual_worksheet: Any = None
actual_title_info: Optional[ReportTitleInfo] = None
actual_data_rows: list[RejectionReportRow] = field(default_factory=list)
actual_monitored_tag_rows: list[RejectionReportRow] = field(default_factory=list)
actual_header_column_headers: list[str] = field(default_factory=list)
actual_header_period_start: Optional[datetime] = None
actual_header_period_end: Optional[datetime] = None
actual_header_contains_expected_title: bool = False
actual_case_checks: list = field(default_factory=list)
@dataclass
class ExportMtModeReportState:
"""
Состояние сценария формирования xlsx-отчёта о режиме работы МТ.
Поля с префиксом expected_ - из конфигурации теста, actual_ - из ответов бэка и разбора xlsx.
"""
# --- expected: конфигурация теста и расчётные ожидания ---
expected_report_test: Optional[CaseMarkers] = None
expected_period_start: Optional[datetime] = None
expected_period_end: Optional[datetime] = None
expected_period_start_naive: Optional[datetime] = None
expected_period_end_naive: Optional[datetime] = None
expected_tu_description_lower: str = ""
expected_file_name: str = ""
expected_section_names: list[str] = field(default_factory=list)
expected_dominant_mode_column: str = ""
# --- actual: ответы бэка ---
actual_time_offset_hours: Optional[int] = None
actual_notification: Optional[ReportDataExportedNotification] = None
actual_report_item: Optional[ExportedDataItem] = None
actual_download_invocation_id: Optional[str] = None
actual_download_reply: Optional[DownloadExportedDataReply] = None
actual_file_bytes: Optional[bytes] = None
# --- actual: разбор xlsx ---
actual_temp_file_path: Optional[Path] = None
actual_worksheet: Any = None
actual_parsed_report: Any = None