如何使用gradle从另一个子项目对Web项目运行集成测试

时间:2014-12-11 15:00:42

标签: java gradle build.gradle gretty

我有一个gradle multi项目,我的war文件是在一个子项目中构建的,我的集成测试在不同的子项目中。我已经读过gretty应该能够启动一个jetty实例让我在构建期间运行集成测试,但我无法弄清楚如何将gretty integrationTestTask任务“连接”到我的其他子项目中的任务,从那里进行实际测试将会运行。

我的项目结构如下:

root/
    int-test/
        build.gradle
    web/
        build.gradle
    build.gradle
    settings.gradle

文件内容

根/ settings.gradle:

include ':web'
include ':int-test'

根/的build.gradle:

apply plugin: 'java'

根/网络/的build.gradle:

apply plugin: 'war'
apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'

gretty {
    contextPath = '/'
    integrationTestTask = 'intTests'
}

task intTests << {
    println 'This task will run in just the right time'
}

根/ INT-测试/的build.gradle:

apply plugin: 'java'

task intTests << {
    println 'All integration testing is done in here'
}

当我运行“./gradlew -q intTests”时,这是输出:

All integration testing is done in here
2014-12-11 15:37:02.046 INFO  - Logging initialized @1157ms
2014-12-11 15:37:02.554 INFO  - jetty-9.2.3.v20140905
2014-12-11 15:37:02.682 WARN  - ServletContainerInitializers: detected. Class hierarchy: empty
2014-12-11 15:37:03.114 INFO  - Started o.a.g.JettyWebAppContext@7da22e4a{/,file:/Users/fredrik/callista/dev/grettyfitnesse/web/build/inplaceWebapp/,AVAILABLE}
2014-12-11 15:37:03.130 INFO  - Started ServerConnector@2590ae17{HTTP/1.1}{0.0.0.0:8080}
2014-12-11 15:37:03.130 INFO  - Started @2245ms
2014-12-11 15:37:03.137 WARN  - Jetty 9.2.3.v20140905 started and listening on port 8080
2014-12-11 15:37:03.158 WARN  -  runs at:
2014-12-11 15:37:03.159 WARN  -   http://localhost:8080/
This task will run in just the right time
2014-12-11 15:37:03.221 INFO  - Stopped ServerConnector@2590ae17{HTTP/1.1}{0.0.0.0:8080}
2014-12-11 15:37:03.229 INFO  - Stopped o.a.g.JettyWebAppContext@7da22e4a{/,file:/Users/fredrik/callista/dev/grettyfitnesse/web/build/inplaceWebapp/,UNAVAILABLE}
2014-12-11 15:37:03.232 WARN  - Jetty 9.2.3.v20140905 stopped.
Server stopped.

因此,Web项目中的intTests任务将在正确的时刻运行,但int-test项目中的intTests任务将运行到早期(在Web服务器启动之前)。 如何设置它以便gretty插件“连接”到我的int-test项目中定义的intTests任务?

我尝试过的事情: *设置“integrationTestTask =':int-test:intTests'”希望指定gretty应该在哪个子项目中寻找正确的任务就足够了。结果 - 码头甚至没有启动。 *在root build.gradle中创建intTests任务,尝试在int-test中扩展该任务。结果 - 没有区别。 *在web项目的intTests任务中添加了dependsOn(“:int-test:intTests”)。结果 - 没有区别

1 个答案:

答案 0 :(得分:0)

首先,检查gretty.integrationTestTask = ":int-test:intTests"是否有效。如果没有,请将以下内容添加到int-tests/build.gradle

intTests {
    dependsOn(":web:taskThatStartsTheWebServer")
    finalizedBy(":web:taskThatStopsTheWebServer")
}

(您可以在Gretty文档或gradle tasks的输出中找到任务名称。)

请注意,它是task foo { dependsOn "bar" },而不是task foo << { dependsOn "bar" }。最近的Gradle版本将检测到此错误并使构建失败。