Передача системного свойства в тест на огурец через Gradle - PullRequest
0 голосов
/ 11 января 2019

У меня есть набор тестов на огурец (java), которые я хотел бы запустить через командную строку, настраивая системные свойства для определения таких вещей, как браузер и запускать ли он локально или на BrowsersStack. Система построена с Gradle.

Я посмотрел на этот вопрос и перепробовал все возможные варианты, но безрезультатно. Я также заметил, что, хотя вопрос был задан и ответ был принят в 2014 году, есть ряд комментариев 2018 года, в которых говорится, что подход не работает. Подобный подход подробно описан в этом вопросе , и в комментариях предполагается, что он работает для огурца.

Мой файл gradle.build выглядит так:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.0-RC2'
    }
}

plugins {
    id 'com.github.spacialcircumstances.gradle-cucumber-reporting' version '0.0.12'
}

repositories {
    mavenCentral()
}

apply plugin: 'org.junit.platform.gradle.plugin'

group 'org.myorg'
version '0.1'

junitPlatform {
    platformVersion '1.0.0-RC2'
    reportsDir file('build/test-results/junit-platform')
}

apply plugin: 'java'

sourceCompatibility = 1.8

cucumberReports {
    outputDir = file('target/cucumber-report')
    buildName = '0'
    reports = files('target/cucumber-report/json/cucumber-report.json')
    parallelTesting = false
}

test {
    ignoreFailures = true
    filter 
    {
        // Include all tests.
        includeTestsMatching "*.*"
    }
    systemProperty "localBrowser", System.getProperty("localBrowser")
}

dependencies {
    compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.5.1'

    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile group: 'org.testng', name: 'testng', version: '6.9.10'
    compile group: 'com.browserstack', name: 'browserstack-local-java', version:'1.0.1'

    // The cucumber version is 2.+ as 3+ cannot run tests from within IntelliJ ~_~
    // Fixed for v 4! :-)
    testCompile 'io.cucumber:cucumber-java:4.+'
    testCompile 'io.cucumber:cucumber-junit:4.+'
    testCompile group: 'io.cucumber', name: 'cucumber-picocontainer', version: '4.+'
    testCompile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3'

    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.0.0-RC2'
    testCompile group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.0.0-RC2'
    testRuntime group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.0.0-RC2'
    testRuntime group: 'org.junit.vintage', name: 'junit-vintage-engine', version: '4.12.0-RC2'

}

Код, который проверяет системное свойство и должен его загрузить, содержится в операторе @Before:

@Before
    public void setUp(Scenario scenario) throws Exception {
        System.out.println(scenario);

        System.out.println("Value of localBrowser is " + System.getProperty("localBrowser"));

        // Local browser or Browserstack? Default is local.
        if (System.getProperty("localBrowser") == null) {
            System.setProperty("localBrowser", "true");
        }

         System.out.println("Value of localBrowser is " + System.getProperty("localBrowser"));
...

Когда я запускаю скрипт, используя gradle test -DlocalBrowser=false --rerun-tasks, вывод выглядит так:

> Task :junitPlatformTest
cucumber.runner.Scenario@2e377400
Value of localBrowser is null
Value of localBrowser is true
Tests running locally on Chrome

Итак, localBrowser не берется или не передается в модуль, и мой сценарий затем устанавливает его на true, поскольку он находит нулевое значение, и запускает все тесты в локальном браузере в следующем коде.

Я что-то упускаю из виду или есть проблема с более новой версией Gradle? Я использую версию 5.0.

1 Ответ

0 голосов
/ 16 января 2019

После долгих копаний выясняется, что плагин junit gradle блокировал передачу системных переменных. Я решил опубликовать это как ответ, потому что я уверен, что это не задокументированное поведение!

Мой новый файл сборки выглядит следующим образом:

buildscript {
    repositories {
        mavenCentral()
    }
}

plugins {
    id 'java'
    id "com.github.spacialcircumstances.gradle-cucumber-reporting" version "0.1.2"
}


group 'org.myorg'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

project.ext {
    cucumberVersion = '4.0.0'
}


dependencies {
    compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '3.5.1'
    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile 'io.cucumber:cucumber-java:' + cucumberVersion
    testCompile 'io.cucumber:cucumber-junit:' + cucumberVersion
    testCompile group: 'com.browserstack', name: 'browserstack-local-java', version:'1.0.1'
    testCompile group: 'io.cucumber', name: 'cucumber-picocontainer', version: '2.1.0'
    testCompile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3'
    testCompile group: 'org.testng', name: 'testng', version: '6.9.10'

}

test {
    systemProperties System.getProperties()
    ignoreFailures = true
    filter
            {
                // Include all tests.
                includeTestsMatching "*.*"
            }

    systemProperty "localBrowser", System.getProperty("localBrowser")
    testLogging.showStandardStreams = true
}

cucumberReports {
    outputDir = file('target/cucumber-report')
    buildId = '0'
    reports = files('target/cucumber-report/json/cucumber-report.json')
}

Насколько я могу судить, плагин junit gradle использовался только для включения регистрации шагов теста на консоли. Это было решено с включением testlogging.showStandardStreams=true в тестовое задание. Есть действительно аккуратный плагин регистрации ( здесь ), который может сделать эту работу еще лучше, но я не пробовал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...