在没有嵌入式tomcat启动的情况下运行grails功能测试

时间:2014-10-20 11:22:39

标签: unit-testing tomcat grails testing run-app

我有一个项目,我通常使用grails run-app命令调试/运行。我想运行一个测试,但没有让服务器再次运行,仅用于特定的测试。

我通常在后台一直以调试模式运行服务器。

我已尝试使用iteli-j中的运行配置,最新尝试为grails test-app functional: className

2 个答案:

答案 0 :(得分:3)

在Grails 2.4.4中,如果覆盖baseUrl,则可以对localhost以外的服务器运行测试。例如,我们在AWS上托管了一个预生产服务器,我们在部署后作为冒烟测试从Jenkins运行我们的功能测试子集。

grails -plain-output test-app -baseUrl=https://foo.bar.org/ -echoOut -echoErr functional:

这样可行,但test-app仍然启动嵌入式tomcat服务器。但是,通过一些挖掘,我发现覆盖服务器主机以指向正在运行的实例将导致测试在不启动嵌入式tomcat的情况下运行。有几种方法可以实现这一目标:

在命令行上传递值:

grails -plain-output test-app -Dgrails.server.host=foo.bar.org -baseUrl=https://foo.bar.org/ -echoOut -echoErr functional:

或者,覆盖特定环境的Config.groovy中的值也应该有效:

...
preProd {
    ...
    grails.server.host = 'foo.bar.org'
    ...
}
...

它没有在test-app下记录,但它在run-app下提到,结果证明它也适用于test-app。

这是有效的,因为Grails通过尝试打开与服务器主机/端口的连接来确定是否应该启动嵌入式服务器,如果成功则跳过启动。

从试验和错误中我发现,当我同时指定grails.server.host-baseUrl时,即使基本网址成为冗余信息,我也能获得最佳效果。可能这是因为我的案例涉及ssl连接,但我尝试使用-https而不是-baseUrl=...运行,测试只是挂起。

答案 1 :(得分:1)

这个插件可能会帮助你。

Grails functional-test-development Plugin

此插件旨在通过促进针对已运行的应用程序运行测试,使Grails的开发功能测试更加方便。它利用Grails 1.3.5中添加的改进的功能测试支持,不适用于早期版本。