Как передавать значения переменных из Jenkins в Java проект
#java #maven #test_automation #jenkins
Привет. Подскажите, пожалуйста,
есть проект, авто-тесты, которые, например создают некоторую сущность. Данные для
этих сущностей беруться либо из .properties по ключам, либо из .txt документов опять
же из ресурcов (директория).
Теперь задание, выложить это на дженкинс и настроить джобы с возможностью запуска
с разными значениями.
Выложить то выложил, все собирается, но с теми данными, которые в файлах внутри проекта.
Нашел, что в Jenkins можно настраивать параметризацию, т.е. запускать с параметром.
Решил поступить так (пример возьмем, что нам при билде надо менять урл, это как пример,
т.е. вместо урлы может быть абсолютно любое значение и их может быть несколько):
на Jenkins создаю Job Item, указываю параметр "This project is parameterized" = True
Создаю переменную:
String Parameter
Name = generalUrl
Default Value = http://ru.stackoverflow.com
далее, указываю, что этот job item должен собираться с помощью maven, путь к pom.xml
и все такое.
И в goal прописываю - clean test
Сохраняю.
Иду в проект, в файле pom.xml указываю
http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
comerm-nav-qa-integration-test1.0-SNAPSHOT2.53.16.9.103.9.24.121.4.232.19.11.8.53.5.19.3.11.v201607212.53.9smoke_ui_tests.xmlhttp://ru.stackoverflow.comorg.testngtestng${testng.version}com.codeborneselenide${selenide.version}junitjunit${junit.vesrion}ru.yandex.qatools.allureallure-testng-adaptor${allure.version}junitjunitorg.apache.poipoi${apache.poi.version}xml-apisxml-apisorg.apache.poipoi-ooxml${apache.poi.version}xml-apisxml-apisorg.apache.maven.pluginsmaven-resources-plugin3.0.1org.apache.maven.pluginsmaven-surefire-plugin${maven.surefire.version}${suiteName}true
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
${generalUrl}org.aspectjaspectjweaver${aspectj.version}org.apache.maven.pluginsmaven-compiler-plugin${maven.compiler.version}1.81.8truetrueorg.eclipse.jettyjetty-maven-plugin${jetty.version}${project.build.directory}/site/allure-maven-pluginstop1234src/main/resourcestruetrueru.yandex.qatools.allureallure-maven-plugin${allure.maven.version}${basedir}/target/allure-reports/${basedir}/target/allure-results${basedir}/site
В файле .properties есть ключ с значнием baseUrl=${generalUrl}.
Вроде бы все сделал как находил по кусочкам где-то, запускаю свои тесты, получаю ошибку:
org.openqa.selenium.WebDriverException: unknown error: unhandled inspector error:
{"code":-32603,"message":"Cannot navigate to invalid URL"}
(Session info: chrome=53.0.2785.89)
Включаю дебаггер и вижу, что на этапе чтения файла .properties, система берет просто
${generalUrl}, т.е. просто как текст...
Подскажите, как можно из Jenkins передавать переменные, т.е. как настроить сам pom.xml,
.properties, чтобы можно было выполнять параметризированный запуск.
Спасибо.
UPD: Добавил pom.xml
Ответы
Ответ 1
У вас по сути есть две задачи:
пробросить значения параметров сборки из Jenkins в свойство maven-проекта (property).
обработать .properties-файл(ы), заменяя заглушки ${generalUrl} на значения свойств
maven-а.
Maven интерпретирует аргументы JVM -Dfoo=bar в качестве свойств проекта. Значения
параметров сборки Jenkins доступны в виде макросов вида ${MYPARAM}.
Чтобы передать параметр из Jenkins в maven, в соответствующем шаге сборки в поле
Goals and options остается связать свойство maven с параметром Jenkins примерно так:
clean install -DgeneralUrl=${generalUrl}
(замените clean install на то, что используетя в вашем случае)
Для подстановки свойств в ресурсы у maven есть готовое решение в составе Maven Resources
Plugin - фильтрация ресурсов.
Добавьте в pom.xml плагин актуальной версии:
org.apache.maven.pluginsmaven-resources-plugin3.0.1
Просто в секции вашего pom-файла включите фильтрацию для нужных ресурсов:
src/test/resourcestrue
Теперь при выполненнии maven-ом фазы process-test-resources будет выполняться задача
resources:testResources, которая заменит выражение ${generalUrl} в файле src/main/resources/data.properties
на свойство generalUrl из pom-файла, которое в свое очередь может пробрасываться из
Jenkins.
Ответ 2
Всем спасибо! Решил с помощью профилей
http://software-testing.ru/library/testing/general-testing/1984
И немного переписал загрузку из проперти файлов. По ссылке выше, все детально рассказывается
и есть ссылка на архетип проекта, с примером пома с профилями.
Теперь тесты запускаются как локально из IDE, береться дефолтное значение из "дибаг.проперти",
так и с помощью команды mvn clean -DgeneralUrl=http://google.com test, которое пробрасывает
это значение переменной в проект. Дальше с настройкой в Jenkins, дело житейское :).
Комментариев нет:
Отправить комментарий