Привет, меня зовут Диллан, я решил начать документировать некоторые из моих работ. Вы можете найти этот пост на моем сайте. Этот конкретный пост является первой из трех отдельных статей.
Веб-сайт
Исходный код
Давайте перечислим именно то, что собиралось покрыть
- [] Постройте тестовую инфраструктуру с помощью Docker и селена
- [] Создайте Python Test Suite, чтобы работать против каждого контейнера
- [] Настройка сервера Centos и регистрацию Gitlab-Runner
- [] На push Run gitlab ci для создания контейнеров и выполнения тестов,
- [] Создайте инфраструктуру и проберите тесты на Дженкинсе, запускаемых из Gitlab
Почему мы используем селенс сетку и докер?
Каждый контейнер представляет отдельный браузер и операционную систему. Идея состоит в том, чтобы все автоматизированные тесты централизованы в одном контейнере. Этот контейнер будет работать и выполнять тесты непосредственно против Хаб Анкет Хаб является центром управления для всех других узлов. Когда контейнер в концентраторе запускается, он запустит заданные тесты по каждому узлу/контейнеру.
Эта технология может помочь нам объединить время, сравнить поведение в нескольких браузерах и операционных системах и обеспечить более высокий уровень охвата кода для изменений фронта. Итак, как мы собираемся его использовать?
Используется для создания изображения для нашего тестового контейнера
FROM python:3.6 ADD . /uitests WORKDIR /uitests RUN pip install -r requirements.txt RUN chmod +x wait-for-it.sh
Используется для стягивания изображения для каждого браузера и создания контейнеров для концентраторов и узлов
Мы определяем сеть, в которой мы также включаем изображение наших тестов из DockerFile
version: '2' services: selenium_hub: container_name: selenium_hub image: selenium/hub networks: cao_ui_prodchecks: {} ports: - "4444" firefoxnode: container_name: firefox_node image: selenium/node-firefox networks: cao_ui_prodchecks: {} environment: - HUB_PORT_4444_TCP_ADDR=selenium_hub - HUB_PORT_4444_TCP_PORT=4444 depends_on: - selenium_hub ports: - 5554 chromenode: container_name: chrome_node image: selenium/node-chrome networks: cao_ui_prodchecks: {} environment: - HUB_PORT_4444_TCP_ADDR=selenium_hub - HUB_PORT_4444_TCP_PORT=4444 depends_on: - selenium_hub ports: - 5555 robottests: container_name: robottests command: /bin/sleep infinity networks: cao_ui_prodchecks: {} depends_on: - selenium_hub build: . volumes: - ./reports:/cao_ui_tests/reports networks: cao_ui_prodchecks: driver: bridge
Dockerfile скопирует все папки Репозиторий Анкет Нажмите Repository, чтобы просмотреть конфигурацию проекта. Я решил использовать RobotFramework для быстрого примера.
# Build robot tests docker build -t robottests:1 . # Launch services docker-compose up -d # execute tests docker-compose exec robottests scripts/wait_for_it.sh -t 15 selenium_hub:4444 -- robot -A run_tests.robot
Вы должны увидеть все услуги запуска!
Creating network "cao_ui_prodchecks_cao_ui_prodchecks" with driver "bridge" Creating selenium_hub ... done Creating robottests ... done Creating firefox_node ... done Creating chrome_node ... done
Итак, давайте посмотрим на услуги, которые мы работаем и работаем.
- Hub Selenium – управляет доставкой выполнения тестирования каждому узлу
- Узел Firefox – Test Suite выполняется против браузера Firefox
- Chrome Node – Test Suite выполняется против браузера Chrome
- Тестовый контейнер – Dockerized Automated Test Suites
Давайте выполним тестовый контейнер. Примечание. Команда указана в раскрывающемся списке выше ^.
docker exec robottests scripts/wait_for_it.sh -t 15 selenium_hub:4444 -- robot -A run_tests.robot wait_for_it.sh: waiting 15 seconds for selenium_hub:4444 wait_for_it.sh: selenium_hub:4444 is available after 0 seconds ============================================================================== UI Prod Tests ============================================================================== UI Prod Tests.Login Page ============================================================================== Authentication | PASS | ----------------------------------------------------------------------------------- UI Prod Tests.Login Page | PASS | 1 critical test, 1 passed, 0 failed 1 test total, 1 passed, 0 failed ============================================================================== UI Prod Tests | PASS | 1 critical test, 1 passed, 0 failed 1 test total, 1 passed, 0 failed ============================================================================== Debug: /cao_ui_tests/reports/debug.logenv Output: /cao_ui_tests/reports/output.xml Log: /cao_ui_tests/reports/log.html Report: /cao_ui_tests/reports/report.html
Если вы посмотрите близко, вы заметите то, что я не упомянул. Перед началом тестового набора выполняется скрипт оболочки с выходом
wait_for_it.sh: waiting 15 seconds for selenium_hub:4444 wait_for_it.sh: selenium_hub:4444 is available after 0 seconds
Это сценарий оболочки, который жизненно важен для выполнения и расположен в каталоге сценариев Репозиторий Анкет
Перед выполнением тестов селена необходимо убедиться, что тестовый бегун может создать сеанс селена с данным WebDriver. Это означает, что селен сетка или селен хромированного узла должны быть вверх и готовы .
wat-for-it.sh
Скрипт предоставляет вам возможность ждать, пока служба будет встать, но не готово
Итак, давайте пройдемся через контрольный список в начале этого поста и посмотрим, где мы находимся.
- [X]
Создайте тестовую инфраструктуру с Docker и SeleniumGrid - [X]
Создайте Python Test Suite, чтобы работать против каждого контейнера - [] Настройка сервера Centos и регистрацию Gitlab-Runner
- [] На push Run gitlab ci для создания контейнеров и выполнения тестов,
- [] Создайте инфраструктуру и проберите тесты на Дженкинсе, запускаемых из Gitlab
В следующем посте мы обсудим настройку сервера CentOS для запуска наших тестов CI, которые будут создавать нашу инфраструктуру и запустить наши тестовые комплексы и изменения кода в наших автоматических тестах. Дженкинс будет вытащить из репозитория, поэтому важно убедиться, что мы не добавляем нарушающие изменения в нашу кодовую базу.
Оригинал: “https://dev.to/teaglebuilt/continuous-delivery-test-automation-pipeline-part-one-2dab”