我有一个项目,我通常使用 grails run-app
命令调试/运行该项目。我想运行一个测试,但不想让服务器仅为特定测试再次运行。
我通常在后台一直以 Debug模式运行服务器。
我试过使用 iteli-j 中的运行配置,最近的尝试是 grails test-app functional: className
最佳答案
在 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=...
运行并且测试只是挂起。
关于unit-testing - 在没有启动嵌入式 tomcat 的情况下运行 grails 功能测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26464493/