t.me/atinfo_chat Telegram группа по автоматизации тестирования

Параметризация теста из Jenkins в конфигурационный файл TestNG

parameterized
jenkins
parallel
execution
maven
java
testng
Теги: #<Tag:0x00007f21dfa48320> #<Tag:0x00007f21dfa4ffa8> #<Tag:0x00007f21dfa4fd78> #<Tag:0x00007f21dfa4f788> #<Tag:0x00007f21dfa4f378> #<Tag:0x00007f21dfa4ef18> #<Tag:0x00007f21dfa4ec70>

(Михаил Братухин) #23

Потому что в properties pom файла задаются параметры для этого pom, если не задано иное в плагине. От того что вы из env параметра запишете в pom переменную, то она не появится в System.getProperties(). Параметры env можно вычитывать через System.getenv(name);
Так же можно передавать не через env, указав в параметрах запуска ключ -D”имя параметра”=“значение параметра”, тогда в System.getProperty(name); можно вычитать этот параметр. В обоих случаях задавать профиль и properties в pom-файле нет необходимости.


(Dmitry.K) #24

Сегодня посмотрел видео:

Переделал у себя в следующий вид:

Запускаю через команду:
mvn clean test -Dsurefire.suiteXmlFiles=testng.xml -P test

если я все правильно понял, то, при запуске указывая профиль -P test / prod / stage / qa (для моего случая) соответствующее значение site.url из профиля в pom должно быть записано в global.properties вместо ${site.url}, а в классе Environment достается значение из .properties.
Проблема в том, что при дебаге у меня в джава код приезжает ${site.url} именно в таком виде, а не значение в виде урла. Не понимаю, что я делаю не так =((


(Михаил Братухин) #25

В видео же всё сказано. И то что настройки в профиле параметров используются внутри самого мавена, а не в коде. Как я выше уже указывал. Для запуска в IDE Алексей создал отдельный файл, который применяется по-умолчанию, если не задан запуск из мавена и в нём настройки заданы явно, а не через подстановку переменной в строку.

Профили мощная штука, но по мне так излишняя для вашей задачи. Всё тоже самое можно сделать и без них. Они нужны для того, чтобы собирать по разному проекты. В буквальном смысле можно собирать разные приложения и много что ещё делать. А для запуска на разных контурах/браузерах можно применить и обычные параметры через консоль и комплекты в TestNG/JUnit


(Сергей Кузьмин) #26

@Necrosium простите может уже разобрались - для чтения из pom.xml в код надо немного поработать:

например

  <properties>
    <selenium.version>3.13.0</selenium.version>

в коде

		System.err.println("Property \"selenium.version\" = "
				+ System.getProperty("selenium.version"));

будет пусто

Property "selenium.version" = null

и
надо

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven-surefire-plugin.version}</version>
        <executions>
          <execution>
            <id>unit-tests</id>
            <phase>test</phase>
            <goals>
              <goal>test</goal>
            </goals>
            <configuration>
              <systemPropertyVariables>
              <selenium.version>${selenium.version}</selenium.version>

тогда

		System.err.println("Property \"selenium.version\" = "
				+ System.getProperty("selenium.version"));

напечатает


Property "selenium.version" = 3.13.0

это все помоему невероятно очень старые (можно выразиться древние) технологии… используем и радуемся что работает…

один из apache.commons вроде действительно выдавал литерал но не помню как воспроизвести


(Dmitry.K) #27

Спасибо. Заработало. Добавил:

все заработало запуском mvn clean test -Dsurefire.suiteXmlFiles=testng.xml -P ‘profile_name’

и в этом случае .properties файл получается вообще не нужен.

я правда так до конца и не понял, как работает связка pom > properties > java, но да ладно… придет время разберусь))


(Михаил Братухин) #28

Вот поэтому и советовал вам не браться за профили, если до конца не понимаете их принцип. В приведённом выше ответе @sergueik показал как через плагин можно передать переменные окружения в системные переменные. О чем я так же выше уже упоминал. Файл вам не потребовался скорее всего из-за того, что вы его не используете или используются не только он и что-то перебивает его данные. Очень странный подход к написанию кода без понимания что и откуда куда подаётся и как вычитывается.


(Dmitry.K) #29

Спасибо за помощь. Иногда так происходит, что понимание приходит после реализации, а не до :slight_smile:


(Михаил Братухин) #30

Скорее всего в вашем случае, если запустить вот так:
mvn clean test -Dsurefire.suiteXmlFiles=testng.xml -Dsite.url=“тут URL вашего сайта”

То будет работать точно также и без всяких профилей.


(Dmitry.K) #31

Этот вариант, задавая параметр в строке запуска через -D, - я проверил самым первым. Он сразу отработал у меня, но я хотел разобраться во взаимодействии через pom и properties
В конечном итоге придется отложить оба вышеперечисленных варианта.
Пообщался с ребятами из devops. Они сказали, что будут делать одну джобу в дженкинсе с выбором параметров где и как запускать. Я на своей стороне должен принимать те значения, которые передает Jenkins. На сколько я понял, то в этом случае мне нужен вариант который предложил товарищ ArtOfLife:

поправьте, если ошибаюсь…