Загрузка данных
возникла проблема с тестами на отбраковки, попадали только тесты на schemeSignalState - причем все.
Мне кажется проблема в том что могли обновиться контракты. Локализовать проблему
тело теста
tests.test_is_rejected_regress.TestIsRejectedScenarios#test_rejection_scheme_signals_state
Не прошло
[SchemeSignalsState] Отбраковка по разнице показаний СИ давления на КП снята AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pin (id=31572) (nearby_pressure_pin_clearance). ЭФ: Схема
Обзор История Перезапуски
Failed: Ошибка парсинга сообщения типа: SchemeSignalsStateReply текст ошибки: missing value for field "tuId"
Теги: test_suite_data_id(183) test_data_name('is_rejected_regress.tar.gz') test_case_id('192') asyncio test_suite_name('is_rejected_regress') offset(35.4) tu_id(3) SchemeSignalsState REGRESS
Категории: Product defects
Важность: обычная
Длительность: 997ms
Описание
Проверка отбраковки сигнала AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pin (id=31572), на наборе данных is_rejected_regress,
на технологическом участке Тихорецк-Новороссийск-3
Время проведения проверки: 35.4 мин.
Тип отбраковки: nearby_pressure_pin_clearance
Ожидаемый criteriaNames: None
Подписка: SubscribeSchemeSignalsStateRequest
Параметры
config: IsRejectedConfig(suite_name='is_rejected_regress', suite_data_id=183, archive_name='is_rejected_regress.tar.gz', technological_unit=<TU.TIKHORETSK_NOVOROSSIYSK_3: (3, 'Тихорецк-Новороссийск-3', 'tn3.json')>, measure_conversion_rules=<MeasureConversionRule.KG_CM_MEASURE: 'KG_CM_MEASURE'>, allowed_distance_diff_meters=5000, precision=3, basic_message_timeout=10.0, mask_message_timeout=180.0, mask_du_name=None, main_pipe_line=None, mask_du_event=None, unmask_du_event=None, main_pipeline='МН Тихорецк-Новороссийск-3', rejection_cases=[RejectionTestCase(name='empty_flow', sensor=<RejectionSensorTag.NPS_KRIM_P_Vmom: (0, 'AK.CHTN.NPS_KRIM_P.UZR_1.Vmom')>, expected_event='Отбраковка по отсутствию значения', expected_signal_name='Расход', expected_criteria_names=<RejectionCriteria.EMPTY: 4>, expected_is_rejected=True, time_range_start_s=0, time_range_end_s=240, rejection_input_signals_test=CaseMarkers(test_case_id='189', offset=3), rejection_journal_test=None, 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=<RejectionSensorTag.KP_209_1_Pin: (0, 'AK.CHTN.LU_VELKRIM.KP_209-1.SW_215-3-1.Pin')>, expected_event='Отбраковка по отсутствию значения', expected_signal_name='Значение давления', expected_criteria_names=<RejectionCriteria.EMPTY: 4>, expected_is_rejected=True, time_range_start_s=0, time_range_end_s=540, rejection_input_signals_test=CaseMarkers(test_case_id='190', offset=4), rejection_journal_test=None, rejection_main_page_test=CaseMarkers(test_case_id='190', offset=6), rejection_scheme_signals_state_test=CaseMarkers(test_case_id='190', offset=5)), RejectionTestCase(name='quality_flow', sensor=<RejectionSensorTag.NPS_KRIM_P_Vmom: (0, 'AK.CHTN.NPS_KRIM_P.UZR_1.Vmom')>, expected_event='Отбраковка по качеству', expected_signal_name='Расход', expected_criteria_names=<RejectionCriteria.QUALITY: 1>, expected_is_rejected=True, 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=<RejectionSensorTag.NPS_KRIM_P_Vmom: (0, 'AK.CHTN.NPS_KRIM_P.UZR_1.Vmom')>, expected_event='Отбраковка по качеству снята', expected_signal_name='Расход', expected_criteria_names=None, expected_is_rejected=False, time_range_start_s=600, time_range_end_s=840, rejection_input_signals_test=CaseMarkers(test_case_id='191', offset=15.5), rejection_journal_test=CaseMarkers(test_case_id='191', offset=15.5), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='191', offset=15.5)), RejectionTestCase(name='quality_pressure', sensor=<RejectionSensorTag.KP_209_1_Pin: (0, 'AK.CHTN.LU_VELKRIM.KP_209-1.SW_215-3-1.Pin')>, expected_event='Отбраковка по качеству', expected_signal_name='Значение давления', expected_criteria_names=<RejectionCriteria.QUALITY: 1>, expected_is_rejected=True, 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), rejection_scheme_signals_state_test=CaseMarkers(test_case_id='205', offset=17)), RejectionTestCase(name='quality_pressure_clearance', sensor=<RejectionSensorTag.KP_209_1_Pin: (0, 'AK.CHTN.LU_VELKRIM.KP_209-1.SW_215-3-1.Pin')>, expected_event='Отбраковка по качеству снята', expected_signal_name='Значение давления', expected_criteria_names=None, expected_is_rejected=False, time_range_start_s=900, time_range_end_s=1140, rejection_input_signals_test=CaseMarkers(test_case_id='205', offset=20.5), rejection_journal_test=CaseMarkers(test_case_id='205', offset=20.5), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='205', offset=20.5)), RejectionTestCase(name='vtor_flow', sensor=<RejectionSensorTag.NPS_TIH_5_Vmom: (0, 'AK.CHTN.NPS_TIH_5.UZR_1.Vmom')>, expected_event='Отбраковка по сигналу ВТОР', expected_signal_name='Расход', expected_criteria_names=<RejectionCriteria.VTOR: 64>, expected_is_rejected=True, 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), rejection_scheme_signals_state_test=CaseMarkers(test_case_id='206', offset=22)), RejectionTestCase(name='vtor_flow_clearance', sensor=<RejectionSensorTag.NPS_TIH_5_Vmom: (0, 'AK.CHTN.NPS_TIH_5.UZR_1.Vmom')>, expected_event='Отбраковка по сигналу ВТОР снята', expected_signal_name='Расход', expected_criteria_names=None, expected_is_rejected=False, time_range_start_s=1200, time_range_end_s=1440, rejection_input_signals_test=CaseMarkers(test_case_id='206', offset=25), rejection_journal_test=CaseMarkers(test_case_id='206', offset=25), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='206', offset=25)), RejectionTestCase(name='vtor_pressure', sensor=<RejectionSensorTag.KP_7_Pin: (0, 'AK.CHTN.LU_TIHVEL.KP_7.SW_6-3.Pin')>, expected_event='Отбраковка по сигналу ВТОР', expected_signal_name='Значение давления', expected_criteria_names=<RejectionCriteria.VTOR: 64>, expected_is_rejected=True, 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), rejection_scheme_signals_state_test=CaseMarkers(test_case_id='207', offset=27)), RejectionTestCase(name='vtor_pressure_clearance', sensor=<RejectionSensorTag.KP_7_Pin: (0, 'AK.CHTN.LU_TIHVEL.KP_7.SW_6-3.Pin')>, expected_event='Отбраковка по сигналу ВТОР снята', expected_signal_name='Значение давления', expected_criteria_names=None, 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.2), rejection_journal_test=CaseMarkers(test_case_id='207', offset=30.2), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='207', offset=30.2)), RejectionTestCase(name='nearby_pressure_pin', sensor=<RejectionSensorTag.KP_8_Pin: (0, 'AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pin')>, expected_event='Отбраковка по разнице показаний СИ давления на КП', expected_signal_name='Значение давления', expected_criteria_names=<RejectionCriteria.NEARBY: 128>, expected_is_rejected=True, 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=<RejectionSensorTag.KP_8_Pout: (0, 'AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pout')>, expected_event='Отбраковка по разнице показаний СИ давления на КП', expected_signal_name='Значение давления', expected_criteria_names=<RejectionCriteria.NEARBY: 128>, expected_is_rejected=True, 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=<RejectionSensorTag.KP_8_Pin: (0, 'AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pin')>, expected_event='Отбраковка по разнице показаний СИ давления на КП снята', expected_signal_name='Значение давления', expected_criteria_names=None, 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.4), rejection_journal_test=CaseMarkers(test_case_id='192', offset=35.4), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='192', offset=35.4)), RejectionTestCase(name='nearby_pressure_pout_clearance', sensor=<RejectionSensorTag.KP_8_Pout: (0, 'AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pout')>, expected_event='Отбраковка по разнице показаний СИ давления на КП снята', expected_signal_name='Значение давления', expected_criteria_names=None, 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), rejection_journal_test=CaseMarkers(test_case_id='193', offset=35.5), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='193', offset=35.5)), RejectionTestCase(name='diagnostic_info_flow', sensor=<RejectionSensorTag.NPS_TIH_5_Vmom: (0, 'AK.CHTN.NPS_TIH_5.UZR_1.Vmom')>, expected_event='Отбраковка по диагностической информации', expected_signal_name='Расход', expected_criteria_names=<RejectionCriteria.DIAGNOSTIC_INFO: 256>, expected_is_rejected=True, time_range_start_s=2100, time_range_end_s=2340, rejection_input_signals_test=CaseMarkers(test_case_id='194', offset=38), rejection_journal_test=None, 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=<RejectionSensorTag.NPS_TIH_5_Vmom: (0, 'AK.CHTN.NPS_TIH_5.UZR_1.Vmom')>, expected_event='Отбраковка по диагностической информации снята', expected_signal_name='Расход', expected_criteria_names=None, 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.1), rejection_journal_test=None, rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='194', offset=40.1)), RejectionTestCase(name='constant_signal_flow', sensor=<RejectionSensorTag.NPS_TIH_5_Vmom: (0, 'AK.CHTN.NPS_TIH_5.UZR_1.Vmom')>, expected_event='Отбраковка по постоянному сигналу', expected_signal_name='Расход', expected_criteria_names=<RejectionCriteria.CONSTANT_SIGNAL: 16>, expected_is_rejected=True, 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(name='constant_signal_flow_clearance', sensor=<RejectionSensorTag.NPS_TIH_5_Vmom: (0, 'AK.CHTN.NPS_TIH_5.UZR_1.Vmom')>, expected_event='Отбраковка по постоянному сигналу снята', expected_signal_name='Расход', expected_criteria_names=None, 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_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='208', offset=45)), RejectionTestCase(name='constant_signal_pressure', sensor=<RejectionSensorTag.KP_8_Pin: (0, 'AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pin')>, expected_event='Отбраковка по постоянному сигналу', expected_signal_name='Значение давления', expected_criteria_names=<RejectionCriteria.CONSTANT_SIGNAL: 16>, expected_is_rejected=True, 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(name='constant_signal_pressure_clearance', sensor=<RejectionSensorTag.KP_8_Pin: (0, 'AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pin')>, expected_event='Отбраковка по постоянному сигналу снята', expected_signal_name='Значение давления', expected_criteria_names=None, 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_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='209', offset=50)), RejectionTestCase(name='range_upper_flow', sensor=<RejectionSensorTag.NPS_TIH_5_Vmom: (0, 'AK.CHTN.NPS_TIH_5.UZR_1.Vmom')>, expected_event='Отбраковка по допустимому диапазону', expected_signal_name='Расход', expected_criteria_names=<RejectionCriteria.RANGE: 2>, expected_is_rejected=True, 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=<RejectionSensorTag.NPS_TIH_5_Vmom: (0, 'AK.CHTN.NPS_TIH_5.UZR_1.Vmom')>, expected_event='Отбраковка по допустимому диапазону снята', expected_signal_name='Расход', expected_criteria_names=None, 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.2), rejection_journal_test=CaseMarkers(test_case_id='195', offset=55.2), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='195', offset=55.2)), RejectionTestCase(name='range_lower_flow', sensor=<RejectionSensorTag.NPS_TIH_5_Vmom: (0, 'AK.CHTN.NPS_TIH_5.UZR_1.Vmom')>, expected_event='Отбраковка по допустимому диапазону', expected_signal_name='Расход', expected_criteria_names=<RejectionCriteria.RANGE: 2>, expected_is_rejected=True, 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=<RejectionSensorTag.NPS_TIH_5_Vmom: (0, 'AK.CHTN.NPS_TIH_5.UZR_1.Vmom')>, expected_event='Отбраковка по допустимому диапазону снята', expected_signal_name='Расход', expected_criteria_names=None, 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), rejection_journal_test=CaseMarkers(test_case_id='197', offset=60), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='197', offset=60)), RejectionTestCase(name='range_upper_pressure', sensor=<RejectionSensorTag.KP_8_Pin: (0, 'AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pin')>, expected_event='Отбраковка по допустимому диапазону', expected_signal_name='Значение давления', expected_criteria_names=<RejectionCriteria.RANGE: 2>, expected_is_rejected=True, 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=<RejectionSensorTag.KP_8_Pin: (0, 'AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pin')>, expected_event='Отбраковка по допустимому диапазону снята', expected_signal_name='Значение давления', expected_criteria_names=None, 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.3), rejection_journal_test=CaseMarkers(test_case_id='196', offset=65.3), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='196', offset=65.3)), RejectionTestCase(name='range_lower_pressure', sensor=<RejectionSensorTag.KP_8_Pin: (0, 'AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pin')>, expected_event='Отбраковка по допустимому диапазону', expected_signal_name='Значение давления', expected_criteria_names=<RejectionCriteria.RANGE: 2>, expected_is_rejected=True, 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=<RejectionSensorTag.KP_8_Pin: (0, 'AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pin')>, expected_event='Отбраковка по допустимому диапазону снята', expected_signal_name='Значение давления', expected_criteria_names=None, expected_is_rejected=False, time_range_start_s=3900, time_range_end_s=4140, rejection_input_signals_test=CaseMarkers(test_case_id='198', offset=70), rejection_journal_test=CaseMarkers(test_case_id='198', offset=70), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='198', offset=70))])
rejection_case: RejectionTestCase(name='nearby_pressure_pin_clearance', sensor=<RejectionSensorTag.KP_8_Pin: (0, 'AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pin')>, expected_event='Отбраковка по разнице показаний СИ давления на КП снята', expected_signal_name='Значение давления', expected_criteria_names=None, 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.4), rejection_journal_test=CaseMarkers(test_case_id='192', offset=35.4), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='192', offset=35.4))
Ссылки
TestCase-192
Выполнение
Подготовка
Тело теста
Подключение по ws, получение данных SchemeSignalsStateContent для датчика AK.CHTN.LU_TIHVEL.KP_8.SW_8-3.Pin (id=31572) 2 вложенных шага997ms
Вызов SubscribeSchemeSignalsStateRequest c параметрами {'tuId': 3}0s
Получение сообщения с контентом типа: SchemeSignalsStateContent997ms
Failed: Ошибка парсинга сообщения типа: SchemeSignalsStateReply текст ошибки: missing value for field "tuId"
File "/builds/lds/lds-autotests/test_scenarios/rejected_scenarios.py", line 207, in rejection_scheme_signals_state
parsed_payload = parser.parse_scheme_signals_state_msg(payload)
File "/builds/lds/lds-autotests/utils/helpers/ws_message_parser.py", line 234, in parse_scheme_signals_state_msg
return self._parse_message(data_class=signals_state_model.SchemeSignalsStateReply, data=payload)
File "/builds/lds/lds-autotests/utils/helpers/ws_message_parser.py", line 308, in _parse_message
fail(f"Ошибка парсинга сообщения типа: {data_class_name} текст ошибки: {error}")
File "/builds/lds/lds-autotests/.venv/lib/python3.10/site-packages/_pytest/outcomes.py", line 177, in fail
raise Failed(msg=reason, pytrace=pytrace)
log
673 B
Failed: Ошибка парсинга сообщения типа: SchemeSignalsStateReply текст ошибки: missing value for field "tuId"
self = <utils.helpers.ws_message_parser.WsMessageParser object at 0x7fad8f6e8d00>
data_class = <class 'models.subscribe_scheme_signals_state_model.SchemeSignalsStateReply'>
data = {'replyContent': {'signalsStates': [{'generationTime': None, 'id': 32438, 'imitation': None, 'isImitated': False, ...}...': 406, 'isInWork': False}, {'id': 9992054416, 'isInWork': True}], 'tuId': 3}, 'replyErrors': None, 'replyStatus': 200}
config = None
def _parse_message(
self,
data_class: Type[MessageType],
data: dict,
config: Optional[Config] = None,
) -> MessageType:
"""
Универсальная функция парсинга сообщений
"""
data_class_name = data_class.__name__
if not data:
fail(f"Пустое сообщение типа: {data_class_name}")
error_message = data.get('replyErrors')
if error_message:
fail(f"Ошибка в сообщении типа: {data_class_name} текст ошибки: {error_message}")
try:
> message = from_dict(
data_class=data_class, data=data, config=config or self._dacite_config # type: ignore[arg-type]
)
utils/helpers/ws_message_parser.py:296:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
data_class = <class 'models.subscribe_scheme_signals_state_model.SchemeSignalsStateReply'>
data = {'replyContent': {'signalsStates': [{'generationTime': None, 'id': 32438, 'imitation': None, 'isImitated': False, ...}...': 406, 'isInWork': False}, {'id': 9992054416, 'isInWork': True}], 'tuId': 3}, 'replyErrors': None, 'replyStatus': 200}
config = Config(type_hooks={<class 'uuid.UUID'>: <function WsMessageParser.convert_to_uuid at 0x7fad8f56dcf0>, <class 'datetime...e, strict=False, strict_unions_match=False, convert_key=<function Config.<lambda>.<locals>.<lambda> at 0x7fad8f56eef0>)
def from_dict(data_class: Type[T], data: Data, config: Optional[Config] = None) -> T:
"""Create a data class instance from a dictionary.
:param data_class: a data class type
:param data: a dictionary of a input data
:param config: a configuration of the creation process
:return: an instance of a data class
"""
init_values: MutableMapping[str, Any] = {}
post_init_values: MutableMapping[str, Any] = {}
config = config or Config()
try:
data_class_hints = cache(get_concrete_type_hints)(data_class, localns=config.hashable_forward_references)
except NameError as error:
raise ForwardReferenceError(str(error)) from None
data_class_fields = cache(get_fields)(data_class)
if config.strict:
extra_fields = set(data.keys()) - {f.name for f in data_class_fields}
if extra_fields:
raise UnexpectedDataError(keys=extra_fields)
for field in data_class_fields:
field_type = data_class_hints[field.name]
key = config.convert_key(field.name)
if key in data:
try:
value = _build_value(type_=field_type, data=data[key], config=config)
except DaciteFieldError as error:
error.update_path(field.name)
raise
if config.check_types and not is_instance(value, field_type):
raise WrongTypeError(field_path=field.name, field_type=field_type, value=value)
else:
try:
value = get_default_value_for_field(field, field_type)
except DefaultValueNotFoundError:
if not field.init:
continue
> raise MissingValueError(field.name) from None
E dacite.exceptions.MissingValueError: missing value for field "tuId"
.venv/lib/python3.10/site-packages/dacite/core.py:81: MissingValueError
During handling of the above exception, another exception occurred:
self = <test_is_rejected_regress.TestIsRejectedScenarios object at 0x7fad8f496ad0>
ws_client = <clients.websocket_client.WebSocketClient object at 0x7fad80d90eb0>
config = IsRejectedConfig(suite_name='is_rejected_regress', suite_data_id=183, archive_name='is_rejected_regress.tar.gz', techn...t=70), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='198', offset=70))])
rejection_case = RejectionTestCase(name='nearby_pressure_pin_clearance', sensor=<RejectionSensorTag.KP_8_Pin: (0, 'AK.CHTN.LU_TIHVEL.KP...35.4), rejection_main_page_test=None, rejection_scheme_signals_state_test=CaseMarkers(test_case_id='192', offset=35.4))
@pytest.mark.asyncio
async def test_rejection_scheme_signals_state(
self,
ws_client: WebSocketClient,
config: IsRejectedConfig,
rejection_case: RejectionTestCase,
) -> None:
"""[SchemeSignalsState] Проверка отбраковки сигнала на схеме по подписке SubscribeSchemeSignalsStateRequest"""
sensor = rejection_case.sensor
tag = "SchemeSignalsState"
title = (
f"[{tag}] {rejection_case.expected_event} {sensor.description} (id={sensor.id}) "
f"({rejection_case.name}). ЭФ: Схема"
)
_apply_allure_markers(
rejection_case.rejection_scheme_signals_state_test,
tag,
title,
(
f"Проверка отбраковки сигнала {sensor.description} (id={sensor.id}), "
f"на наборе данных {config.suite_name},\n"
f"на технологическом участке {config.technological_unit.description}\n"
f"Время проведения проверки: {rejection_case.rejection_scheme_signals_state_test.offset} мин.\n"
f"Тип отбраковки: {rejection_case.name}\n"
f"Ожидаемый criteriaNames: {rejection_case.expected_criteria_names}\n"
"Подписка: SubscribeSchemeSignalsStateRequest"
),
)
> await scenarios.rejection_scheme_signals_state(ws_client, config, rejection_case)
tests/test_is_rejected_regress.py:201:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_scenarios/rejected_scenarios.py:207: in rejection_scheme_signals_state
parsed_payload = parser.parse_scheme_signals_state_msg(payload)
utils/helpers/ws_message_parser.py:234: in parse_scheme_signals_state_msg
return self._parse_message(data_class=signals_state_model.SchemeSignalsStateReply, data=payload)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <utils.helpers.ws_message_parser.WsMessageParser object at 0x7fad8f6e8d00>
data_class = <class 'models.subscribe_scheme_signals_state_model.SchemeSignalsStateReply'>
data = {'replyContent': {'signalsStates': [{'generationTime': None, 'id': 32438, 'imitation': None, 'isImitated': False, ...}...': 406, 'isInWork': False}, {'id': 9992054416, 'isInWork': True}], 'tuId': 3}, 'replyErrors': None, 'replyStatus': 200}
config = None
def _parse_message(
self,
data_class: Type[MessageType],
data: dict,
config: Optional[Config] = None,
) -> MessageType:
"""
Универсальная функция парсинга сообщений
"""
data_class_name = data_class.__name__
if not data:
fail(f"Пустое сообщение типа: {data_class_name}")
error_message = data.get('replyErrors')
if error_message:
fail(f"Ошибка в сообщении типа: {data_class_name} текст ошибки: {error_message}")
try:
message = from_dict(
data_class=data_class, data=data, config=config or self._dacite_config # type: ignore[arg-type]
)
if not self.suppress_recv_logging:
attach(
str(message) + f" {datetime.now(ZoneInfo(WebSocketClientConstants.ZONE_INFO))}",
name=data_class_name,
attachment_type=attachment_type.TEXT,
)
return message
except DaciteError as error:
> fail(f"Ошибка парсинга сообщения типа: {data_class_name} текст ошибки: {error}")
E Failed: Ошибка парсинга сообщения типа: SchemeSignalsStateReply текст ошибки: missing value for field "tuId"
utils/helpers/ws_message_parser.py:308: Failed
текущая модель данных
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional
@dataclass
class SignalRejection:
criteriaNames: int = 0
@dataclass
class SignalState:
"""Данные о состоянии сигнала на схеме."""
id: int = 0
quality: Optional[int] = None
isRejected: bool = False
isMasked: bool = False
isImitated: bool = False
rejection: Optional[Dict[str, Any]] = None
generationTime: Optional[Any] = None
receivedTime: Optional[Any] = None
value: Optional[Any] = None
imitation: Optional[Any] = None
@dataclass
class ToState:
id: int = 0
isInWork: bool = False
@dataclass
class SchemeSignalsStateContent:
tuId: int = 0
signalsStates: List[SignalState] = field(default_factory=list)
toStates: List[ToState] = field(default_factory=list)
@dataclass
class SchemeSignalsStateReply:
replyStatus: int = 0
replyErrors: Optional[Any] = None
replyContent: Optional[SchemeSignalsStateContent] = None
фрагмент ответа с бэка
[1, {}, None, 'SchemeSignalsStateContent', [{'replyStatus': 200, 'replyErrors': None, 'replyContent': {'tuId': 3, 'signalsStates': [[3, {'id': 32438, 'quality': None, 'isRejected': True, 'isMasked': False, 'isImitated': False, 'rejection': {'criteriaNames': 4}, 'generationTime': None, 'receivedTime': None, 'value': None, 'imitation': None}], [3, {'id': 32440, 'quality': None, 'isRejected': False, 'isMasked': False, 'isImitated': False, 'rejection': {'criteriaNames': 0}, 'generationTime': None, 'receivedTime': None, 'value': None, 'imitation': None}], [1, {'id': 32439, 'quality': None, 'isRejected': True, 'isMasked': False, 'isImitated': False, 'rejection': {'criteriaNames': 4}, 'generationTime': None, 'receivedTime': None, 'value': None, 'imitation': None}], [3, {'id': 30167, 'quality': 1, 'isRejected': False, 'isMasked': False, 'isImitated': False, 'rejection': {'criteriaNames': 0}, 'generationTime': [Timestamp(seconds=1782880819, nanoseconds=0), 0], 'receivedTime': [Timestamp(seconds=1782880875, nanoseconds=245000000), 0], 'value': 851.047119140625, 'imitation': None}]