Я унаследовал систему, состоящую из пары демонов, которые асинхронно обрабатывают сообщения.Я пытаюсь найти простой способ внедрить интеграционное тестирование в эту систему с минимальным влиянием / риском на существующие программы.Вот очень упрощенный обзор их обязанностей:
Процесс 1 опрашивает очередь сообщений и вставляет строку в БД для каждой очереди, которую он удаляет.
Процесс 2 опрашивает в БД строки, вставленные в Процесс 1, выполняет некоторые вычисления, а затем помещает файл в каталог на хосте и отправляет электронное письмо.
Этипроцессы довольно старые и сложные, и я сильно склонен избегать их изменения каким-либо образом.То, что я хотел бы сделать, это поместить каждый из них в контейнер, а также выстроить зависимости (очередь, БД, почтовый сервер) в других контейнерах.Эта часть проста, но я не уверен в том, что это лучший способ организовать эти тесты.Поскольку эти процессы потребляют и генерируют выходные данные асинхронно, мне нужно будет опросить или дождаться ожидаемого результата (отправка почты, создание файла).
Обычно я просто пишу серию тестов в одном наборе тестов моего языка.по выбору (Java, Go и т. д.) и возложить хуки setUp / tearDown за возврат среды в желаемое состояние.Но так как эти процессы имеют большое внутреннее состояние, я боюсь, что не могу успешно «очиститься» после каждого отдельного теста.Это может быть проблемой, если, например, одному тесту не удалось сгенерировать желаемый результат в определенный период времени, поэтому я пометил его как неудачный, но последующий тест был ошибочно помечен как пройденный, потому что исходный тестовый пример действительно что-то выдал (хотя и намного медленнее, чем предполагалось), что было ошибочно приписано последующему испытанию.По этим причинам я чувствую, что мне нужно воссоздавать мир между каждым тестом.
Чтобы сделать это, я вижу только следующие варианты:
- Использование сценария оболочки для фактического запускамои тесты - когда он вызывает контейнеры, выполняет один тестовый файл, а затем завершает мои контейнеры для каждого теста.
- Следуйте моему обычному шаблону setUp / tearDown в моей существующей тестовой среде, но вызывайте
docker
для завершения и запуска контейнеров между каждым тестом.
Я пропускаю другой вариант?Существует ли какая-либо существующая структура или шаблон, используемый для такого рода тестирования?