我正在尝试使用模式验证响应JSON。即使尝试使用错误的模式验证响应,测试用例也会通过。
JSON响应:
[
{
"downlinkBytes": 478,
"firstProcessTime": {
"millisSinceEpoch": 1501113600000,
"daysSinceEpoch": 17374,
"month": 7,
"year": 2017,
"day": 27
},
"sliceMonth": 5,
"sliceYear": 2017,
"totalBytes": 548,
"updatedProcessTime": {
"millisSinceEpoch": 1514764800000,
"daysSinceEpoch": 17532,
"month": 1,
"year": 2018,
"day": 1
},
"uplinkBytes": 54,
"key": {
"slicePeriod": {
"millisSinceEpoch": 1493596800000,
"daysSinceEpoch": 17287,
"month": 5,
"year": 2017,
"day": 1
},
"serviceProvider": "ABC"
}
}
]
JSON模式:
{
"type" : "array",
"items" : {
"downlinkBytes" : {"type" : "number", "required" : true},
"firstProcessTime" : {
"type" : "object",
"properties" : {
"millisSinceEpoch" : {"type" : "number", "required" : true},
"daysSinceEpoch" : {"type" : "number", "required" : true},
"month" : {"type" : "number", "required" : true},
"year" : {"type" : "number", "required" : true},
"day" : {"type" : "number", "required" : true}
}
},
"sliceMonth" : {"type" : "number", "required" : true},
"sliceYear" : {"type" : "number", "required" : true},
"totalBytes" : {"type" : "number", "required" : true},
"updatedProcessTime" : {
"type" : "object",
"properties" : {
"millisSinceEpoch" : {"type" : "number", "required" : true},
"daysSinceEpoch" : {"type" : "number", "required" : true},
"month" : {"type" : "number", "required" : true},
"year" : {"type" : "number", "required" : true},
"day" : {"type" : "number", "required" : true}
}
},
"uplinkBytes" : {"type" : "number", "required" : true},
"key" : {
"type" : "object",
"properties" : {
"server_imsi" : {"type" : "number", "required" : true},
"millisSinceEpoch" : {"type" : "number", "required" : true},
"daysSinceEpoch" : {"type" : "number", "required" : true},
"month" : {"type" : "number", "required" : true},
"year" : {"type" : "number", "required" : true},
"day" : {"type" : "number", "required" : true}
}
},
"serviceProvider" : {"type" : "string", "required" : true}
}
}
我预计这里会出现错误,因为响应不包含所需的served_imsi值。但考验正在通过。
Response response = RestAssured.given().when().get(getURL);
response.then().statusCode(Numbers.TWO_HUNDRED);
response.then().assertThat().body(JsonSchemaValidator.matchesJsonSchemaInClasspath("Schema.json"));
我找到了解决方案。它没有抛出错误的原因是因为Schema中没有提到id键。
更新的架构:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {
},
"id": "http://localhost:8080/xxx/abc/monthly/ABC/5/2017",
"items": {
"additionalProperties": false,
"id": "/items",
"properties": {
"downlinkBytes": {
"id": "/items/properties/downlinkBytes",
"type": "number"
},
"firstProcessTime": {
"additionalProperties": false,
"id": "/items/properties/firstProcessTime",
"properties": {
"day": {
"id": "/items/properties/firstProcessTime/properties/day",
"type": "number"
},
"daysSinceEpoch": {
"id": "/items/properties/firstProcessTime/properties/daysSinceEpoch",
"type": "number"
},
"millisSinceEpoch": {
"id": "/items/properties/firstProcessTime/properties/millisSinceEpoch",
"type": "number"
},
"month": {
"id": "/items/properties/firstProcessTime/properties/month",
"type": "number"
},
"year": {
"id": "/items/properties/firstProcessTime/properties/year",
"type": "number"
}
},
"required": [
"month",
"year",
"day",
"daysSinceEpoch",
"millisSinceEpoch"
],
"type": "object"
},
"key": {
"additionalProperties": false,
"id": "/items/properties/key",
"properties": {
"serviceProvider": {
"id": "/items/properties/key/properties/serviceProvider",
"type": "string"
},
"slicePeriod": {
"additionalProperties": false,
"id": "/items/properties/key/properties/slicePeriod",
"properties": {
"day": {
"id": "/items/properties/key/properties/slicePeriod/properties/day",
"type": "number"
},
"daysSinceEpoch": {
"id": "/items/properties/key/properties/slicePeriod/properties/daysSinceEpoch",
"type": "number"
},
"millisSinceEpoch": {
"id": "/items/properties/key/properties/slicePeriod/properties/millisSinceEpoch",
"type": "number"
},
"month": {
"id": "/items/properties/key/properties/slicePeriod/properties/month",
"type": "number"
},
"year": {
"id": "/items/properties/key/properties/slicePeriod/properties/year",
"type": "number"
}
},
"required": [
"month",
"year",
"day",
"daysSinceEpoch",
"millisSinceEpoch"
],
"type": "object"
}
},
"required": [
"serviceProvider",
"slicePeriod"
],
"type": "object"
},
"sliceMonth": {
"id": "/items/properties/sliceMonth",
"type": "number"
},
"sliceYear": {
"id": "/items/properties/sliceYear",
"type": "number"
},
"totalBytes": {
"id": "/items/properties/totalBytes",
"type": "number"
},
"updatedProcessTime": {
"additionalProperties": false,
"id": "/items/properties/updatedProcessTime",
"properties": {
"day": {
"id": "/items/properties/updatedProcessTime/properties/day",
"type": "number"
},
"daysSinceEpoch": {
"id": "/items/properties/updatedProcessTime/properties/daysSinceEpoch",
"type": "number"
},
"millisSinceEpoch": {
"id": "/items/properties/updatedProcessTime/properties/millisSinceEpoch",
"type": "number"
},
"month": {
"id": "/items/properties/updatedProcessTime/properties/month",
"type": "number"
},
"year": {
"id": "/items/properties/updatedProcessTime/properties/year",
"type": "number"
}
},
"required": [
"month",
"year",
"day",
"daysSinceEpoch",
"millisSinceEpoch"
],
"type": "object"
},
"uplinkBytes": {
"id": "/items/properties/uplinkBytes",
"type": "number"
}
},
"required": [
"key",
"totalBytes",
"updatedProcessTime",
"uplinkBytes",
"sliceMonth",
"downlinkBytes",
"sliceYear",
"firstProcessTime"
],
"type": "object"
},
"type": "array"
}
它现在可以正确验证。:)
有帮助的链接:
http://json-schema-validator.herokuapp.com/
https://jsonschema.net/#/editor
放心,当我们这样做时 抛出的错误总是连续的,也就是说,如果状态代码失败,它不会检查contentType是否是JSON。 此外,抛出的错误始终是,断言错误(预期:200,实际:404)。无法从中了解实际响应是什么,如果启用日志记录,它将打印在标准输出上,但其他任何方式都不可用。 是否有任何方法来构建或设置类似于我们如何实现<code>过滤器 我有一个 rest api 框架,其中大多数验证都是使用
在katalon studio中为我的测试用例添加了一个新的自定义关键字,我正在创建隐式等待,上面的代码使我能够接收一条NoTouchElement异常消息,但我不知道隐式等待中规定的时间是否完全有效。有人能帮我弄清楚吗?非常感谢你!
我有一个示例JSON响应 如何验证何时然后当然后 尝试过类似的东西,但它不起作用。 我错过了什么还是做错了什么?
我是大一新生,请放心。我有一个获取响应体的简单测试,我想验证响应体是否与我的POJO类匹配。 这是我的测试: 这是我的POJO类: 那么如何验证响应体结构等于我的POJO类呢? 提前感谢
有人能给我一个逐步描述如何基于cookie的身份验证工作吗?我从来没有做过任何涉及身份验证或cookie的事情。浏览器需要做什么?服务器需要做什么?按什么顺序?我们怎么保证东西安全?
null 我浏览了完整的flink仪表板,但我没有得到任何线索,如何检查是增量检查点正在发生还是完全检查点正在发生。请帮助我如何设置RocksDB的日志记录来了解增量检查点是否正在发生。我在文档中看到RocksDB日志记录会在性能和存储方面造成巨大的成本,这是为了测试目的,之后我将禁用它