2017-06-28 6 views
0

私はスキーマを使用して応答JSONを検証しようとしています。 間違ったスキーマで応答を検証しようとしても、テストケースは合格です。JSON Scehma検証はどのようにして安心して動作しますか?

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")); 
+0

を、私は以下のエラーを参照してください。 警告:次のキーワードは不明で、無視されます:[downlinkBytes、firstProcessTime、key、serviceProvider、sliceMonth、sliceYear、totalBytes、updatedProcessTime、uplinkBytes] レベル: "警告" スキーマ:{"loadingURI": "file: D:/Workspaces/Testing/Target/classes/Schema/Schema.json# "、" pointer ":"/items "} ドメイン:"構文 " が無視されました:[" downlinkBytes "、" firstProcessTime "、" key " "serviceProvider"、 "sliceMonth"、 "sliceYear"、 "totalBytes"、 "updatedProcessTime"、 "uplinkBytes"] –

答えて

0

解決策が見つかりました。エラーを投げていない理由は、スキーマに記載されている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" 

}

は、スキーマを更新しました。 :)助け

リンク:与えられたJSONスキーマに一致するようにコンテンツ:デバッグオン

http://json-schema-validator.herokuapp.com/

https://jsonschema.net/#/editor

関連する問題