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

时间:2016-06-23 20:05:12

标签: testing gradle groovy package task

我有测试的gradle项目。测试分为两个包。我希望每个包都有测试任务。

我的项目是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
    }
}

1 个答案:

答案 0 :(得分:0)

您可以尝试这样做:

首先,创建2个任务,一个用于冒烟测试,一个用于压力测试。例如,我只会告诉你一个 - 烟雾测试。压力测试任务看起来都一样。

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

}

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

Map testPackages = ['smoke': 'packagename1/*', 'stress': 'packagename2/*']

然后迭代驱动程序并创建Test类型的任务,与您的操作相同,但使用include参数指向带有冒烟测试的包,在任务定义后生成{{1}任务取决于这个新创建的任务,如下所示:

runSmokeTests

从现在开始,您创建了至少2个任务: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中再添加一次迭代来迭代测试类型,并提供更多逻辑以使您的配置更加灵活。但是,恕我直言,这并不好,因为这个解决方案很难维护和理解,我不认为,你会有大量的测试类型。