概要
WireMockのPOSTリクエストのbodyPatternsのJSONの書き方についてまとめます。
root
┣ __files
┃ ┗ response.json
┃
┗ mappings
┗ request.json <-- 該当ファイル
request.jsonの全体の書き方については、WireMockのレスポンスマッピングファイルの書き方まとめを参照してください。
POSTリクエストファイルの内容について
POSTリクエストファイルは以下のような内容で記述されます。
{
"request": {
"urlPath": "/sample",
"method": "POST",
"bodyPatterns": [
{
"equalToJson": "{\"element_int\": 8, \"element_str\": \"string\", \"element_bool\": true }"
}
]
},
"response": {
"status": 201,
"bodyFileName": "response.json",
"headers": {
"Content-Type": "application/json"
}
}
}
この bodyPatterns
についてまとめます。
Key | Value |
---|---|
equalToJson | 完全一致するJSON |
matchesJsonPath | "$.name" などのようにJSON内に存在するキー |
equalToJsonについては、完全一致するJSONに対応します。
matchesJsonPath
matchesJsonPathに指定できる要素はパターンが複数あり、以下の通りです。
要素が一致する場合
"bodyPatterns": [
{
"matchesJsonPath": "$.element_str"
}
]
要素に設定されている値が一致する場合
以下の2パターンで記述できます。
パターン1
"bodyPatterns": [
{
"matchesJsonPath": "$[?(@.element_int == 8)]"
}
]
数値の場合 @.element_int >= 10
といった指定もできます。
パターン2
"bodyPatterns": [
{
"matchesJsonPath": {
"expression": "$.element_int",
"equalTo": "8"
}
}
]
パターン2はequalTo
をmatches
やdoesNotMatch
に変更して正規表現で一致、不一致を定義することができます。(contains
やdoesNotContain
も使用可能)
要素数が一致する場合
"bodyPatterns": [
{
"matchesJsonPath": "$[?(@.element_obj.size() == 2)]"
}
]
element_obj内の要素が2つの場合に一致します。
要素が存在する場合
"bodyPatterns": [
{
"matchesJsonPath": {
"expression": "$.element_int",
"absent": true
}
}
]
任意パラメータが指定されている場合に一致することができます。
"absent": false
にした場合、nullにも一致します。
absentについては、queryParameters
でも指定可能です。
時間の範囲指定をする場合
"bodyPatterns": [
{
"matchesJsonPath": {
"expression": "$.element_date",
"and": [
{
"before": "2025-01-01T00:00:00"
},
{
"after": "2024-01-01T00:00:00"
}
]
}
}
]
上記の書き方をうまく組み合わせて条件を指定をすることで、ある程度のリクエストは網羅できそうです。