2015-07-03 2 views
14

Я новичок в Docker и читаю на Докере. Это отличный способ проверить системы в автономной и воспроизводимой стандартизованной конфигурации (когда все сделано правильно).Запуск тестов, как обычно, против докерных контейнеров или докеризационных испытаний?

Однако, во всех вещах, которые я читал, похоже, слишком много внимания уделяется тому, как тестирование должно происходить с контейнерами докеров. Докер используется, чтобы «содержать» инфраструктуру и приложение (код) для легкого тестирования (а также развертывания). Но иногда тестовые кодовые базы являются большими и не слишком простыми. И можно получить тестовую кодовую базу для тестов API, другую для пользовательского интерфейса и т. Д.

Какова или должна быть (как определено в какой-то момент) стандартная практика тестирования контейнеров-докеров/развертывания ваших приложений/инфраструктуры? В случае, если:

  • тестовый код будет развернут старым традиционным способом, так как хранилище файлов вы тянете где-то и просто запустите на Дженкинс сервер/ведомый или свой локальный хост для DEV/QA тестирования/отладки, с тестами таргетинга приложений в контейнере для докеров?
  • присоединяет всю базу тестового кода как самостоятельный контейнер, а затем с помощью этого контейнера запускать/выполнять тесты против других контейнеров, имеющих код приложения/системную инфраструктуру?
  • объединяет испытания как часть отдельных контейнеров-докеров, которые должны запускаться при необходимости. Но я думаю, что это лучше всего работает только для модульных тестов, которые действительно сочетаются с контейнером, который содержит соответствующий код приложения. Интеграция, пользовательский интерфейс, тесты уровня системы различаются в зависимости от модулей приложения в системе.

Единственная причина, по которой я могу думать о том, что целесообразно докерезационные тесты - это один контейнер со всеми необходимыми вами тестами и соответствующей тестовой инфраструктурой (все тестовые платформы/языковые зависимости), чтобы можно было развертывать и запускать тесты в любом месте вместе с соответствующими контейнерами кода приложения. Сохраняет одно из того, что нужно настроить тестовую инфраструктуру по мере необходимости. Но, похоже, не было сообщений о таких вещах для докционированных тестов.

+1

на соответствующей ноте, инструменты для тестирования, такие как Selenium, были доклерированы: https://github.com/SeleniumHQ/docker-selenium, https://github.com/elgalu/docker-selenium. Тем не менее, сами тесты я не слышал о том, чтобы быть докеров. – David

+0

Некоторые другие примеры докционированного тестирования, которые я нашел: [Доксеризация BDD: Презентация на конференции BDDX15 в Лондоне] (http://shashikantjagtap.net/dockerizing-bdd-presentation-at-bddx15-london), [Докетирование огурца-BDD и Ruby Friends] (http://shashikantjagtap.net/dockerizing-cucumber-bdd-and-ruby-friends), https://groups.google.com/forum/#!topic/robotframework-users/r3FzTXle_w4, https: //github.com/klevermonicker/robot_framework – David

ответ

2

Я не думаю, что вы выполнили сами тесты как процесс, который запускает тесты.

Например, если вам нужно запустить модульные тесты в php с phpunit, вы должны выполнить докеры phpunit и использовать их для запуска тестов против вашего кода и аналогичным образом для любой другой используемой тестовой среды (например, testng, junit ... и т. Д. .)

Вот пример Dockerfile я использую для инкапсулирования Java/Maven/TestNG для тестового проекта Java, который включает в себя некоторые селеном тесты:

FROM maven:3-jdk-8 

# Selectively add stuff we need 
COPY pom.xml /usr/src/testng/ 

# Get a clean build immediately after and 'go-offline' to improve subsequent builds 
RUN cd /usr/src/testng && mvn dependency:go-offline 
COPY src /usr/src/testng/src 
WORKDIR /usr/src/testng/ 

# Additional support files that's needed but not for the build 
COPY supportfiles /usr/src/testng/supportfiles 

CMD [ "mvn test" ] 
+0

Ну, тесты могут быть либо бок о бок с кодом продукта, либо отдельными, я имею в виду общие/все случаи. Хотя в настоящее время он отдельный. И я говорю о сквозных/системных/интеграционных/регрессионных/функциональных/тестах UI, а не модульных тестах. – David

+0

ОК, поэтому я думаю, что эта же идея применяется - вы должны закрепить любой процесс, выполняющий ваши тесты. Я отвечу на вопрос – d3ming

+0

Непонятно из приведенного вами примера, поскольку точкой входа по умолчанию является «mvn test». Значит, это означает, что все тестовые файлы включены в образ докеры, так что когда вы запускаете образ докера (и передаете «mvn test» по мере необходимости в качестве параметров для запуска докеров), он ищет тестовые файлы в контейнере или делает это искать тестовые файлы по отношению к рабочему каталогу, в котором запущен запуск docker? – David

4

Я предпочитаю свой вариант (3), т.е. включать тест код в производственном развертываемом артефакте (изображение докера)

процитирую Alister Scott из GTAC 2015 которой я присутствовал:

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

Для интеграции и испытаний e2e, т.е.тесты, для которых требуется более одного изображения докеров, я предпочитаю CI tool, который через docker-compose и отдельное репозитование git для этих тестов организует создание всех контейнеров, необходимых для более крупного теста. Опять же, изображения докеров использовались should be the exact same as for production, за исключением what varies is the configuration (например, переменные среды), которые заставляют тесты указывать на тестовые данные и/или промежуточные службы.

+0

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

+0

Добро пожаловать. Я добавил, что в свой ответ я предпочитаю отдельный git repo для тестов интеграции/e2e, так как они касаются более 1 микросервиса, поэтому они не принадлежат ни одному из них в частности. –

+1

@Leo Как вы используете докер-компоновку через CI-сервер? Я сейчас борется с докер-плагином для Дженкинса. Думая о реализации функции самостоятельно (https://github.com/jenkinsci/docker-plugin/issues/74). Кстати, отличная работа с селенными изображениями Селена. –