Загрузка данных
async def imitate_sensor_signal(ws_client, cfg: SmokeSuiteConfig, test_data: CaseData, imitator_start_time):
"""
Проверка имитации сигнала датчика.
"""
# Распаковка данных для теста
sensor_address = test_data.params.get("sensor_address")
sensor_val, sensor_quality, imitation_event, unimitation_event = test_data.expected_result
# Получение актуального id датчика
sensor_id = TestConst.SENSOR_IDS_BY_ADDRESS.get(sensor_address)
with allure.step(f"Отправка сообщения и обработка ответа об имитации сигнала датчика с id: {sensor_id}"):
payload = await t_utils.connect_and_get_msg(
ws_client,
"ImitateSignalRequest",
{
'id': sensor_id,
'tuId': cfg.tu_id,
'imitateInfo': {
'value': str(sensor_val),
'quality': sensor_quality,
'additionalProperties': None,
},
'additionalProperties': None,
},
)
parsed_payload = parser.parse_imitate_signal_msg(payload)
sensor_imitate_reply_status = parsed_payload.replyStatus
StepCheck("Проверка кода ответа на запрос об имитации", "replyStatus").actual(
sensor_imitate_reply_status
).expected(ReplyStatus.OK.value).equal_to()
with allure.step(
"Получение данных для проверки имитации.Тип сообщения: InputSignalsContent. ЭФ Диагностика Сигналов."
):
time.sleep(cfg.basic_message_timeout)
payload = await t_utils.connect_and_subscribe_msg(
ws_client,
"InputSignalsContent",
"SubscribeInputSignalsRequest",
{
'signalIds': [sensor_id],
'tuId': cfg.tu_id,
'additionalProperties': None,
},
)
parsed_payload = parser.parse_input_signals_info_msg(payload)
with allure.step("Подготовка данных для проверки имитации. ЭФ Диагностика Сигналов."):
sensor_data = getattr(parsed_payload.replyContent, 'inputSignals', [])
sensor_imitate_data = t_utils.find_object_by_field(sensor_data, "id", sensor_id)
if sensor_imitate_data:
value_imitate_data = sensor_imitate_data.imitation.value
else:
value_imitate_data = None
with allure.step("Подготовка данных для проверки имитации.Тип сообщения: SchemeSignalsStateContent. ЭФ Схема."):
payload = await t_utils.connect_and_subscribe_msg(
ws_client,
"SchemeSignalsStateContent",
"SubscribeSchemeSignalsStateRequest",
{'tuId': cfg.tu_id},
)
parsed_payload = parser.parse_scheme_signals_state_msg(payload)
signal_state_list = parsed_payload.signalsStates
sensor_imitate_data = t_utils.find_object_by_field(signal_state_list, "id", sensor_id)
status_imitate_sensor = sensor_imitate_data.isImitated
with allure.step(f"Отправка сообщения и обработка ответа о снятии имитации датчика с id: {sensor_id}"):
payload = await t_utils.connect_and_get_msg(
ws_client,
"UnimitateSignalRequest",
{'id': sensor_id, 'tuId': cfg.tu_id, 'additionalProperties': None},
)
parsed_payload = parser.parse_unimitate_signal_msg(payload)
sensor_unimitate_reply_status = parsed_payload.replyStatus
StepCheck("Проверка кода ответа на запрос о снятии имитации", "replyStatus").actual(
sensor_unimitate_reply_status
).expected(ReplyStatus.OK.value).equal_to()
with allure.step(
"Подключение по ws, получение и обработка данных о статусе датчика из сообщения типа: InputSignalsContent"
):
time.sleep(cfg.basic_message_timeout)
payload = await t_utils.connect_and_subscribe_msg(
ws_client,
"InputSignalsContent",
"SubscribeInputSignalsRequest",
{
'signalIds': [sensor_id],
'tuId': cfg.tu_id,
'additionalProperties': None,
},
)
parsed_payload = parser.parse_input_signals_info_msg(payload)
with allure.step("Извлечение и подготовка данных для проверки снятия имитации"):
sensor_data = getattr(parsed_payload.replyContent, 'inputSignals', [])
sensor_unimitate_data = t_utils.find_object_by_field(sensor_data, "id", sensor_id)
StepCheck("Проверка наличия данных для проверки снятия имитации", "inputSignals").actual(
sensor_unimitate_data
).is_not_none()
with allure.step(
"Получение данных для проверки снятия имитации. Тип сообщения: SchemeSignalsStateContent. ЭФ Схема"
):
payload = await t_utils.connect_and_subscribe_msg(
ws_client,
"SchemeSignalsStateContent",
"SubscribeSchemeSignalsStateRequest",
{'tuId': cfg.tu_id},
)
parsed_payload = parser.parse_scheme_signals_state_msg(payload)
signal_state_list = parsed_payload.signalsStates
sensor_unimitate_data = t_utils.find_object_by_field(signal_state_list, "id", sensor_id)
status_unimitate_sensor = sensor_unimitate_data.isImitated
with allure.step("Запрос сообщений журнала с фильтром по времени и действию пользователя"):
# Запрос сообщений по типу действий пользователя маскирование и имитация сигналов
request_body = t_utils.create_journal_req_body(
pagination=Pagination(limit=TestConst.JOURNAL_PAGINATION_LIMIT, direction=Direction.FIRST.value),
filtering=Filtering(userActions=int(UserActions.SIGNAL_MASK_SIM), objects=FilteringObjects(tuId=cfg.tu_id)),
)
payload = await t_utils.connect_and_get_msg(ws_client, "GetMessagesRequest", request_body)
parsed_payload = parser.parse_journal_msg(payload)
messages_info = getattr(parsed_payload.replyContent, 'messagesInfo', [])
# Фильтр полученных сообщений по времени
end_time = datetime.now()
filter_start_msk = t_utils.localize_as_moscow(imitator_start_time)
filter_end_msk = t_utils.localize_as_moscow(end_time)
filter_time_messages = [
msg
for msg in messages_info
if filter_start_msk <= t_utils.ensure_moscow_timezone(msg.time) <= filter_end_msk
]
if filter_time_messages:
event_list = [msg.event for msg in filter_time_messages]
tag_list = [msg.tag for msg in filter_time_messages]
else:
event_list = []
tag_list = []
with SoftAssertions() as soft_failures:
StepCheck(
f"Проверка имитации датчика с id: {sensor_id}. ЭФ Диагностика Сигналов", "isImitated", soft_failures
).actual(sensor_imitate_data.isImitated).expected(True).equal_to()
StepCheck(f"Проверка имитации датчика с id: {sensor_id}. ЭФ Схема", "isImitated", soft_failures).actual(
status_imitate_sensor
).expected(True).equal_to()
StepCheck(
f"Проверка показаний датчика с id: {sensor_id}. ЭФ Диагностика Сигналов", "value", soft_failures
).actual(value_imitate_data).expected(sensor_val).equal_to()
StepCheck(
f"Проверка качества сигнала датчика с id: {sensor_id}. ЭФ Диагностика Сигналов", "quality", soft_failures
).actual(sensor_imitate_data.quality).expected(sensor_quality).equal_to()
StepCheck("Проверка события сообщения об имитации. ЭФ Журнал", "event", soft_failures).contains(
event_list, imitation_event
)
StepCheck(
f"Проверка снятия имитации датчика с id: {sensor_id}. ЭФ Диагностика Сигналов.", "isImitated", soft_failures
).actual(sensor_unimitate_data.isImitated).expected(False).equal_to()
StepCheck(f"Проверка снятия имитации датчика с id: {sensor_id}. ЭФ Схема", "isImitated", soft_failures).actual(
status_unimitate_sensor
).expected(False).equal_to()
StepCheck("Проверка события сообщения о снятии имитации. ЭФ Журнал", "event", soft_failures).contains(
event_list, unimitation_event
)
StepCheck("Проверка наличия тега в сообщении об имитации. ЭФ Журнал", "event", soft_failures).contains(
tag_list, sensor_address
)