Функциональный тест Grails 2.2 для удаленной веб-службы, требующей содержимого JSON в запросе

Я использую Grails 2.2 и пишу функциональный тест для проверки ответа JSON, полученного от удаленной веб-службы. Веб-службе требуется, чтобы в запросе передавался некоторый контент JSON.

Когда я тестирую эту веб-службу с помощью такого инструмента, как «Почтальон», я получаю правильный ответ JSON.

Удаленный веб-сервис POST-запрос с JSON

Для этого я написал функциональный тестовый пример в Grails 2.2. Фрагмент моего примера кода приведен ниже.

import com.grailsrocks.functionaltest.*
import com.grailsrocks.functionaltest.client.APIClient

class RemoteWebServiceFunctionalTests extends TestCaseBase{

    void testPost() {
        post("http://remoteAddress:8080/services/getData", {
            param1 = "value1"
            param2 = "value2"
            ...
            ...
            param3 = "value3"
        })

        assertStatus 200
    }

    @Override
    Class getDefaultClientType() {
        APIClient
    }
}

Результат запуска тестового примера приведен ниже для справки.

|Running 1 functional test... 1 of 1
--Output from testPost--
Switching to browser client [default]
Creating to new client [default] of type [class com.grailsrocks.functionaltest.client.APIClient]

== Making request POST http://remoteAddress:8080/services/getData parameters: ==
param1: value1
param2: value2
...
...
param3: value3

== Request headers: ============================================================
== Content =====================================================================

================================================================================
== Response was 200 (OK) headers: ==============================================
Server: Apache-Coyote/1.1
Content-Type: application/json
Content-Length: 148
Date: Fri, 27 Mar 2015 17:36:33 GMT
================================================================================
== Content =====================================================================
{"errors":[{"Error0001":"Invalid request. Please refer to API definition"}],"result":null,"warnings":null}
================================================================================

Когда я запускаю тест, я возвращаю статус 200, но правильное содержимое ответа JSON не получено. Я думаю, что я не правильно форматирую запрос. Мне нужно знать правильный способ предоставления содержимого JSON для вызова удаленной веб-службы в функциональном тестовом примере.


person MSR    schedule 27.03.2015    source источник


Ответы (1)


Я нашел правильный способ предоставления JSON в теле для выполнения запроса POST.

import com.grailsrocks.functionaltest.*
import com.grailsrocks.functionaltest.client.APIClient

class RemoteWebServiceFunctionalTests extends TestCaseBase{

    void testPost() {

        post("http://remoteAddress:8080/services/getData") {

            headers['Content-Type'] = 'application/json'

            body {
                """
                {"param1":"value1","param2":"value2",...,"param3":"value3"}
                """
            }
        }

        assertStatus 200

        // assuming that the POST method is sending a response with the original request content,
        // similar to the sample web service available at "http://httpbin.org/post"
        assertContentContains "param1"

    }

    @Override
    Class getDefaultClientType() {
        APIClient
    }
}
person MSR    schedule 27.03.2015