Все тесты запускаются в Jenkins (+Maven). Конфигурационные файлы для запуска билдов - файлы вида testng.xml.
В данном файле, кроме перечня тестов, передается ряд обязательных для каждого теста параметра: браузер и версия браузера, прокси, платформа, и ряд параметров пользователя, для которого будет запущен тест.
Проблема: сложность поддержки таких файлов при необходимости редактирования.
Как можно передать параметр из Job'а Jenkins в данный файл конфигурации?
С Maven не работаю, но билд файлы того же Ant'a отлично видят переменные окружения Jenkins'a. Напишите скрипт (на любом языке, если конечно не важна кроссплатформенность), который получит на входе параметры браузера и вставит в XML. А затем заэкзекьютьте его из того же билд файла, до запуска testng сьюта.
1. Создаем параметризированный Job. 1.1 Создаем параметр. Пусть имя параметра будет TEST_PARAM типа String. 1.2 В Build->Goals and options указываем команду для запуска Maven с именем будущего профиля: clean test -P my_profile где: my_profile - имя вашего профиля. 1.3 Сохраняем Job. 2. Создаем профиль my_profile в pom.xml: ... <profiles> <profile> <id>my_profile</id> <properties> <test.param>${env.TEST_PARAM}</test.param> </properties> </profile> </profiles> ... где: my_profile - имя профайла (может быть любым) test.param - имя параметра в файле .properties, который будет принимать параметр ${env.TEST_PARAM} - имя переменной окружения, в которой хранится значение параметра (TEST_PARAM - имя параметра из Job'a) 3. В проекте создаем файл .properties, который будет принимать параметр из профиля Maven: test.param=${test.param} 4. Считываем данные из файла .properties там, где это нужно и используем по назначению)
Итого, схема передачи параметра выглядит следующим образом. Job parameter -> Maven profile -> Property file -> Java class
Здравствуйте.
Окружение: Maven + Java + JUnit + Allure + REST
Задача: надо выбирать в Jenkins какие-то параметры (домены) для запуска тестов (.ru or .com) и чтобы урлы в тестах изменялись в зависимости от выбранного параметра
Пытаюсь подружить Jenkins c Maven. Делаю все как описано в коменте выше, но Maven подчеркивает строку красным.
В Jenkins создал параметр и запускаю через него же.
<===[JENKINS REMOTING CAPACITY]===>channel started
Executing Maven: -B -f /var/lib/jenkins/jobs/am-tests-back-temp/workspace/pom.xml clean test -P select_domain
[INFO] Scanning for projects…
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building am-statuscode-desk 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] — maven-clean-plugin:2.5:clean (default-clean) @ am-statuscode-desk —
[INFO] Deleting /var/lib/jenkins/jobs/am-tests-back-temp/workspace/target
[INFO]
[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ am-statuscode-desk —
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /var/lib/jenkins/jobs/am-tests-back-temp/workspace/src/main/resources
[INFO]
[INFO] — maven-compiler-plugin:3.5.1:compile (default-compile) @ am-statuscode-desk —
[INFO] No sources to compile
[INFO]
[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ am-statuscode-desk —
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /var/lib/jenkins/jobs/am-tests-back-temp/workspace/src/test/resources
[INFO]
[INFO] — maven-compiler-plugin:3.5.1:testCompile (default-testCompile) @ am-statuscode-desk —
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 5 source files to /var/lib/jenkins/jobs/am-tests-back-temp/workspace/target/test-classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /var/lib/jenkins/jobs/am-tests-back-temp/workspace/src/test/java/statusMainPageTest.java:[3,44] package com.sun.xml.internal.fastinfoset.sax does not exist
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.454 s
[INFO] Finished at: 2016-07-18T15:10:02+03:00
[INFO] Final Memory: 25M/166M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:testCompile (default-testCompile) on project am-statuscode-desk: Compilation failure
[ERROR] /var/lib/jenkins/jobs/am-tests-back-temp/workspace/src/test/java/statusMainPageTest.java:[3,44] package com.sun.xml.internal.fastinfoset.sax does not exist
[ERROR] → [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] MojoFailureException - Apache Maven - Apache Software Foundation
[JENKINS] Archiving /var/lib/jenkins/jobs/am-tests-back-temp/workspace/pom.xml to ru.am.rambler.autotests/am-statuscode-desk/1.0-SNAPSHOT/am-statuscode-desk-1.0-SNAPSHOT.pom
channel stopped
Ваша ошибка никак не связана с переменными окружения.
П.С. Подчеркивает правильно, т.к. maven ничего не знает о вашей переменной, установленной на уровне Jenkins. Но сборке это никак не помешает, т.к. значение переменной прилетит в рантайме. Для начала разберитесь с ошибками компиляции.
Попробовал сделать все как в примере GarikRocks, но значение из Jenkins так и не приходит.
Вместо этого в URL подставляется “маска” (${***})
Подскажите пожалуйста в чем может быть дело?
Первое что мне необходимо, вынести в Jenkins выбор тестового окружения, на котором будут запущены автотесты
Смущает момент:
из комментов выше, я правильно понимаю, что переменная ${env.DOMAIN} будет всегда подсвечиваться красным как ошибка в pom.xml и это нормально, и делать с этим ничего не нужно??
и второй вопрос:
правильно ли я понимаю, что в коде достаточно сделать вот так, чтобы достать значение переменной DOMAIN , которое будет передаваться из Jenkinsa и использоваться далее в коде для формирования полных урлов страниц ?
очень нужна помощь и консультация по текущему вопросу, т.к. никогда прежде этого не делал и последние несколько дней не могу закончить прикручивание тестов в Jenkins
Для того, чтобы проверить вашу теорию, Jenkins совсем не нужен. IntelliJ, которую вы используете, позволяет просетить переменные окружения в run / debug configuration. Что мешает вам запустить maven профайл из идеи с нужной переменной DOMAIN, и посмотреть результат?
Jenkins ничего нового - в плане переменных окружения - не делает.
P.S. А вообще, подсказочки можно найти и путем поиска по форуму. Уже были темы и о maven профайлах, и о переменных окружения и о параметризации различных конфигураций.
можно наверное, я еще до конца не вник и нет понимания как это взаимосвязано работает. Поэтому и начал задавать вопросы тут. Буду благодарен за объяснение / примеры!
При загрузке страницы для любого теста происходит обращение через экземпляр класса environment и получение базового домена, к которому потом добавляются endPoints урлов страниц сайта.
Запускаю через IDE run иконку.
при дебаге вижу что там null.
если запускаю вот так:
mvn clean test -Dsurefire.suiteXmlFiles=testng.xml -DDOMAIN=http://
то домен видит и подтягивает доменное имя, записывает и урлы формируются корректно.
Может кто-то подсказать, что неправильно сделал, почему только через указание параметра в консоли работает ??