Загрузка данных


похоже осталась одна проблема в выключении СОУ в тирдауне. С фронта вижу что не выключается СОУ по факту. В логах ошибка
Нужен фикс, если нужна доп информация уточнить




-------------------------------- live log call ---------------------------------
[INFO] 2026-06-30 09:10:53.499000 websocket_client.py Сообщение подготовлено к отправке: [1, {}, '1', 'GetMessagesRequest', [{'pagination': {'limit': 10, 'id': None, 'direction': 3, 'eventTime': None, 'additionalProperties': None}, 'periodTime': None, 'sorting': {'sortingParam': 1, 'sortingType': 2, 'additionalProperties': None}, 'search': {'query': '', 'additionalProperties': None}, 'filtering': {'priorities': 0, 'messageTypes': 8, 'userActions': 0, 'objects': {'tuId': 238, 'objectIds': [], 'objectTypes': 0, 'additionalProperties': None}, 'additionalProperties': None}, 'columnsSelection': ['Time', 'User', 'MainPipeline', 'TechnologicalSection', 'TechnologicalObject', 'ControlPoint', 'Object', 'SignalName', 'Event', 'Value', 'MessageType', 'Tag', 'Status'], 'availableMessageIds': [], 'isHistorical': False, 'additionalProperties': None}]]
[INFO] 2026-06-30 09:10:55.010000 websocket_client.py Обработанное сообщение от api-gateway: [3, {}, '1', 3, {'replyStatus': 200, 'replyErrors': None, 'replyContent': {'messagesInfo': []}}] полное сообщение в attach
FAILED
------------------------------ live log teardown -------------------------------
[WARNING] 2026-06-30 09:10:55.140000 websocket_client.py WebSocket соединение разорвано: sent 1000 (OK); then received 1000 (OK)
[INFO] 2026-06-30 09:10:55.142000 subprocess_client.py [RUN] Выполняю команду: ssh [MASKED]@10.7.49.206 "pgrep -f Playground"
[INFO] 2026-06-30 09:10:55.860000 subprocess_client.py [RUN] [OK] Команда выполнена успешно: pgrep -f Playground
[INFO] 2026-06-30 09:10:55.860000 imitator_manager.py [IMITATOR] [OK] Имитатор остановлен успешно
[INFO] 2026-06-30 09:10:55.860000 stand_setup_manager.py [TEARDOWN] [OK] Имитатор остановлен
[INFO] 2026-06-30 09:10:55.860000 signal_unit_conversion_manager.py [TEARDOWN] [SKIP] signal_unit_conversion_rules.json не изменялся
[INFO] 2026-06-30 09:10:55.860000 subprocess_client.py [RUN] Выполняю команду: ssh [MASKED]@10.7.49.206 "rm -rf /data/imitator/autotest_data/test_case_id_219_20260630T090206"
[INFO] 2026-06-30 09:10:56.560000 subprocess_client.py [RUN] [OK] Команда выполнена успешно: rm -rf /data/imitator/autotest_data/test_case_id_219_20260630T090206
[INFO] 2026-06-30 09:10:56.560000 subprocess_client.py [RUN] Выполняю команду: ssh [MASKED]@10.7.49.206 "if [ -d '/data/imitator/autotest_data/test_case_id_219_20260630T090206/data' ] && [ -f '/data/imitator/autotest_data/test_case_id_219_20260630T090206/rules.txt' ] && [ -f
[INFO] 2026-06-30 09:10:57.196000 subprocess_client.py [RUN] [OK] Команда выполнена успешно: if [ -d '/data/imitator/autotest_data/test_case_id_219_20260630T090206/data' ] && [ -f '/data/imitator/autotest_data/test_case_id_219_20260630T090206/rules.txt' ] && [ -f '/data/imitator/autotest_data
[INFO] 2026-06-30 09:10:57.196000 imitator_data_uploader.py [DATA UPLOADER] [OK] Тестовые данные успешно удалены с удаленного сервера: 10.7.49.206
---------------------------- live log sessionfinish ----------------------------
[INFO] 2026-06-30 09:10:57.872000 keycloak_clients.py Успешно получен access token
[INFO] 2026-06-30 09:10:57.873000 websocket_client.py Попытка подключения по wss: wss://web-app...ru/hubs/ldsClientHub/?access_token=...
[INFO] 2026-06-30 09:11:02.926000 websocket_client.py Websocket connected
[INFO] 2026-06-30 09:11:02.926000 lds_configurator_scenarios.py [TEARDOWN] Проверка статуса СОУ (tuId=238, «Тихорецк-Новороссийск-3-Автотест»)
[INFO] 2026-06-30 09:11:02.927000 websocket_client.py Сообщение подготовлено к отправке: [1, {}, '1', 'GetBasicInfoAdminRequest', [[]]]
[INFO] 2026-06-30 09:11:03.706000 websocket_client.py Обработанное сообщение от api-gateway: [3, {}, '1', 3, {'replyStatus': 200, 'replyErrors': None, 'replyContent': {'basicInfo': {'tus': [{'tuId': 231, 'tuName': 'Лопатино-Клин', 'mnId': 118, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 213, 'tuName': 'СИКН', 'mnId': 103, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 236, 'tuName': 'ЛТ-3', 'mnId': 121, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 226, полное сообщение в attach
[ERROR] 2026-06-30 09:11:12.971000 conftest.py [TEARDOWN] [ERROR] Ошибка LDS Configurator teardown для tuId=238
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/asyncio/queues.py", line 159, in get
    await getter
asyncio.exceptions.CancelledError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/asyncio/tasks.py", line 456, in wait_for
    return fut.result()
asyncio.exceptions.CancelledError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/builds/lds/lds-autotests/clients/websocket_client.py", line 254, in _receive_by
    msg = await asyncio.wait_for(self.recv_queue.get(), timeout=remaining)
  File "/usr/local/lib/python3.10/asyncio/tasks.py", line 458, in wait_for
    raise exceptions.TimeoutError() from exc
asyncio.exceptions.TimeoutError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/builds/lds/lds-autotests/utils/helpers/ws_test_utils.py", line 1094, in connect_and_get_msg
    payload = await ws_client.receive_by_invocation_id(invocation_id)
  File "/builds/lds/lds-autotests/clients/websocket_client.py", line 233, in receive_by_invocation_id
    return await self._receive_by(
  File "/builds/lds/lds-autotests/clients/websocket_client.py", line 257, in _receive_by
    raise asyncio.TimeoutError(f"Timeout при фильтрации сообщений {timeout:.1f} секунд")
asyncio.exceptions.TimeoutError: Timeout при фильтрации сообщений 10.0 секунд
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/builds/lds/lds-autotests/conftest.py", line 639, in _teardown
    await lds_configurator_scenarios.lds_configurator_teardown(client, tu_id, admin_tu_name)
  File "/builds/lds/lds-autotests/test_scenarios/lds_configurator_scenarios.py", line 173, in lds_configurator_teardown
    admin_reply = await lds_utils.get_basic_info_admin(ws_client, parser)
  File "/builds/lds/lds-autotests/utils/helpers/lds_configurator_utils.py", line 75, in get_basic_info_admin
    payload = await t_utils.connect_and_get_msg(ws_client, LdsCfgConst.GET_BASIC_INFO_ADMIN_REQUEST, [])
  File "/builds/lds/lds-autotests/utils/helpers/ws_test_utils.py", line 1097, in connect_and_get_msg
    fail(f"Не удалось получить сообщение типа: {ws_invoke_type}. Ошибка: {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)
Failed: Не удалось получить сообщение типа: GetBasicInfoAdminRequest. Ошибка: Timeout при фильтрации сообщений 10.0 секунд
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/builds/lds/lds-autotests/conftest.py", line 642, in _run_lds_configurator_teardown_if_needed
    _run_lds_infra(_teardown)
  File "/builds/lds/lds-autotests/conftest.py", line 589, in _run_lds_infra
    asyncio.run(coro_factory())
  File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/local/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
    return future.result()
  File "/builds/lds/lds-autotests/conftest.py", line 638, in _teardown
    async with WebSocketClient(ws_host, token) as client:
  File "/builds/lds/lds-autotests/clients/websocket_client.py", line 71, in __aexit__
    await self._recv_task
  File "/builds/lds/lds-autotests/clients/websocket_client.py", line 159, in _recv_loop
    attach(
  File "/builds/lds/lds-autotests/.venv/lib/python3.10/site-packages/allure_commons/_allure.py", line 200, in __call__
    plugin_manager.hook.attach_data(body=body, name=name, attachment_type=attachment_type, extension=extension)
  File "/builds/lds/lds-autotests/.venv/lib/python3.10/site-packages/pluggy/_hooks.py", line 512, in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
  File "/builds/lds/lds-autotests/.venv/lib/python3.10/site-packages/pluggy/_manager.py", line 120, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "/builds/lds/lds-autotests/.venv/lib/python3.10/site-packages/pluggy/_callers.py", line 167, in _multicall
    raise exception
  File "/builds/lds/lds-autotests/.venv/lib/python3.10/site-packages/pluggy/_callers.py", line 121, in _multicall
    res = hook_impl.function(*args)
  File "/builds/lds/lds-autotests/.venv/lib/python3.10/site-packages/allure_pytest/listener.py", line 252, in attach_data
    self.allure_logger.attach_data(uuid4(), body, name=name, attachment_type=attachment_type, extension=extension)
  File "/builds/lds/lds-autotests/.venv/lib/python3.10/site-packages/allure_commons/reporter.py", line 163, in attach_data
    file_name = self._attach(uuid, name=name, attachment_type=attachment_type,
  File "/builds/lds/lds-autotests/.venv/lib/python3.10/site-packages/allure_commons/reporter.py", line 153, in _attach
    self._items[last_uuid].attachments.append(attachment)
  File "/builds/lds/lds-autotests/.venv/lib/python3.10/site-packages/allure_commons/reporter.py", line 33, in __getitem__
    return self.thread_context.__getitem__(item)
KeyError: None
[INFO] 2026-06-30 09:11:12.976000 testops_client.py [TEARDOWN] [OK] Создан файл environment.properties в <_io.TextIOWrapper name='/builds/lds/lds-autotests/allure-results/environment.properties' mode='w' encoding='utf-8'>
[INFO] 2026-06-30 09:11:12.992000 testops_client.py [TEARDOWN] [OK] Allure-results архивирован в /builds/lds/lds-autotests/allure-results.tar.gz
[INFO] 2026-06-30 09:11:12.992000 conftest.py [INFO] [TEARDOWN] Uploading Allure results to TestOps
[INFO] 2026-06-30 09:11:27.977000 testops_client.py [TEARDOWN] [OK] UPLOAD MESSAGE: Файлы успешно загружены
=================================== FAILURES ===================================
_ TestSuiteScenarios.test_lds_status_initialization[Imitative_17_tn3_5km_113] __
self = <test_smoke.TestSuiteScenarios object at 0x7fa1c08a3dc0>
ws_client = <clients.websocket_client.WebSocketClient object at 0x7fa1b1e70e80>
config = SmokeSuiteConfig(suite_name='Imitative_17_tn3_5km_113', suite_data_id=219, archive_name='Imitative_17_tn3_5km_113.tar.... export_mt_mode_report_test=None), leaks=[], lds_status_report_section_names=[], main_page_info_unstationary_test=None)
    @pytest.mark.asyncio
    async def test_lds_status_initialization(self, ws_client: WebSocketClient, config: SmokeSuiteConfig) -> None:
        """[CommonScheme] Проверка режима работы СОУ: Инициализация"""
        tag = "CommonScheme"
        title = f"[{tag}] Проверка режима работы СОУ: 'Инициализация'. ЭФ: Схема"
        _apply_allure_markers(
            config.lds_status_initialization_test,
            tag,
            title,
            (
                f"Проверка режима работы СОУ на наборе данных {config.suite_name}, \n"
                f"на технологическом участке {config.tu_name}\n"
                f"Время проведения проверки : {config.lds_status_initialization_test.offset} мин.\n"
                "Подписка на сообщения типа: CommonScheme\n"
                "Ожидаемый режим работы СОУ: Инициализация"
            ),
        )
>       await scenarios.lds_status_initialization(ws_client, config)
tests/test_smoke.py:164:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_scenarios/smoke_scenarios.py:136: in lds_status_initialization
    ).is_not_empty()
utils/helpers/asserts.py:315: in is_not_empty
    self._handle_assertion(exc)
utils/helpers/asserts.py:237: in _handle_assertion
    raise exc
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <utils.helpers.asserts.StepCheck object at 0x7fa1b1e71a20>
    def is_not_empty(self) -> None:
        """Проверка на не пустое значение"""
        if self._actual is None:
            fail("Фактический результат должен быть заполнен при вызове is_not_empty()")

        msg = self._msg_builder.is_not_empty_msg(self._actual)

        try:
            with allure.step(msg):
>               assert_that(self._actual).described_as(msg).is_not_empty()
E               AssertionError: [Проверка наличия данных диагностических участков
E               Ожидаемый результат: diagnosticAreas не пустое
E               Фактический результат: количество элементов в diagnosticAreas = 0] Expected not empty, but was empty.
utils/helpers/asserts.py:313: AssertionError
------------------------------ Captured log setup ------------------------------
INFO     root:keycloak_clients.py:118 Успешно получен access token
INFO     clients.websocket_client:websocket_client.py:106 Попытка подключения по wss: wss://web-app...ru/hubs/ldsClientHub/?access_token=...
INFO     clients.websocket_client:websocket_client.py:117 Websocket connected
------------------------------ Captured log call -------------------------------
INFO     clients.websocket_client:websocket_client.py:191 Сообщение подготовлено к отправке: [1, {}, '1', 'SubscribeCommonSchemeRequest', [{'tuId': 238, 'additionalProperties': None}]]
INFO     clients.websocket_client:websocket_client.py:158 Обработанное сообщение от api-gateway: [3, {}, '1', 3, {'replyStatus': 200, 'replyErrors': None}] полное сообщение в attach
INFO     clients.websocket_client:websocket_client.py:158 Обработанное сообщение от api-gateway: [1, {}, None, 'CommonSchemeContent', [{'replyStatus': 200, 'replyErrors': None, 'replyContent': {'tuId': 238, 'flowAreas': [], 'linearParts': []}}], []] полное сообщение в attach
---------------------------- Captured log teardown -----------------------------
WARNING  clients.websocket_client:websocket_client.py:152 WebSocket соединение разорвано: sent 1000 (OK); then received 1000 (OK)
_ TestSuiteScenarios.test_lds_status_init_in_journal[Imitative_17_tn3_5km_113] _
self = <test_smoke.TestSuiteScenarios object at 0x7fa1c0916cb0>
ws_client = <clients.websocket_client.WebSocketClient object at 0x7fa1b9cc4d60>
config = SmokeSuiteConfig(suite_name='Imitative_17_tn3_5km_113', suite_data_id=219, archive_name='Imitative_17_tn3_5km_113.tar.... export_mt_mode_report_test=None), leaks=[], lds_status_report_section_names=[], main_page_info_unstationary_test=None)
imitator_start_time = datetime.datetime(2026, 6, 30, 9, 3, 46, 557705)
    @pytest.mark.asyncio
    async def test_lds_status_init_in_journal(
        self, ws_client: WebSocketClient, config: SmokeSuiteConfig, imitator_start_time: datetime
    ) -> None:
        """[MessagesInfo] Проверка записи в журнале о входе СОУ в Инициализацию"""
        tag = "MessagesInfo"
        title = f"[{tag}] Проверка записи в журнале: СОУ в Инициализации. ЭФ: Журнал. Реальное время"
        description = (
            f"Проверка записи в журнале о входе СОУ в Инициализацию на наборе данных {config.suite_name}, \n"
            f"на технологическом участке {config.tu_name}\n"
            f"Время проведения проверки: {config.lds_status_init_in_journal_test.offset} мин.\n"
            "Синхронный запрос типа: MessagesInfo с фильтром messageTypes=LDS_STATUS\n"
        )
        _apply_allure_markers(config.lds_status_init_in_journal_test, tag, title, description)
>       await scenarios.lds_status_init_in_journal(ws_client, config, imitator_start_time)
tests/test_smoke.py:199:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
test_scenarios/smoke_scenarios.py:430: in lds_status_init_in_journal
    StepCheck("Проверка наличия сообщений в журнале", "messagesInfo").actual(messages_info).is_not_empty()
utils/helpers/asserts.py:315: in is_not_empty
    self._handle_assertion(exc)
utils/helpers/asserts.py:237: in _handle_assertion
    raise exc
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <utils.helpers.asserts.StepCheck object at 0x7fa1c049bc40>
    def is_not_empty(self) -> None:
        """Проверка на не пустое значение"""
        if self._actual is None:
            fail("Фактический результат должен быть заполнен при вызове is_not_empty()")

        msg = self._msg_builder.is_not_empty_msg(self._actual)

        try:
            with allure.step(msg):
>               assert_that(self._actual).described_as(msg).is_not_empty()
E               AssertionError: [Проверка наличия сообщений в журнале
E               Ожидаемый результат: messagesInfo не пустое
E               Фактический результат: количество элементов в messagesInfo = 0] Expected not empty, but was empty.
utils/helpers/asserts.py:313: AssertionError
------------------------------ Captured log setup ------------------------------
INFO     root:keycloak_clients.py:118 Успешно получен access token
INFO     clients.websocket_client:websocket_client.py:106 Попытка подключения по wss: wss://web-app.lds-test1.tn.tngrp.ru/hubs/ldsClientHub/?access_token=...
INFO     clients.websocket_client:websocket_client.py:117 Websocket connected
------------------------------ Captured log call -------------------------------
INFO     clients.websocket_client:websocket_client.py:191 Сообщение подготовлено к отправке: [1, {}, '1', 'GetMessagesRequest', [{'pagination': {'limit': 10, 'id': None, 'direction': 3, 'eventTime': None, 'additionalProperties': None}, 'periodTime': None, 'sorting': {'sortingParam': 1, 'sortingType': 2, 'additionalProperties': None}, 'search': {'query': '', 'additionalProperties': None}, 'filtering': {'priorities': 0, 'messageTypes': 8, 'userActions': 0, 'objects': {'tuId': 238, 'objectIds': [], 'objectTypes': 0, 'additionalProperties': None}, 'additionalProperties': None}, 'columnsSelection': ['Time', 'User', 'MainPipeline', 'TechnologicalSection', 'TechnologicalObject', 'ControlPoint', 'Object', 'SignalName', 'Event', 'Value', 'MessageType', 'Tag', 'Status'], 'availableMessageIds': [], 'isHistorical': False, 'additionalProperties': None}]]
INFO     clients.websocket_client:websocket_client.py:158 Обработанное сообщение от api-gateway: [3, {}, '1', 3, {'replyStatus': 200, 'replyErrors': None, 'replyContent': {'messagesInfo': []}}] полное сообщение в attach
---------------------------- Captured log teardown -----------------------------
WARNING  clients.websocket_client:websocket_client.py:152 WebSocket соединение разорвано: sent 1000 (OK); then received 1000 (OK)
INFO     root:subprocess_client.py:64 [RUN] Выполняю команду: ssh [MASKED]@10.7.49.206 "pgrep -f Playground"
INFO     root:subprocess_client.py:127 [RUN] [OK] Команда выполнена успешно: pgrep -f Playground
INFO     infra.imitator_manager:imitator_manager.py:92 [IMITATOR] [OK] Имитатор остановлен успешно
INFO     infra.stand_setup_manager:stand_setup_manager.py:170 [TEARDOWN] [OK] Имитатор остановлен
INFO     infra.signal_unit_conversion_manager:signal_unit_conversion_manager.py:73 [TEARDOWN] [SKIP] signal_unit_conversion_rules.json не изменялся
INFO     root:subprocess_client.py:64 [RUN] Выполняю команду: ssh [MASKED]@10.7.49.206 "rm -rf /data/imitator/autotest_data/test_case_id_219_20260630T090206"
INFO     root:subprocess_client.py:127 [RUN] [OK] Команда выполнена успешно: rm -rf /data/imitator/autotest_data/test_case_id_219_20260630T090206
INFO     root:subprocess_client.py:64 [RUN] Выполняю команду: ssh [MASKED]@10.7.49.206 "if [ -d '/data/imitator/autotest_data/test_case_id_219_20260630T090206/data' ] && [ -f '/data/imitator/autotest_data/test_case_id_219_20260630T090206/rules.txt' ] && [ -f
INFO     root:subprocess_client.py:127 [RUN] [OK] Команда выполнена успешно: if [ -d '/data/imitator/autotest_data/test_case_id_219_20260630T090206/data' ] && [ -f '/data/imitator/autotest_data/test_case_id_219_20260630T090206/rules.txt' ] && [ -f '/data/imitator/autotest_data
INFO     root:imitator_data_uploader.py:91 [DATA UPLOADER] [OK] Тестовые данные успешно удалены с удаленного сервера: 10.7.49.206
=========================== short test summary info ============================
FAILED tests/test_smoke.py::TestSuiteScenarios::test_lds_status_initialization[Imitative_17_tn3_5km_113] - AssertionError: [Проверка наличия данных диагностических участков
Ожидаемый результат: diagnosticAreas не пустое
Фактический результат: количество элементов в diagnosticAreas = 0] Expected not empty, but was empty.
FAILED tests/test_smoke.py::TestSuiteScenarios::test_lds_status_init_in_journal[Imitative_17_tn3_5km_113] - AssertionError: [Проверка наличия сообщений в журнале
Ожидаемый результат: messagesInfo не пустое
Фактический результат: количество элементов в messagesInfo = 0] Expected not empty, but was empty.
=========== 2 failed, 2 passed, 922 deselected in 561.55s (0:09:21) ============