Как я могу передать системные свойства JVM своим тестам?

#gradle #geb

#gradle #geb

Вопрос:

У меня есть следующая задача

 task testGeb(type:Test) {
   jvmArgs '-Dgeb.driver=firefox'
   include "geb/**/*.class"
   testReportDir = new File(testReportDir, "gebtests")
}
  

Кажется, что системное свойство не попадает в тесты Geb, поскольку Geb не запускает Firefox для запуска тестов. Когда я устанавливаю то же системное свойство в Eclipse и запускаю тесты, все работает нормально.

Ответ №1:

Попробуйте использовать системные свойства:

 test {
   systemProperties['geb.driver'] = 'firefox'
   include "geb/**/*.class"
   testReportDir = new File(testReportDir, "gebtests")
}
  

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

1. На самом деле это может быть проблемой с Geb. Я подтвердил, что prop передается правильно.

2. В ранних версиях snapshot версии 0.6 была ошибка, которая не позволяла этому работать, но она была устранена в финальной версии 0.6.

Ответ №2:

Вы также можете напрямую задать системное свойство в задаче:

 task testGeb(type:Test) {
    System.setProperty('geb.driver', 'firefox')}
  

(решение, приведенное выше, также будет работать для типа задачи, отличного от Test )

или, если вы хотели бы иметь возможность передавать различные свойства из командной строки, вы можете включить более гибкое решение в определение задачи:

 task testGeb(type:Test) {
    jvmArgs project.gradle.startParameter.systemPropertiesArgs.entrySet().collect{"-D${it.key}=${it.value}"}
}
  

и затем вы можете запустить:
./gradlew testGeb -D[anyArg]=[anyValue] , в вашем случае: ./gradlew testGeb -Dgeb.driver=firefox

Ответ №3:

 Below code works fine for me using Gradle and my cucumber scenarios are passing perfectly. Add below code in your build.gradle file:

//noinspection GroovyAssignabilityCheck

test{

    systemProperties['webdriver.chrome.driver'] = '/usr/bin/google_chrome/chromedriver'

}
  

Примечание: Я использовал ОС Ubuntu и путь chrome_driver, который я указал в /usr /bin / google_chrome /, и ваш путь варьируется в зависимости от вашего пути.

Ответ №4:

Добавьте systemProperties System.getProperties() в свою задачу

 test {
  ignoreFailures = false
  include "geb/**/*.class"
  testReportDir = new File(testReportDir, "gebtests")
  // set a system property for the test JVM(s)
  systemProperties System.getProperties()
}
  

Чтобы это можно было настраивать во время выполнения теста. Например

 gradle -Dgeb.driver=firefox test
gradle -Dgeb.driver=chrome test 
  

Ответ №5:

Я бы рекомендовал выполнить следующее

 gradle myTask -DmyParameter=123
  

с помощью следующего кода

 task myTask {
    doLast {
        println System.properties['myParameter']
    }
 }
  

Вывод должен быть

gradle MyTask -DmyParameter=123:MyTask 123

СБОРКА ПРОШЛА УСПЕШНО

Общее время: 2.115 секунд

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

1. Это устанавливает свойство только для Gradle JVM, а не для JVM, которая запускает тесты.