Gradle任务依赖性:“运行集成测试”与“部署,运行集成测试,终止部署”

时间:2019-01-03 13:02:59

标签: gradle build.gradle

我有一个比较复杂的部署任务以及一个集成测试任务。目前,我的集成测试任务取决于部署任务。但是,我想为集成测试任务提供某种包装任务,以便我可以构建一个任务,以针对当前正在运行的 和要部署,运行的任务运行集成测试集成测试,然后再次取消部署。

这是当前状态:

task integrationTest(type: Test, dependsOn: "startWebappNodes") {
  testClassesDirs = sourceSets.integrationTest.output.classesDirs
  classpath = sourceSets.integrationTest.runtimeClasspath
  outputs.upToDateWhen { false }
}

task runIntegrationTests(type: Exec, dependsOn: "integrationTest") {
    commandLine 'docker-compose', 'down'
    doLast {
        println "Integration tests running finished"
    }
}

我该如何写一个名为executeIntegrationTest的任务,它不依赖于startWebAppNodes来执行集成测试,然后又有一个运行startWebAppNodes然后运行{{1 }},然后再次关闭节点?

1 个答案:

答案 0 :(得分:1)

有一个简单的方法:使用两个主要任务来运行IntegrationTest:

  • 第一个以独立方式(无需部署/关闭)执行测试的任务(您当前的integrationTest任务),
  • 第二个任务(您当前的runIntegrationTests任务)包装第一个任务,并处理部署/关闭节点。

1)删除dependsOn任务和integrationTest之间的startWebappNodes依赖关系

=>您可以以“独立”方式执行此integrationTest任务(针对当前正在运行的任何内容

./gradlew integrationTest
    // execution of dependent task 

  > Task :integrationTest
    // .. test executing...

2)更新您的runIntegrationTests任务以使其同时依赖于integrationTeststartWebappNodes任务,并添加约束以使startWebappNodes在{{1}之前执行},使用integrationTest

mustRunAfter

=>执行任务task runIntegrationTests(type: Exec) { group "test" dependsOn startWebappNodes dependsOn integrationTest commandLine 'docker-compose', 'down' doLast { println "Integration tests running finished" } } integrationTest.mustRunAfter startWebappNodes 时,它将启动节点,执行集成测试,然后关闭节点

runIntegrationTests