Краткая версия: как лучше всего автоматизировать тестирование совместимости с большим количеством сторонних программ?
Детали:
Я разрабатываю программу, основная функция которой - взаимодействие с различными программами музыкального проигрывателя через соответствующие интерфейсы RPC. . Сам RPC обычно выполняется либо через D-Bus, либо через некоторую клиентскую библиотеку, специфичную для конкретного игрока. Поскольку каждый музыкальный проигрыватель имеет свой собственный уникальный интерфейс RPC, моей программе требуется специальный код для обработки каждого из них.
Тестирование всего этого кода становится для меня все большей проблемой. По последним подсчетам, существует пятнадцать (!) Различных музыкальных плееров, с которыми моя программа умеет общаться, и детали интерфейса могут варьироваться от одной версии плеера к другой. Тестирование моей программы вручную на последней версии каждого из поддерживаемых мной плееров, а также на нескольких более старых версиях утомительно и подвержено ошибкам, поэтому я ищу способ максимально автоматизировать это. .
Сами тестовые примеры не являются проблемой; это просто вопрос вызова последовательности функций в интерфейсе RPC игрока и проверки возвращаемых значений и / или асинхронных обратных вызовов для ожидаемого результата. Нет, проблема в наличии фреймворка для автоматического запуска тестов.
Вот проблемы, которые я вижу:
Каждый проигрыватель поддерживает постоянное состояние, обычно в виде файлов точек в домашнем каталоге пользователя. Состояние состоит из таких вещей, как музыкальная библиотека, списки воспроизведения и т. Д. Эти файлы необходимо вернуть в известное начальное состояние перед каждым тестом. (Удалить его полностью - не всегда вариант, поскольку в этом случае проигрыватели с графическим интерфейсом пользователя представят мастер настройки при следующем запуске вместо обычного запуска.)
Эти начальные состояния могут быть частично динамическими. Например, музыкальная библиотека будет содержать полные пути к музыкальным файлам внутри нее, но пути к фактическим «музыкальным» файлам, используемым для тестирования, будут различаться от машины к машине и не будут известны до времени выполнения.
Игроки для тестирования, вероятно, будут установлены в нестандартных местах, которые будут отличаться от системы к системе, чтобы несколько версий каждой из них были установлены параллельно. Фреймворку, вероятно, потребуется знать, с каким проигрывателем и какой версией он тестируется, прежде чем он будет запущен, чтобы он мог соответствующим образом инициализировать файлы состояния проигрывателя.
Поскольку у меня нет никакого контроля над разработкой музыкальных плееров, с которыми взаимодействует моя программа, я не могу изменить их поведение, чтобы облегчить мне тестирование с ними.
Что я хотел бы сделать, так это настроить виртуальную машину с кучей разных игроков (и кучей разных версий каждого проигрывателя), а затем иметь возможность автоматически тестировать свою программу на каждом из них. В идеале, кто-то другой мог бы настроить свою собственную виртуальную машину для запуска тестов в себе, по-видимому, нужно только сообщить тестовой среде, какие плееры и где установлены.
Итак, как лучше всего автоматизировать тестирование совместимости с большим количеством (несколькими десятками) сторонних программ?
Если это влияет на рекомендации, моя программа написана на Python, и я использую автоинструменты GNU в качестве среды сборки.