Testing 如何定义仅限于包的测试任务?

Testing 如何定义仅限于包的测试任务?,testing,gradle,groovy,package,task,Testing,Gradle,Groovy,Package,Task,我有一个带测试的gradle项目。测试分为两个包。我想有每个包的测试任务 我在格拉德尔的项目: project(":tests:my-project") { ext { drivers = ["phantomJs", "chrome"] } dependencies { ... } apply plugin: "groovy" apply from: "gradle/osSpecificDownloads.gr

我有一个带测试的gradle项目。测试分为两个包。我想有每个包的测试任务

我在格拉德尔的项目:

project(":tests:my-project") {

    ext {
        drivers = ["phantomJs", "chrome"]
    }

    dependencies {
        ...
    }

    apply plugin: "groovy"
    apply from: "gradle/osSpecificDownloads.gradle"

    List suites = ['smoke', 'stress']
    Map testPackages = ['smoke': 'packagename1.*', 'stress': 'packagename2.*']


    drivers.each { driver ->
            task "${driver}Test"(type: Test) {
                reports {
                    html.destination = reporting.file("$name/tests")
                    junitXml.destination = file("$buildDir/test-results/$name")
                }

                outputs.upToDateWhen { false }  

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

            }
    }

    chromeTest {
        dependsOn unzipChromeDriver
        def chromedriverFilename = Os.isFamily(Os.FAMILY_WINDOWS) ? "chromedriver.exe" : "chromedriver"        systemProperty "webdriver.chrome.driver", new File(unzipChromeDriver.outputs.files.singleFile, chromedriverFilename).absolutePath
    }

    phantomJsTest {
            dependsOn unzipPhantomJs
            def phantomJsFilename = Os.isFamily(Os.FAMILY_WINDOWS) ? "bin/phantomjs.exe" : "bin/phantomjs"
            systemProperty "phantomjs.binary.path", new File(unzipPhantomJs.outputs.files.singleFile, phantomJsFilename).absolutePath
    }

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

您可以尝试这样做:

首先,创建两个任务,一个用于烟雾测试,一个用于压力测试。例如,我将只向您展示单烟测试。压力测试任务看起来是一样的

//this task will run all the smoke tests
task runSmokeTests() {

}
然后更改您的
testPackages
值,以便Gradle可以使用:

Map testPackages = ['smoke': 'packagename1/*', 'stress': 'packagename2/*']
然后迭代驱动程序并创建
Test
类型的任务,与您所做的相同,但使用
include
参数指向带有冒烟测试的包,在任务定义之后,根据新创建的任务生成
runSmokeTests
任务,如下所示:

drivers.each { driver ->
    Task smokeTestTask = task "${driver}SmokeTest"(type: Test) {
        reports {
            html.destination = reporting.file("$name/tests")
            junitXml.destination = file("$buildDir/test-results/$name")
        }

        include testPackages.get('smoke')

        outputs.upToDateWhen { false }

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

    }
    runSmokeTests.dependsOn smokeTestTask 
}
从现在起,您至少创建了两个任务:
phantomJsSmokeTest
chromeSmokeTest
,每个任务只包含自己的包。由于
runSmokeTests
依赖于这两个测试,因此您可以运行它来运行所有的冒烟测试


如果您愿意,您可以在
驱动程序中再添加一次迭代。每个
都可以迭代测试类型,并提供更多的逻辑,使您的配置更加灵活。但是,恕我直言,这是不好的,因为这个解决方案可能很难维护和理解,而且我认为,您不会有大量的测试类型。

您可以尝试这样做:

首先,创建两个任务,一个用于烟雾测试,一个用于压力测试。例如,我将只向您展示单烟测试。压力测试任务看起来是一样的

//this task will run all the smoke tests
task runSmokeTests() {

}
然后更改您的
testPackages
值,以便Gradle可以使用:

Map testPackages = ['smoke': 'packagename1/*', 'stress': 'packagename2/*']
然后迭代驱动程序并创建
Test
类型的任务,与您所做的相同,但使用
include
参数指向带有冒烟测试的包,在任务定义之后,根据新创建的任务生成
runSmokeTests
任务,如下所示:

drivers.each { driver ->
    Task smokeTestTask = task "${driver}SmokeTest"(type: Test) {
        reports {
            html.destination = reporting.file("$name/tests")
            junitXml.destination = file("$buildDir/test-results/$name")
        }

        include testPackages.get('smoke')

        outputs.upToDateWhen { false }

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

    }
    runSmokeTests.dependsOn smokeTestTask 
}
从现在起,您至少创建了两个任务:
phantomJsSmokeTest
chromeSmokeTest
,每个任务只包含自己的包。由于
runSmokeTests
依赖于这两个测试,因此您可以运行它来运行所有的冒烟测试

如果您愿意,您可以在
驱动程序中再添加一次迭代。每个
都可以迭代测试类型,并提供更多的逻辑,使您的配置更加灵活。但是,IMHO,这是不好的,因为这个解决方案可能会变得难以维护和理解,而且我认为,您不会有大量的测试类型