我有一个放心的回复,其中包含以下正文:
{
"content":[
{
"id":"7db80896",
"secondaryId":"12F9BD",
"version":1,
"details":{
"status":"VALID",
"reason":"Passed validations"
},
"subscriptionStatuses":[
{
"subscriptionId":"b8003508",
"subscriptionName":"Sub_1",
"creator":"Person 1",
"details":{
"status":"ACCEPTED",
"reason":"Passed validations"
}
},
{
"subscriptionId":"b8003509",
"subscriptionName":"Sub_2",
"creator":"Person 1",
"details":{
"status":"ACCEPTED",
"reason":"Passed validations"
}
}
]
},
{
"id":"7db80895",
"secondaryId":"11F9BD",
"version":1,
"details":{
"status":"VALID",
"reason":"Passed validations"
},
"subscriptionStatuses":[
{
"subscriptionId":"b8003509",
"subscriptionName":"Sub_2",
"creator":"Person 2",
"details":{
"status":"ACCEPTED",
"reason":"Passed validations"
}
}
]
}
]
}
我想验证嵌套在2个数组中的状态“已接受”和原因“已通过验证”。我尝试将原因存储为列表,在此示例中进行了概述,但我收到以下错误:
代码: 变量列表: 列表
错误:java.lang.IllegalStateException:response.jsonPath()。getList(“reason”)不得为空
有没有办法做到:
for obj in response:
for obj2 in obj.subscriptionStatuses:
assertThat(obj2.status == expected)
assertThat(obj2.reason == expected)
您可以使用以下代码获得它
List<String> m1 =response.jsonPath().get("content.subscriptionStatuses.details");
System.out.println(m1);
输出将显示[[{状态=接受,原因=通过验证},{状态=接受,原因=通过验证}],[{状态=接受,原因=通过验证}]]
有一种方法:将响应反序列化为对象。创建与响应匹配的类。
例如
class Status {
private String id;
private String secondaryId;
//etc.
private StatusDetail details;
private List<SubscriptionStatus> subscriptionStatuses;
}
…等等。我不知道这在静态编程语言中会是什么样子,但会很相似。
请注意,JSON响应中的嵌套对象是它们自己的类,每个类中的字段名应该与JSON中的字段名称匹配。
然后,您可以使用< code>ObjectMapper进行反序列化。您可能需要执行< code>response.jsonPath()。getList("$。content”)首先,但我不知道你的回应对象是什么,以提供比这更多的指导。更好的做法是,直接获取JSON字符串:
List<Status> statuses = new ObjectMapper().readValue(jsonString,
new TypeReference<List<Status>>() {})
请注意,您可以重复使用对象映射器
,并且不应每次都创建一个新的对象映射器,并且对象映射器
也有允许空值的选项。
我有一个与 Rest Assured 中的响应正文验证相关的问题。让我们假设,我有一个像json这样的响应体。 我需要检查: 如果图书部分包含儿童类型 如果一本儿童类书籍的自动名称为Eric 第一个断言可以是这样的: 但是我需要检查它的作者的名字是否是威廉。有没有办法使用jsonPath检查它? 我假设,我可以做反序列化(例如,x. List
我有一个关于Rest保证的问题。-https://code.google.com/p/rest-assured/wiki/Usage 我知道我可以使用REST保证进行HTTP调用(. get. put等)。)并使用时()等验证响应。我想验证我已经保存在数据库中的JSON响应,而不是实时调用Web服务并验证它的响应。 我可以使用REST-保证加载JSON响应作为字符串并验证它吗?
我得到的是HTML格式的endpoint响应,我需要验证标记中的某些json。HTML响应如下所示: 我想在json响应中验证以下内容: 和 如何实现?
我试图断言Json响应在我的jmetm使用Beanshell断言。下面是我的代码。 下面是我必须验证的Json路径 运行脚本后,我得到以下脚本。 断言失败消息:org。阿帕奇。乔芬。util。JMeterException:调用bsh方法时出错:评估源文件:内联评估:``导入组织。json。JSONObject;导入组织。json。杰索纳雷;导入java。lang.String;…'':类型化变量
我有一个返回JSON的endpoint,如下所示: 和DTO类: 现在,我用这种方法测试返回的json数组的长度: 但是,有没有什么方法可以在不强制转换到FooDto数组的情况下完成它?类似这样:
我试图在Spring MVC Web服务返回的JSON结果中验证LocalDate对象,但我不知道如何验证。 目前,我总是遇到如下断言错误: java.lang.AssertionError: JSON路径" $[0]。“开始日期”应为:是 我的测试的重要部分发布在下面。任何想法如何修复测试以通过? webservice返回一个视图对象列表,如下所示: [编辑] 另一次尝试是 导致 java.la