#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.0com erm-nav-qa-integration-test 1.0-SNAPSHOT 2.53.1 6.9.10 3.9.2 4.12 1.4.23 2.19.1 1.8.5 3.5.1 9.3.11.v20160721 2.5 3.9 smoke_ui_tests.xml http://ru.stackoverflow.com org.testng testng ${testng.version} com.codeborne selenide ${selenide.version} junit junit ${junit.vesrion} ru.yandex.qatools.allure allure-testng-adaptor ${allure.version} junit junit org.apache.poi poi ${apache.poi.version} xml-apis xml-apis org.apache.poi poi-ooxml ${apache.poi.version} xml-apis xml-apis org.apache.maven.plugins maven-resources-plugin 3.0.1 org.apache.maven.plugins maven-surefire-plugin ${maven.surefire.version} ${suiteName} true -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" ${generalUrl} org.aspectj aspectjweaver ${aspectj.version} org.apache.maven.plugins maven-compiler-plugin ${maven.compiler.version} 1.8 true true org.eclipse.jetty jetty-maven-plugin ${jetty.version} ${project.build.directory}/site/allure-maven-plugin stop 1234 src/main/resources true В файле .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 true ru.yandex.qatools.allure allure-maven-plugin ${allure.maven.version} ${basedir}/target/allure-reports/ ${basedir}/target/allure-results ${basedir}/site
Ответы
Ответ 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.plugins maven-resources-plugin 3.0.1 вашего pom-файла включите фильтрацию для нужных ресурсов: src/test/resources true Теперь при выполненнии 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, дело житейское :).
Комментариев нет:
Отправить комментарий