代码之家  ›  专栏  ›  技术社区  ›  djc

渐变任务依赖关系:“运行集成测试”与“部署、运行集成测试、终止部署”

  •  0
  • djc  · 技术社区  · 6 年前

    我有一个稍微复杂的部署任务和一个集成测试任务。目前,我的集成测试任务依赖于部署任务。但是,我想为集成测试任务提供一种包装任务,这样我就可以构建一个任务,以针对当前正在运行的任何内容运行集成测试。 要部署的任务,运行集成测试,然后再次执行部署。

    这是当前状态:

    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 然后还有一个运行的测试 开始Web应用程序节点 然后 执行集成测试 ,然后再次关闭节点?

    1 回复  |  直到 6 年前
        1
  •  1
  •   M.Ricciuti    6 年前

    有一种更简单的方法:使用两个主要任务来运行集成测试:

    • 第一个(你的电流 integrationTest 任务)以独立方式(不部署/关闭)执行测试,
    • 第二个(你的电流 runIntegrationTests 任务)包装第一个任务,并处理部署/关闭节点。

    1)删除 dependsOn 之间的依赖关系 积分试验 任务和 startWebappNodes

    =>您可以执行此操作 积分试验 以“独立”方式执行任务( 针对当前正在运行的内容 )

    ./gradlew integrationTest
        // execution of dependent task 
    
      > Task :integrationTest
        // .. test executing...
    

    2)更新你的 运行集成测试 使之成为现实的任务取决于两者 积分试验 开始Web应用程序节点 任务,并添加一个约束 开始Web应用程序节点 前执行 积分试验 使用 mustRunAfter

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

    =>执行任务时 运行集成测试 它将启动节点,执行集成测试,然后关闭节点

    ./gradlew runIntegrationTests
        // execution of dependent task 
    
      > Task :startWebappNodes
    
      > Task :integrationTest
        // .. test executing...
    
      > Task :runIntegrationTests
        Integration tests running finished