【问题标题】:How to run integration task after run task in gradle?如何在 gradle 中运行任务后运行集成任务?
【发布时间】:2017-07-04 09:22:12
【问题描述】:

我的应用程序是 Spring boot 应用程序,暴露了一些 rest api

要运行我的集成测试,首先应用程序需要启动并运行,因为我的应用程序基于 gradle,如何确保当我从命令提示符执行 gradle 命令时,首先运行应用程序并且集成测试将运行。

task integration(type: Test, description: 'Runs the integration tests.', group: 'Verification') {
    testClassesDir = sourceSets.integration.output.classesDir
    classpath = sourceSets.integration.runtimeClasspath
    outputs.upToDateWhen { false }
}

task appRunAndIntegrtationTest {
    dependsOn 'run'
    dependsOn 'integration'
    tasks.findByName('integration').mustRunAfter 'run'
}

我在 build.gradle 中添加了上面的代码,但应用程序启动并运行,仅此而已,集成测试没有运行,任何人都可以对此有所了解。

更新:@Strelok,如前所述,应用程序已启动且集成任务未运行。

更新 1:我找到了一个 gradle 插件

https://github.com/marc0der/gradle-spawn-plugin

我正在尝试像下面这样使用

task startServer(type: SpawnProcessTask, dependsOn: 'assemble') {
    command "java -jar ${projectDir}/build/libs/example.jar"
    ready 'Started Application'
}

task stopServer(type: KillProcessTask)

但正在低于异常

*> 无法为 org.gradle.api.Project 类型的根项目“example-api”获取未知属性“SpawnProcessTask”。 * 尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。*

请有人对此提出建议

【问题讨论】:

  • 什么?清除您的帖子
  • @Edwin,没有收到您的评论。
  • 修改您的帖子 - 无法理解!
  • 您的集成任务需要依赖运行的应用。
  • 您的帖子中没有足够的信息,但是如果您的 run 任务是 bootRun 类型的任务,那么它在应用程序终止之前不会完成,所以任何依赖它的东西都不会在它停止之前运行.此时您的测试显然不会运行。在开始测试之前,您需要分叉应用程序执行并留出足够的时间来启动它。

标签: java spring spring-boot gradle build.gradle


【解决方案1】:

我建议一种不同的方法:从您的测试框架启动和停止您的应用程序。测试框架支持测试套件的设置和清理步骤(例如 JUnit 中的 BeforeClassAfterClass),在设置步骤中启动应用程序并在清理步骤中停止它。这种方法将使您的测试更加独立,它们的成功/失败将不取决于测试代码之外的因素。

即使您更喜欢在测试框架之外运行应用程序,我建议将这个逻辑(即启动应用程序、运行测试、停止应用程序)包装在 Java 类中,并通过以下任务从 Gradle 执行该类输入JavaExec。这将比通过 Gradle 任务处理所有这些要清楚得多。

最后,如果你仍然坚持 Gradle 任务,就像评论者所说的:“运行”任务可能会在应用运行时阻塞执行。处理这个问题的唯一明智方法是让一个任务在后台启动应用程序,另一个在测试完成后停止它(使用finalizedBy)。

【讨论】:

    【解决方案2】:

    您应该声明集成测试任务需要依赖于您的应用运行任务。

    appRun 只是一个示例,请使用作为集成测试前导任务的名称。

    integration.dependsOn appRun
    integration.mustRunAfter appRun
    

    另外,您的应用可能正在运行并阻止您的 Gradle 构建进度,构建是否真正完成或者它只是挂起直到应用停止运行?

    【讨论】:

    • 我有这个问题。我正在尝试在 dependsOn 中运行“gulp watch”,但它似乎阻碍了 gradle 的进展。有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多