web-dev-qa-db-ja.com

JsonPathのデータとwiremockのマッチング

ログイン手順のモックを作成しようとしています。 POSTメソッドといくつかのフィールドとログインオブジェクト(ログイン、パスワードなど)を使用します。そのためにJsonPathを使用しています。以下のコード:

{
"request": {
        "method": "POST",
        "url": "/login",
        "bodyPatterns" : [
                {"matchesJsonPath" : "$.method"},
                {"matchesJsonPath" : "$.params[?(@.clientVersion == "1")]"},
                {"matchesJsonPath" : "$.params.login"},
                {"matchesJsonPath" : "$.params.password"}
         ]
    },
    "response": {
            "status": 200,
            "bodyFileName": "login.json"
    }
}

例に似ているので、clientVersionをチェックしています。

私の問題は、与えられたteでPOST JSON:

{
    "method": "login",
    "params": {
        "clientVersion": "1",
        "login": "[email protected]",
        "password": "681819535da188b6ef2"
    }
}

404を受け取ります。ただし、変更すると

{"matchesJsonPath" : "$.params[?(@.clientVersion == "1")]"},

通常に

{"matchesJsonPath" : "$.params.clientVersion"},

すべてが正常に機能します。

だから-与えられたフィールドがある値に等しい場合にmatchesJsonPathを使用して、wiremockの内部をチェックする方法は?私の場合、メソッドのようなルートフィールドにそれを適用するにはどうすればよいですか?そして、私たちがそれに取り組んでいる間、値がnullでないかどうかをチェックする際に同様の問題が発生しました。正規表現などを適用してみましたが、運が悪かったです。

10
a_dzik

Wiremockを更新します。新しいバージョン> = 2.0.0-betaで動作するはずです。その JsonPath 依存関係は非常に時代遅れでした( GitHub#261 )。

二重ドット演算子の使用は意味的に同じではありません。これは、フィルターがツリーのより深い位置にある同じ名前の要素にも一致するためです。

2
w177us

以下は私のために働いた。

"matchesJsonPath" : "$.rootItem.itemA[0].item..[?(@.fieldName=='file')]"

Json:

{
    "rootItem" :  {
          "itemA" : [
              {
                 "item" : {
                     "fieldName" : "file",
                     "name" : "test"
                 }
              }
          ]
    }
}

ワイヤーモック

{
  "request" : {
    "urlPattern" : "/testjsonpath",
    "method" : "POST",
    "bodyPatterns" : [ {
      "matchesJsonPath" : "$.rootItem.itemA[0].item..[?(@.fieldName=='file')]"
    } ]
  },
  "response" : {
    "status" : 200,
    "body" : "{\"result\": \"success\"}",
    "headers" : {
      "Content-Type" : "application/json"
    }
  }
}
2
user3485561

私の場合は機能しています:

ワイヤーモック:

"request": {
"urlPathPattern": "/api/authins-portail-rs/authins/inscription/infosperso",
"bodyPatterns" : [
  {"matchesJsonPath" : "$[?(@.nir == '123456789')]"},
  {"matchesJsonPath" : "$[?(@.nomPatronyme == 'aubert')]"},
  {"matchesJsonPath" : "$[?(@.prenoms == 'christian')]"},
  {"matchesJsonPath" : "$[?(@.dateNaissance == '01/09/1952')]"}

],
"method": "POST"

}

Json:

{
    "nir": "123456789",
    "nomPatronyme": "aubert",
    "prenoms": "christian",
    "dateNaissance": "01/09/1952"
}
2
BM Marwa

ダブルドット演算子(再帰)で試してください$ .. params [?(@。clientVersion == "1")]

0
Kragh