Testing 如何定义仅限于包的测试任务?
我有一个带测试的gradle项目。测试分为两个包。我想有每个包的测试任务 我在格拉德尔的项目: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
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,这是不好的,因为这个解决方案可能会变得难以维护和理解,而且我认为,您不会有大量的测试类型