Когда мне следует выполнять модульные и интеграционные тесты в Dockerfile с установленной Flask? - PullRequest
0 голосов
/ 11 июня 2019

Я установил новый сервер Flask Python и создал Dockerfile со всеми моими кодами.Я написал несколько модульных тестов и выполняю их локально.Когда я должен выполнить их, если я хочу реализовать CI / CD?

Мне также нужно написать интеграционные тесты (чтобы проверить, правильно ли я запрашиваю базу данных, чтобы понять, правильно ли выставлена ​​конечная точка и т. Д.), Когда мне следует выполнять их на CI / CD?

Я думал выполнить их во время docker build, чтобы поместить выполнение тестов в Dockerfile.Это правильно?

1 Ответ

1 голос
/ 11 июня 2019

Модульные тесты: За пределами Docker, перед тем как запустить docker build. В вашем конвейере CI, после проверки исходного кода и выполнения любых шагов установки, таких как установка зависимостей пакетов.

Интеграционные тесты: Запущен снаружи Docker; в зависимости от того, насколько сложна ваша настройка, либо в конце конвейера CI, либо как часть конвейера CD.

Это предполагает настоящий «модульный тест», который не имеет внешних зависимостей; это зависит только от кода приложения / библиотеки, и там, где ему нужны такие вещи, как базы данных, он либо копирует эти зависимости, либо использует что-то вроде встроенного SQLite. (Некоторые фреймворки особенно плохи в этом рабочем процессе и делают невозможным запуск приложения вообще, если база данных недоступна. Но Rails не работает на Python.)

Выполнение модульных тестов в Dockerfile продлится до полуночи, у вас произойдет перебои в работе, и либо ваше быстрое исправление, которое вернет сайт на прежний уровень, приведет к сбою одного неясного модульного теста, либо вы не можете ждать 5- минутное время цикла для запуска всего пакета юнит-тестов. Поскольку в ваших модульных тестах не должно быть зависимостей от среды Docker-or-not, я бы просто запустил их вне Docker.

Зачастую вы можете создать достаточно инфраструктуры, чтобы запускать ваше приложение «по-настоящему» с помощью пары docker run команд или простой настройки Docker Compose. В этом случае имеет смысл запустить интеграционный тест ближе к концу конвейера CI. При более сложной настройке (возможно, с участием Kubernetes) вам может потребоваться развернуть ее в тестовой среде, и если у вас есть отдельные инструменты CI и CD, это превратится в «тестовое развертывание», «интеграционный тест», «предварительная подготовка». развернуть».

Как разработчик, я считаю, что с инструментами, не входящими в Docker, управлять ими значительно проще, чем инструментами, которые работают только в Docker. (Я не подписываюсь на философию «любой двоичный файл, кроме /usr/bin/docker, это плохо».) Я бы предпочел просто запустить pytest или curl, чем помнить 4-строчный вызов docker run для выполнения какой-то конкретной задачи. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...