2

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

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

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

4

2 回答 2

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即使基本 url 成为冗余信息,我也会得到最好的结果。可能这是因为我的案例涉及 ssl 连接,但我尝试使用而不是运行,-https-baseUrl=...测试只是挂起。

于 2016-11-23T20:15:35.343 回答
1

这个插件可能会帮助你。

Grails 功能测试开发插件

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

于 2014-10-20T15:46:20.787 回答