2011-08-17 76 views
6

我想测试我的web服务安全为以下:测试REST风格的JSON Grails的web服务

  • urlMapping中正确的,所以有以下服务可用与否?
  • 测试GET/POST/PUT/DELETE和登录时,他们呈现的反馈以及错误
  • 测试错误消息和

未登录有人可以给我一些提示如何做到这一点?我不知道如何访问grails安全服务,以及在登录和不登录时对我的控制器运行测试。还有,我需要一些模拟服务器或其他东西来测试我的控制器或?

对不起,我是很新的这个话题,但我想在我的web服务失去控制之前在正确的方向走。

谢谢你的帮助!

回答

7

我们使用REST Client插件与functional testing插件一起测试所有的web服务。

例如...

void testCreateTag() { 
    def name = 'Test Name' 
    def jsonText = """ 
     { 
      "class":"Tag", 
      "name":"${name}" 
     } 
     """ 

    post('/api/tag') { 
     headers['x-user-external-id'] = securityUser.externalId 
     headers['x-user-api-key'] = securityUser.apiKey 
     headers['Content-type'] = 'application/json' 
     body { 
     jsonText 
     } 
    } 

    def model = this.response.contentAsString 
    def map = JSON.parse(model) 

    assertNotNull(map.attributes.id) 

    Tag.withNewSession { 
     def tag = Tag.get(map.attributes.id) 

     assertNotNull(tag) 
     assertEquals(name, tag.name) 
    } 
} 
0

我有类似的代码,它使用内置的(常规1.8)JsonSlurper,我认为可能是更可靠的,只需要在功能测试插件,但不是REST客户端插件。

String baseUrlString = 'http://localhost:8080/**YOURAPP**' 

    baseURL = baseUrlString 

    post('/j_spring_security_check?') 

    assertStatus 200 
    assertContentDoesNotContain('Access Denied') 

    get("/*your test URL*/") 

    def jsonObj = new JsonSlurper().parseText(this.response.contentAsString) 
    assertEquals(jsonObj.your.object.model, **yourContent**)