Grails功能测试插件和RESTful测试

时间:2014-02-19 23:02:28

标签: grails functional-testing

我刚刚抓住了functional testing plugin的最新版本,至少从文档来看,它的重点已经发生了一些变化。这不是一件坏事。 HtmlUnit集成很好。但是现在,关于REST服务的RESTful测试的文档中没有任何内容。但是,我以前用functionaltestplugin.FunctionalTestCase做的事情仍然有用,这很好。

例如:

void testCertifyEmployerCertifierNotFound() {

      post('/employerCertification/certifyEmployer') {
        headers['Content-Type'] = 'application/json'
        body {
          """
          {
            'employerName': 'ACME',
            'certifierExteralId': '1234556',
            'certifyingUserId': '123445'
          }
          """
        }
      }
      assertStatus 200
      assertContentType "application/json"
      def model = this.response.contentAsString
      def map = JSON.parse(model)
      assertFalse(map.success)
      assertNotNull(map.errorCode)
      assertTrue(map.errorCode == EmployerCertificationService.ERROR_RESPONSE.CERTIFIER_NOT_FOUND.toString())
}

这个插件仍然是"事实"用于功能性Web服务测试的插件,我的上述方法仍然有效吗?

3 个答案:

答案 0 :(得分:3)

如果您的目标正在测试REST请求/响应,我建议您使用rest client builder plugin。您不需要复杂的浏览器模拟插件。安装后只需两步即可使用它:

添加事件以管理 scripts / _Events.groovy 中的功能测试:这是一个系统grail文件,用于在运行时挂钩某些事件。只需复制并粘贴此代码段即可:

eventAllTestsStart = {
    if (getBinding().variables.containsKey("functionalTests")) {
        functionalTests << "functional"
    }
} 

现在您可以在 test / functional 文件夹中创建功能测试,记住使用Spec结束文件名,如果您忘记了,grails将找不到任何测试。 这是一个例子:

import grails.plugins.rest.client.RestBuilder
import spock.lang.Specification

    class AuthenticationSpec extends Specification {

        String baseUrl = "http://localhost:8080/grouply-backend"

        void "test login wrong credentials"() {

            given: 
            RestBuilder restBuilder = new RestBuilder()

            when: "sending wrong credential"
            def response = restBuilder.post("${baseUrl}/auth/login") {
            json {
                username = 'foo'
                password = 'bar'
                }
            }

            then: "authentication http error should happen"
            response.status == 401
        }
    }

使用$ grails test-app functional:

运行测试

答案 1 :(得分:0)

我刚才想同时使用functional testing pluginwebtest plugin几乎电流的Grails 2.4.2,我感到非常难过,报告说,他们都borked。 :(

功能测试插件现在已经被放弃了至少9个月。 2013年12月,我们报告了使用此插件无法正常工作编写所有测试的critical bug。直到我写这篇文章的那天,插件开发人员都没有回应。作为这个开发人员,Marc Palmer switched to iOS development and consultancy in August 2014我不相信这个bug会被解决。

Webtest插件上次更新超过3年,它“需要Grails 1.2.RC2 +”。我遇到了运行它时遗漏webtest.jar的丑陋错误,看起来这个插件还没有更新到当前的Grails版本。它的语法也不像Groovy那样不好看。

幸运的是Geb integration for Grails plugin应该适用于当前的Grails版本。 :)事实上,与Grails 2.3.1+一起使用,截至2014年6月,这些单词的最后一次更新已经更新为Grails 2.4.3。example tests project已更新为Grails 2.4.3 ,几天前已经发布,所以它是最新的。但是我还没有使用过这个项目。另外看一下示例代码我不确定它是RESTful API测试的最佳选择 - 它更像是一个GUI Web应用程序测试工具..

答案 2 :(得分:0)

虽然可能不是非常“grails风格”,但我想应该可以使用spring上下文启动整个堆栈并使用apache HttpClient运行集成休息测试。