t.me/atinfo_chat Telegram группа по автоматизации тестирования

Не удается распарсить response body (строка в json)

spring
json
Теги: #<Tag:0x00007f9c4d8e10e8> #<Tag:0x00007f9c4d8e0f80>

(Arina) #1

Доброе время суток

Есть контракт, который в респонз боди возвращает “blabla”
В спринг-клауд-контракт пишу

response {
        status 200
        body("blabla")
        headers {
            contentType(applicationJsonUtf8())
        }
    }

Но в ответ приходит ошибка

expected:<"[blabla]"> but was:<"["blabla"]">

Подскажите, пожалуйста, как туда еще кавычки добавить?

Экранирование в виде body("\"blabla\"") не помогло

Если писать body("[\"blabla\"]") -> com.jayway.jsonpath.InvalidPathException: Filter: [?] can not be applied to primitives. Current context is: blabla


(Vasiliy Rakshin) #2

Попробуйте одинарные кавычки.


(Arina) #3

body(‘blabla’) приводит

 expected:<"[blabla]"> but was:<"["blabla"]">

body(’“blabla”’) приводит

Test.java:[33,62] ')' expected
[ERROR]Test.java:[33,273] illegal start of expression
[ERROR] Test.java:[33,274] ';' expected
[ERROR] Test.java:[33,276] illegal start of expression

body('\"blabla\"') тоже к ошибке компиляции как выше


(Vasiliy Rakshin) #4

Я имел ввиду что-то типа этого: body("'blabla'")


(Arina) #5

если одинарные тогда

 expected:<"['blabla']"> but was:<"["blabla"]">

(Vasiliy Rakshin) #6

А что происходит при body("\"blabla\"") ? Как именно не помогает?


(Arina) #7

Превращает в assertThat(responseBody).isEqualTo(""blabla"");

В логах при сборке

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:testCompile (default-testCompile) on project: Compilation failure: Compilation failure: 
[ERROR] Test.java:[33,62] ')' expected
[ERROR] Test.java:[33,273] illegal start of expression
[ERROR] Test.java:[33,274] ';' expected
[ERROR] Test.java:[33,276] illegal start of expression

(Евгений) #8

body([blabla]) ?


(Arina) #9
Failed to execute goal org.springframework.cloud:spring-cloud-contract-maven-plugin:2.0.2.RELEASE:generateTests (default-generateTests) on project: Execution default-generateTests of goal org.springframework.cloud:spring-cloud-contract-maven-plugin:2.0.2.RELEASE:generateTests failed: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
[ERROR]Token.groovy: 21: unexpected token: ] @ line 21, column 227.
[ERROR]    blabla=])
[ERROR]                                  ^

(5am) #10

попробуйте сделать extract из body и ассертить полученный результат


(Arina) #11

можно ли такое сделать с помощью Spring Cloud Contract хороший вопрос, отпишусь потом, что вышло


(Arina) #12

в итоге было принято решение замокать контракт на голанге и все стало хорошо


(Vatslau) #13

такое впечатление
Если писать body("[\"blabla\"]") -> com.jayway.jsonpath.InvalidPathException: Filter: [?] can not be applied to primitives. Current context is: blabla

что вы ассертаете int (в массиве)
со строкой(в массиве)

responseBody - возможно нужно привести к json строке
часто бывает что тип ИМЯ_БИЛИОТЕКИ.ResponseBody