Python: макетирование Кафки для интеграционных тестов

Я немного новичок в интеграционных тестах. У меня есть две службы, которые передают сообщения друг другу с помощью Kafka. Однако, для моих интеграционных тестов я не обязательно хочу запускать Kafka для запуска своих тестов. Есть ли стандартный способ издеваться над Кафкой? Или это что-то, что мне нужно создать самому, какая-то очередь MockKafka и патч, где это уместно в приложении? Кроме того, это в нарушение того, что должен делать интеграционный тест? Я полагаю, что я не тестирую какие-либо функциональные возможности Kafka, и там ради интеграционных тестов следует их отключить.

1 ответ

Издевательство над самой Kafka нецелесообразно, поскольку его протокол не является общим стандартом, поддерживаемым RFC (в отличие от HTTP), и имеет только одну реализацию.

На уровне модульного тестирования вы можете абстрагироваться и имитировать функции, требующие Kafka, но это не ваш случай. Вам нужен интеграционный тест, поэтому, скорее всего, вам придется задействовать настоящий Kafka для тестирования реальных взаимодействий.

Чтобы задействовать настоящий Kafka с минимальными усилиями, я бы использовал специальный автономный образ Docker (например, этот: https://github.com/up9inc/async-ms-demo/tree/main/kafka). Постройте его и запустите с открытым портом 9092.

Для интеграционного тестирования с Kafka мой принцип - не имитировать сам Kafka, а имитировать «нежелательные / несвязанные» службы с помощью того, что я называю «Mock Actor».

Подход «Mock Actors» подробно описан здесь: https://up9.com/mock-actor-approach-for-kafka (статья написана мной). Существует также инструмент, реализующий эти функции (http://mockintosh.io).

Другие вопросы по тегам