Тестирование API Каратэ - Как мы извлекаем значения из Content-Type: text / html вид ответа? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть запрос, который включает в себя запрос graphQL в теле.

Когда я отправляю его, он возвращает ответ с Content-Type → text / html;charset = utf-8 и некоторые другие обычные заголовки.Ответ txt / html обычно включает две вещи:

  1. ColDefs в качестве первой строки
  2. метаданные во второй строке

Теперь мне нужно проверить, чтоColDefs появляется всегда в первом ряду.Вторая строка содержит метаданные.

Как мне убедиться, что первая строка ответа всегда содержит colDefs, а вторая строка содержит информацию метаданных?

Ответ:

{"colDefs": [{"entityAttributeId": "abc", "headerName": "xyz", "field": "2", "entityPath": ""," entityId ":" mna "}, {" entityAttributeId ":" abc "," headerName ":" abc "," field ":" 3 "," entityPath ":" abc "," entityId ":" abc"}

]} {" 1 ":" 1000 "," 2 ":" abc "," 3 ":" abc "," 4 ": 12," 5 ":" 6457.T ", "6": "123", "7": "abc"} {"1": "123", "2": "abc", "3": "abc", "4": 123, "5":" 123 "," 6 ":" "," 7 ":" abc "}

Когда я пытаюсь распечатать, ответ каратэ не печатает второй ряд(метаданные) содержимое, это просто печать colDefs.

Ответ каратэ:

{"colDefs": [{"entityAttributeId": "abc", "headerName": "xyz", "field": "2", "entityPath": "", "entityId": "mna"}, {"entityAttributeId": "abc", "headerName": "abc", "field":"3", "entityPath": "abc", "entityId": "abc"}

Шаги для репликации:

URL-адрес: некоторые URL-адреса

Заголовки: Content-Type = 'application / json'
(отправка явно в функции каратэ),

Тело запроса {

    "query": "query($someid: [String]) {some(someid:$someid) {someid someNm someVariable {someVariable someVariableid otherVariable{ otherVariable1 { variable CUSIP issuer { someVariable2 }}}}}}",
    "variables": {
        "someid": ["1090"]
    },
    "includeMetadata": false
}       

Заголовок ответа: Соединение → keep-alive Content-Length → 86488 Content-Type → text / html;charset = utf-8

Тело ответа:

{
    "colDefs": [{
        "entityAttributeId": "abc",
        "headerName": "xyz",
        "field": "2",
        "entityPath": "",
        "entityId": "mna"
    }, {
        "entityAttributeId": "abc",
        "headerName": "abc",
        "field": "3",
        "entityPath": "abc",
        "entityId": "abc"
    }

]
} {
    "1": "1000",
    "2": "abc",
    "3": "abc",
    "4": 12,
    "5": "6457.T",
    "6": "123",
    "7": "abc"
} {
    "1": "123",
    "2": "abc",
    "3": "abc",
    "4": 123,
    "5": "123",
    "6": "",
    "7": "abc"
} 

Ответ каратэ:

{"colDefs": [{"entityAttributeId": "abc "," headerName ":" xyz "," field ":" 2 "," entityPath ":" "," entityId ":" mna "}, {" entityAttributeId ":" abc "," headerName ":" abc"," field ":" 3 "," entityPath ":" abc "," entityId ":" abc "}

1 Ответ

0 голосов
/ 14 декабря 2018

Очевидно, что ваш ответ не является допустимым JSON и в каком-то проприетарном формате - и ожидая, что Каратэ магически преобразует его для вас, вы ожидаете слишком многого:)

Я предлагаю вам написать некоторый код Java для выполнения пользовательской проверки.Здесь происходит то, что каратэ старается изо всех сил - может получить половину ответа, проанализированного как JSON, и разочаровывается в остальном.Вы действительно должны это ценить:)

Поскольку каратэ также сохраняет копию необработанного ответа в виде байтов (версия 0.9.0 и выше), вы можете сделать это:

* string temp = responseBytes

Теперь используйтенекоторый Java-код или пользовательский анализ строки - и выполните все ваши требования к temp, который будет Java String.Я должен сказать, что это выглядит как ОЧЕНЬ плохо разработанный API.

...