Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

Как передавать значения переменных из 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

com
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
                    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
        
    





    true
    
        
            ru.yandex.qatools.allure
            allure-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.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, дело житейское :).

Комментариев нет:

Отправить комментарий