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

В этом посте я описываю два метода автоматизированного тестирования, которые я использую при написании кода, взаимодействующего с удаленными системами.

Использование Dockertest для тестирования взаимодействия с популярными дистрибутивами программного обеспечения.

Dockertest — фантастическая библиотека для программного запуска контейнеров Docker из тестового кода. В качестве простого примера предположим, что нашему коду необходимо взаимодействовать с сервером Redis. Вместо того, чтобы писать код/скрипты для запуска экземпляра Redis и сброса его состояния при каждом тестовом вызове, что часто может привести к хрупкому, непереносимому коду, мы можем использовать вездесущие установки Docker, которые можно найти на большинстве машин разработки и CI, для запуска выделенного контейнера Redis. на время наших испытаний.

Тестирование отказоустойчивости с помощью Toxiproxy

Toxiproxy — это прокси-сервис TCP, которым можно программно управлять для имитации различных сетевых условий. Это бесценный инструмент для тестирования распределенных систем, таких как серверы IoT, которые должны работать в непредсказуемых и плохих сетевых условиях.

В следующем примере мы тестируем службу gRPC в различных сетевых условиях.