Инструмент тестирования инфраструктуры на основе Docker
В настоящее время я пытаюсь перенести инфраструктуру на основе виртуальной машины на Docker и воспользоваться возможностью добавить тестирование поведения в эту инфраструктуру. Поэтому я стремлюсь, чтобы все изменения, которые я вносил в конфигурацию базовой системы, в коде (например, в Dockerfile), в git-версии и (в идеальном мире) каждое изменение должно иметь проверяемый эффект.
Примеры для тестов, которые я хочу сделать:
- Если я добавлю учетную запись пользователя и правило разрешений в свой контейнер "postgres", тогда пользователь "x" сможет получить доступ (только) к базе данных "y" (только) из контейнера "web".
- Если я изменю конфигурацию постфикса, такую как изменение вставки, тогда пользователи-пользователи должны пройти аутентификацию, но пользователи системы могут отправлять электронную почту без аутентификации.
- Если я изменю конфигурацию Apache, например, вставку, то среднее время отклика станет меньше х мс.
Вещи, которые я на самом деле не хочу проверять (не больно, если бы я мог):
- Файл х должен присутствовать.
- Сервис у должен быть установлен.
Мне было интересно, каков хороший / распространенный подход для тестирования инфраструктуры, такой как описанный выше, и был бы рад получить любой совет или услышать лучшие практики. (Я обнаружил серверную спецификацию, но мне показалось, что это будет скорее поддержка второго типа тестов; во всех приведенных мною примерах скорее проверяется состояние системы, чем поведение системы.)
1 ответ
В одном "поведенческом тестировании" вы смешиваете различные идеи. Тестирование безопасности (доступ...), мониторинг приложений (время отклика...), соответствие инфраструктуры (файл / сервис должен присутствовать...).
Поскольку вы собираетесь использовать инфраструктуру как версионный код, вы должны сначала протестировать ее, как любой код, и серверная спецификация - хороший инструмент для этого. Я лично предпочитаю testinfra, эквивалентную среду на основе Python. Есть и другие, такие как goss, robotframe work, inspec... Там вы можете протестировать множество вещей: прослушивание порта 80, запуск службы, файл конфигурации существует. И еще, поскольку вы можете подключить любой фрагмент кода, вы можете прочитать файл конфигурации и проверить, есть ли у пользователя X доступ к базе данных Y, но не к базе данных Z.
Что касается времени отклика, то это тема мониторинга, если речь идет о реальной среде, или нагрузочное тестирование, если речь идет о тестировании перед началом работы. Существует множество возможностей для мониторинга, таких как nagios, zabbix... Для нагрузочного тестирования я пойду на саранчу.