WEB UI на Python для запуска скриптов по генерации маршрутов Багажа
Find a file
2025-12-22 21:15:18 +03:00
docs Первая версия. Требует пересборки путей в папке src 2025-12-22 20:18:24 +03:00
src Первая версия. Требует пересборки путей в папке src 2025-12-22 20:18:24 +03:00
.dockerignore Первая версия. Требует пересборки путей в папке src 2025-12-22 20:18:24 +03:00
.gitignore Первая версия. Требует пересборки путей в папке src 2025-12-22 20:18:24 +03:00
docker-compose.yml Фикс файлов сборки из за переноса файлов в папку src 2025-12-22 21:15:18 +03:00
Dockerfile Фикс файлов сборки из за переноса файлов в папку src 2025-12-22 21:15:18 +03:00
README.md Первая версия. Требует пересборки путей в папке src 2025-12-22 20:18:24 +03:00
requirements.txt Первая версия. Требует пересборки путей в папке src 2025-12-22 20:18:24 +03:00

VKO Test Scripts - Web UI

Веб-интерфейс на Flask для запуска тестовых сценариев генерации маршрутов отслеживания багажа.

Возможности

  • Два режима запуска:
    • Одиночный запуск: Быстрый запуск любого скрипта с указанием параметров.
    • Пакетный запуск: Создание, сохранение и запуск сложных планов, состоящих из нескольких сценариев.
  • Динамическое обнаружение скриптов: Новые файлы .py, добавленные в папку scripts, автоматически появляются в UI.
  • Централизованная конфигурация: Все настройки (URL, подключения к БД) и определения скриптов находятся в одном файле — config.yaml.
  • Настройка параметров запуска:
    • Дата, номер рейса, номер LPN (с автогенерацией), направление.
    • Для пакетного режима: количество повторов и распределение запусков по времени.
  • Сохранение и загрузка планов: Пакетные сценарии можно сохранять в виде .json файлов и загружать их.
  • Отображение логов: Результаты выполнения скриптов выводятся на страницу.

Установка и запуск

  1. Убедитесь, что у вас установлен Python 3.10+.

  2. Настройте виртуальное окружение и установите зависимости:

    # Создать виртуальное окружение
    python -m venv venv
    
    # Активировать его
    # Windows
    venv\Scripts\activate
    # macOS/Linux
    # source venv/bin/activate
    
    # Установить зависимости
    pip install -r requirements.txt
    
  3. (Опционально) Перед первым запуском просмотрите и при необходимости отредактируйте файл config.yaml.

  4. Запустите Flask-приложение:

    python app.py
    
  5. Откройте браузер и перейдите по адресу: http://localhost:5000

Конфигурация (config.yaml)

Это центральный файл для всех настроек.

  • settings: Секция содержит глобальные параметры, такие как URL-адреса API и строки подключения к базам данных.
  • scripts: Секция определяет доступные для запуска скрипты.
    • Ключ (например, vko_normal_bag): Уникальный идентификатор скрипта.
    • title: Название, которое отображается в выпадающих списках в UI.
    • module: Имя файла скрипта в папке scripts (без расширения .py).
    • function: Имя функции внутри модуля, которая будет вызвана.

Важно! При добавлении нового .py файла в папку scripts приложение автоматически добавит его в config.yaml при следующем запуске. Однако вам может понадобиться вручную указать правильное имя function для этого нового скрипта.

Использование

Одиночный запуск

  1. Перейдите на вкладку "Одиночный запуск".
  2. Выберите скрипт из выпадающего списка.
  3. Укажите параметры (или оставьте значения по умолчанию).
  4. Нажмите "Запустить скрипт".

Пакетный запуск

  1. Перейдите на вкладку "Пакетный запуск".
  2. Для создания нового плана:
    • Нажимайте "Добавить строку" для каждого шага сценария.
    • В каждой строке выберите скрипт и задайте его параметры: рейс, направление, количество повторов и общее время выполнения.
  3. Для сохранения плана:
    • Введите имя для файла в поле "Имя плана для сохранения".
    • Нажмите кнопку "Сохранить". План будет сохранен в папку docs.
  4. Для загрузки плана:
    • Выберите нужный план из выпадающего списка. Он загрузится автоматически.
  5. Для запуска:
    • Нажмите "Запустить пакет".

Структура файлов

  • app.py: Основное Flask-приложение, которое обслуживает UI и динамически запускает скрипты.
  • config.yaml: Центральный файл конфигурации.
  • templates/index.html: HTML-шаблон веб-интерфейса.
  • scripts/: Папка для хранения всех тестовых Python-скриптов.
  • SvoTestTools.py: Модуль со вспомогательными функциями, используемыми в тестах.
  • docs/: Папка для сохранения и загрузки планов пакетного запуска в формате .json.
  • requirements.txt: Список зависимостей Python.

Описание тестовых сценариев

1. Сценарий vko_normal_bag_bpi (Нормальная обработка багажа)

  • Назначение: Эмуляция стандартного пути багажа с имитацией ошибки (потеря трекинга) и последующего восстановления.
  • Ключевые шаги:
    1. Регистрация: Отправляется BSM-сообщение, багаж регистрируется в системе (RegisterPackage) на ПЛК01.
    2. Досмотр: Багаж проходит все уровни досмотра (1, 2, 3) и радиационный контроль. На каждом этапе отправляется PackageReport с результатом "чисто".
    3. Имитация сбоя: Отправляется сообщение о потере трекинга (DeregisterPackage с причиной MISSING).
    4. Восстановление: Сразу после "потери" отправляется сообщение о нахождении "неизвестного" багажа (RegisterPackage с причиной Unexpected).
    5. Сортировка: Багаж отправляется на сортировщик и успешно сортируется в нужный выход.

2. Сценарий vko_ebs_bpi (Ранний багаж и хранение)

  • Назначение: Тестирование системы раннего хранения багажа (Early Baggage Storage, EBS).
  • Ключевые шаги:
    1. Активация EBS: Перед началом в систему отправляются сообщения о готовности и опустошении всех линий EBS.
    2. Регистрация и досмотр: Багаж регистрируется и проходит все уровни досмотра, как в нормальном сценарии.
    3. Отправка на хранение: Система направляет багаж на одну из линий EBS, что эмулируется сообщением DeregisterPackage в соответствующей зоне.
    4. Хранение: Скрипт ожидает 120 секунд, имитируя нахождение багажа на хранении.
    5. Выгрузка из EBS: По истечении времени отправляются сообщения для активации выгрузки со всех линий EBS.
    6. Сортировка: "Выгруженный" багаж отправляется на сортировщик и обрабатывается штатно.

3. Сценарий vko_mcs_bpi (Ручная кодировка)

  • Назначение: Тестирование сценария, когда багажная бирка не может быть прочитана автоматически (No-Read), и багаж отправляется на станцию ручной кодировки (Manual Coding Station, MCS).
  • Ключевые шаги:
    1. BSM и регистрация: Стандартная регистрация багажа.
    2. Имитация No-Read: На этапе считывания бирки (ATR PackageReport) вместо реального LPN отправляется заглушка "??????????".
    3. Досмотр: Багаж проходит досмотр, но система не знает его LPN.
    4. Перенаправление на MCS: Сортировщик, не сумев определить направление, отправляет багаж на специальный выход, ведущий к MCS (выход 93).
    5. Обработка на MCS:
      • Скрипт эмулирует прибытие багажа на станцию MCS.
      • Вызываются API-методы MCS: mcs/handle (оператор "взял" багаж в работу), mcs/bag (оператор сканирует LPN вручную), mcs/bag (оператор сохраняет LPN, "привязывая" его к багажу).
    6. Финальная сортировка: После ручной кодировки багаж снова отправляется на сортировщик и на этот раз успешно сортируется, так как его LPN теперь известен системе.

4. Сценарий vko_mir_bpi (Ручной досмотр)

  • Назначение: Тестирование сценария, когда багаж не проходит один из уровней автоматического досмотра и отправляется в комнату ручного досмотра (Manual Inspection Room, MIR).
  • Ключевые шаги:
    1. Регистрация и досмотр (сбой): Багаж регистрируется. На 1-м уровне досмотра отправляется отчет с результатом "загрязненный" (explosive_result = 2).
    2. Маршрутизация на досмотр: Багаж проходит остальные уровни и, согласно результатам, система направляет его в зону ручного досмотра (КРД ВВЛ).
    3. Обработка в MIR:
      • Эмулируется прибытие багажа в КРД и его "выбытие" из автоматической системы (DeregisterPackage).
      • Вызываются API-методы MIR: mir/handle (оператор "берет" багаж), mir/deregister (багаж удаляется из системы для ручного досмотра).
    4. "Очистка" багажа: После "ручной проверки" вызывается API recheck, который устанавливает багажу статус "чистый" (CLEAR).
    5. Возврат в систему: Багаж снова регистрируется в системе через API mir/register, как будто он выехал из комнаты досмотра.
    6. Финальная сортировка: Багаж успешно отправляется на сортировщик.