Найдите мультпроцессный тестовый фреймворк для Linux/Windows (обработка кода завершения, сигналов, стандартного ввода/вывода, файлов, ipc, событий оконной системы).

Вопрос или проблема

(Я имею в виду тест-драйверы (программное обеспечение), а не тестирование драйвера устройства.)

Цель:

Тестировать любые командные/GUI программы на уровне процессов на локальной машине. (поддержка или масштабирование в облаке не требуется)
Что-то вроде Selenium или TestCafe в веб-тестировании, но для нативных программ.

Случаи использования:
  1. Запуск неинтерактивной командной программы с аргументами.
    • Проверка кода выхода/сигнала на успешность.
    • Фильтрация stdout/stderr для определения успеха теста.
    • Чтение выходных файлов для определения успеха теста.
  2. Запуск интерактивной GUI программы с аргументами и доменным сокетом fd.
    • Ожидание (проверка) статуса путем чтения живого потока stdout/stderr и/или чтения через IPC.
    • Отправка событий оконной системы и/или пакетов IPC для управления её поведением.
    • Проверка выводов, как пункт 1.
  3. Linux в первую очередь. Поддержка Windows желательна, или нужно искать другой фреймворк.
  4. Нет сложных зависимостей между тестами, если можно управлять их последовательным или параллельным выполнением (на уровне пакетов тестов или отдельных запусков).

Ожидаемые функции на Linux:

  • Запуск любой программы и получение кода выхода/сигнала/stdout и других файлов.
  • Запуск или выполнение кода для подготовки теста и очистки/проверки.
  • Получение в реальном времени вывода stdout/stderr запущенной программы.
  • Двусторонняя связь с запущенной программой через пакетный нативный IPC (например, AF_UNIX SOCK_DGRAM).
  • Отправка событий оконной системы (x11, wayland) запущенной программе как ввода.
  • Опционально поддержка Windows (с IPC, win32 WM/события ввода), или поиск другого фреймворка.

Альтернатива

Найти кроссплатформенный фреймворк для работы с подпроцессами, чтобы обрабатывать сложные детали подпроцессов, TTY и IPC. Так чтобы я мог легко построить тест-драйвер на его основе.
Фреймворки рабочих процессов, такие как chromium recipe-py, кажутся слишком запутанными (и плохо документированными) для использования в случае тест-драйвера.

Ответ или решение

Обзор

Создание многофункционального тестового драйвера для нативных программ на Linux с возможностью расширения на Windows — задача, требующая тщательного подхода к процессам, сигналам, вводу-выводу и обработке событий. Рассмотрим подходящие фреймворки и инструменты для достижения этих целей.

Рекомендации для Linux

  1. Автоматизация процессов с помощью Python:
    Использование Python для автоматизации процессов широко распространено благодаря его мощным библиотекам:

    • subprocess: предоставляет интерфейс для запуска программ и взаимодействия с их вводом-выводом и кодами выхода.
    • pyautogui: полезна для симуляции событий взаимодействия с окном на графическом уровне.
    • PyInvoke: для организации задач автоматизации и управления процессами.
  2. IPC и обработка сигналов:
    Для межпроцессного взаимодействия стоит рассмотреть использование UNIX-сокетов, что поддерживается такими Python-библиотеками, как socket (для работы с AF_UNIX SOCK_DGRAM).

  3. Обработка оконных событий:
    Для отправки событий оконной системы (например, X11, Wayland) можно использовать:

    • xlib: через Python можно применять библиотеку python-xlib для управления событиями X11.
    • Для Wayland — изучить возможности использования wlroots или подобного стека через Python.

Возможности расширения на Windows

Для Windows можно дополнительно рассмотреть:

  • PyWin32: предоставляет доступ к API Win32, включая управление окнами и отправку событий.
  • pywinauto: для автоматизации взаимодействия с GUI на Windows.

Альтернативные решения

Для создания кросс-платформенных тестовых драйверов, handle сложные детали работы с subprocess, TTY и IPC можно использовать:

  • Node.js и библиотека child_process: для запуска subprocess и взаимодействия с ними.
  • Nim с пакетами, такими как osproc, который обеспечивает управление subprocess с кросс-платформенной поддержкой сложной логики.

Заключение

Для успешного тестирования нативных программ на уровне процессов важно использовать правильные инструменты для управления subprocess и взаимодействия с графическими интерфейсами. Рассмотренные решения обеспечивают гибкость и масштабируемость, что позволяет эффективно тестировать cmdline и GUI программы. Opтимальная комбинация инструментов поможет построить систему тестирования, соответствующую вашим требованиям на Linux и, потенциально, Windows.

Оцените материал
Добавить комментарий

Капча загружается...