-
Notifications
You must be signed in to change notification settings - Fork 72
11. Jenkins. Создаем первую задачу и управляем параметрами Python
Jenkins — система для обеспечения процесса непрерывной интеграции (CI) программного обеспечения. Jenkins написан на Java и у инструмента открытый исходный код.
Для создания новой задачи необходимо на главной странице(Dashboard) Jenkins кликнуть на кнопку New Item
.
Далее указать её название и выбрать тип Freestyle project
. Нажимаем OK
.
Далее переходим во вкладку Configure
.
Так как на сервере могут работать несколько агентов под разные задачи, то во время настройки задачи необходимо указать актуального Jenkins-агента. В нашем случае мы запускаем тесты на Python, поэтому переходим в настройки задачи, ставим галочку в поле Restrict where this project can be run
и в поле Label Expression
вводим python
.
В блоке Source Code Management
выбираем Git
и в строку Repository URL
вставляем ссылку на репозиторий.
Немного проскролив ниже к блоку Branches to build
в поле ввода Branch Specifier
указываем ветку, которую будем тестировать.
Важно! По умолчанию в поле
Branch Specifier
указана ветка*master
, что означает, что Jenkins будет тестировать эту ветку. Если у вас веткаmain
или любая другая, то необходимо указать ее заменив значение.
После этого необходимо добавить шаги сборки. Переходим к блоку Build Environment
. В разделе Build Steps
кликаем на Add build step
и в выпадающем списке кликаем на Execute shell
.
В появившемся поле вводим следующий скрипт для установки виртуального окружения и запуска тестов которые используют requirements.txt:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pytest .
Если в проекте используется poetry, то скрипт будет выглядеть следующим образом:
python -m venv .venv
source .venv/bin/activate
pip install poetry
poetry install
pytest .
Чтобы добавить Allure-отчёт переходим к блоку Post-build Actions
, выбираем и кликаем на Add post-build action
и в выпадающем списке кликаем на Allure Report
. В поле Path
проверяем, чтобы путь указывал на правильную директорию в проекте, а именно на allure-results
.
Нажимаем Save
для сохранения настроек.
Jenkins в паре с Allure позволяет автоматически запускать тесты и снабжать их подробными отчётами с различными аттачментами: логи, скриншоты, скринкасты, исходный код страницы и другое.
Для этого необходимо сперва добавить некоторые утилиты в код тестов. Для этого в директории utils в проекте создаем файл attach.py
и пропишем в нём реализацию аттачментов:
import allure
from allure_commons.types import AttachmentType
# Скриншоты
def add_screenshot(browser):
png = browser.driver.get_screenshot_as_png()
allure.attach(body=png, name='screenshot', attachment_type=AttachmentType.PNG, extension='.png')
# логи
def add_logs(browser):
log = "".join(f'{text}\n' for text in browser.driver.get_log(log_type='browser'))
allure.attach(log, 'browser_logs', AttachmentType.TEXT, '.log')
# html-код страницы
def add_html(browser):
html = browser.driver.page_source
allure.attach(html, 'page_source', AttachmentType.HTML, '.html')
В коде тестов можно вызывать эти функции для добавления необходимых аттачей. К примеру:
attach.add_html(browser)
attach.add_screenshot(browser)
attach.add_logs(browser)
Для добавления Selenoid в проект переходим во вкладку Capabilities
, выбираем Python и копируем код.
Далее код необходимо модернизировать:
options = Options()
selenoid_capabilities = {
"browserName": "chrome",
"browserVersion": "100.0",
"selenoid:options": {
"enableVNC": True,
"enableVideo": False
}
}
options.capabilities,update(selenoid_capabilities)
driver = webdriver.Remote(
command_executor=f"https://{selenoid_login}:{selenoid_pass}@{selenoid_url}/wd/hub",
options=options)
browser.config.driver = driver
Для добавления видео заменим параметр enableVideo
из кода выше на True
:
options = Options()
selenoid_capabilities = {
"browserName": "chrome",
"browserVersion": "100.0",
"selenoid:options": {
"enableVNC": True,
"enableVideo": True
}
}
options.capabilities,update(selenoid_capabilities)
driver = webdriver.Remote(
command_executor=f"https://{selenoid_login}:{selenoid_pass}@{selenoid_url}/wd/hub",
options=options)
browser.config.driver = driver
Далее в файле attach.py
добавим соответствующую функцию:
# скринкаст
def add_video(browser):
video_url = f"{selenoid_url}/video/" + browser.driver.session_id + ".mp4"
html = "<html><body><video width='100%' height='100%' controls autoplay><source src='" \
+ video_url \
+ "' type='video/mp4'></video></body></html>"
allure.attach(html, 'video_' + browser.driver.session_id, AttachmentType.HTML, '.html')
Добавить видео в коде теста можно следующим образом:
attach.add_video(browser)
Для безопасного хранения конфиденциальной информации, такой как логины, пароли, ключи и т.д., в проекте создаем файл .env
и прописываем в нем переменные:
SELENOID_LOGIN=login
SELENOID_PASS=password
SELENOID_URL=selenoid_url
Вместо login
, password
и selenoid_url
прописываем свои значения. Данный файл храниться в .gitignore
и не попадает в репозиторий.
Для работы с переменными из файла .env
в коде тестов устанавливаем библиотеку python-dotenv
:
pip install python-dotenv
В файле conftest.py
прописываем:
from dotenv import load_dotenv
import os
@pytest.fixture(scope="session", autouse=True)
def load_env():
load_dotenv()
selenoid_login = os.getenv("SELENOID_LOGIN")
selenoid_pass = os.getenv("SELENOID_PASS")
selenoid_url = os.getenv("SELENOID_URL")
Для того чтобы Jenkins мог использовать переменные из файла .env
необходимо их добавить в него.
Для этого в блоке Build Steps
и кликаем на Add build step
и в выпадающем списке кликаем на Create/Update Text File
.
В появившемся окне в поле File Path
вводим .env
, а в поле Text File Content
прописываем переменные из файла .env
.
Обязательно указываем отметки в Create at Workspace
и Overwrite file
.
Важно! Блок с
.env
всегда должен быть выше блока сExecute shell
. НажимаемSave
для сохранения настроек.
Для добавления параметризации необходимо в блоке General
поставить галочку в поле This project is parameterized
и выбрать тип параметра.
Если выбрать параметр String Parameter
то в поле Name
вводим имя переменной, а в поле Default Value
вводим значение переменной которое будет использоваться по умолчанию.
Если выбрать параметр Choice Parameter
то в поле Name
вводим имя переменной, а в поле Choices
вводим значения переменной в столбик. А в поле Description
вводим описание переменной.
При добавлении параметризации в команде запуска тестов необходимо указать переменные. Пример реализации если в коде указаны реализация парсера версии браузера и в jenkins реализуем выбор нужной версии:
pytest --browser_version=${BROWSER_VERSION}
Если необходимо добавить несколько переменных, то в команде запуска тестов указываем их через пробел.
Если необходимо запустить определенную папку с тестами, то это можно реализовать следующим образом:
Команда запуска тестов будет выглядеть следующим образом:
pytest ${TESTS_TYPE}
Если добавляются параметры, которые не влияют на запуск тестов или на конфигурацию, то изменять команду запуска не нужно.
Для изменения количества отображающихся билдов/прогонов тестов в блоке General
ставим отметку Discard old builds
. В поле Max # of builds to keep
вводим количество отображаемых билдов/прогонов тестов.
Для добавления таймера для запуска тестов в блоке Build Triggers
ставим отметку Build periodically
. В поле Schedule
вводим время запуска тестов.
Для этого можно использовать следующие команды:
Запускать тесты каждый день в 12:00:
H 12 * * *
Запускать тесты каждый понедельник в 12:00:
H 12 * * 1
Запускать тесты каждый час:
H * * * *
Для клонирования проекта необходимо перейти на главной странице(Dashboard) Jenkins кликнуть на кнопку New Item
.
Указать имя для проекта. Проскролить ниже к блоку Copy from
и в поле Name
вводим имя проекта, который будем клонировать.
Из выпадающего списка выбираем проект, который будем клонировать. Нажимаем OK
.
✔️ Сайт
✔️ Чат в Telegram
✔️ Канал в Telegarm
Содержание
Командная строка
Кодировка UTF-8 в Java
Список полезных книг для автоматизаторов тестирования на языке Java
Список полезных книг для автоматизаторов тестирования на языке Python
Структура проекта
Github README.md
Java:
1. Вводное занятие. Сразу к практике.
2. Git. GitHub. Погружаемся.
3. Погружаемся в инструментарий и библиотеки
4. Основы Java
5. Продолжаем разрабатывать автотесты. PageObjects
6. JUnit 5
7. Allure Reports
8. Работа с файлами
9. Selenide #1
10. Jenkins. Создаем первую задачу
11. Управляем параметрами в коде и в Jenkins
12. Отправляем уведомления о результатах прохождения автотестов
13. Учимся быстро разрабатывать проекты для тестовых заданий
14. Selenoid
15. Библиотека Owner
16. REST API. Пишем автотесты с Rest assured
17. REST API. Декомпозируем UI тесты. Подключаем отчетность
18. REST API. Продолжаем изучать
19. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack
20. Allure TestOps
21. Переезд на собственную инфраструктуру Java
Python:
1. Вводное занятие. Сразу к практике!
2. Погружаемся в инструментарий и библиотеки
3. Git. GitHub. Погружаемся.
4. Основы Python
5. Selene #1
6. Основы Python. Часть II
7. Основы Python. Часть III
8. Page Object
9. Allure Reports
10. Работаем с файлами Python
11. Jenkins. Создаем первую задачу и управляем параметрами Python
12. Телеграм бот. Отправляем уведомления о результатах прохождения тестов
13. Pytest
14. Selenoid
15. Pytest. Часть II
16. Venv, Poetry и управление зависимостями проекта
17. REST API. Часть I. Пишем автотесты с Requests
18. REST API. Часть II. Продолжаем изучать
19. Мобильная автоматизация #1. Разрабатываем автотесты с Browserstack
20. Мобильная автоматизация #2. Разрабатываем автотесты с эмулятором Android устройства
21. Allure TestOps
22. Переезд на собственную инфраструктуру Python