运行 在多个浏览器上使用 gradle 的特定测试

Running specific tests using gradle over multiple browsers

我正在使用 Geb/Spock 进行自动化测试。我正在使用 Gradle 作为我的构建工具。

我想调用不同的 gradle 任务来构建和 运行 特定规格(测试)或一套规格。

我对 gradle 构建生命周期的了解还不够,无法完全理解这里发生的事情:https://github.com/geb/geb-example-gradle/blob/master/build.gradle

plugins {
    id "idea"
    id "groovy"
    id "com.energizedwork.webdriver-binaries" version "1.4"
    id "com.energizedwork.idea-base" version "1.4"
}

ext {
    // The drivers we want to use
    drivers = ["firefox", "chrome", "chromeHeadless"]

    ext {
        groovyVersion = '2.4.12'
        gebVersion = '2.2'
        seleniumVersion = '3.6.0'
        chromeDriverVersion = '2.32'
        geckoDriverVersion = '0.18.0'
    }
}

repositories {
    mavenCentral()
}

dependencies {
    // If using Spock, need to depend on geb-spock
    testCompile "org.gebish:geb-spock:$gebVersion"
    testCompile("org.spockframework:spock-core:1.1-groovy-2.4") {
        exclude group: "org.codehaus.groovy"
    }
    testCompile "org.codehaus.groovy:groovy-all:$groovyVersion"

    // If using JUnit, need to depend on geb-junit (3 or 4)
    testCompile "org.gebish:geb-junit4:$gebVersion"

    // Drivers
    testCompile "org.seleniumhq.selenium:selenium-chrome-driver:$seleniumVersion"
    testCompile "org.seleniumhq.selenium:selenium-firefox-driver:$seleniumVersion"
}

webdriverBinaries {
    chromedriver chromeDriverVersion
    geckodriver geckoDriverVersion
}

drivers.each { driver ->
    task "${driver}Test"(type: Test) {
        group JavaBasePlugin.VERIFICATION_GROUP

        outputs.upToDateWhen { false }  // Always run tests

        systemProperty "geb.build.reportsDir", reporting.file("geb/$name")
        systemProperty "geb.env", driver
    }
}

test {
    dependsOn drivers.collect { tasks["${it}Test"] }
    enabled = false
}

tasks.withType(Test) {
    maxHeapSize = "1g"
    jvmArgs '-XX:MaxMetaspaceSize=128m'
    testLogging {
        exceptionFormat = 'full'
    }
}

tasks.withType(GroovyCompile) {
    groovyOptions.forkOptions.memoryMaximumSize = '256m'
}

我试过将以下内容插入 build.gradle:

task dataGen {
    include '**com.company.project.spec.util/DataGenerationUtilSpec.groovy'
}

task sanity {
    include '**com.company.project.spec.sanity.*'
}

但是调用这些任务 (gradle sanity) 会导致构建失败:

Could not find method include() for arguments [**com.company.project.spec.util/DataGenerationUtilSpec.groovy] on task ':dataGen' of type org.gradle.api.DefaultTask

显然有现有的构建说明,因为我可以调用 gradle build 和 Chrome 上的所有规范 运行,我只是不确定如何添加更多任务

我认为这 2 个任务是 test 个任务,所以它看起来应该是这样的:

task dataGen (type: Test) {
    include '**com.company.project.spec.util/DataGenerationUtilSpec.groovy'
}

task sanity (type: Test) {
    include '**com.company.project.spec.sanity.*' 
}

您可以使用 Spock 注释来控制测试或规范,请参见示例 here

您将必须定义注释 类 并定义 Spock 配置文件以使用该注释。然后您注释特定的规范(或测试)。
现在您必须在任务中或从参数中定义 Spock 配置文件。