2015-02-23 37 views
7

我試圖爲我的登錄過程創建模擬。我使用POST方法與幾個字段和登錄對象(使用登錄名,密碼等) 爲此,我正在使用JsonPath。代碼如下: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"}, 

一切正常正好。

所以 - 如何檢查裏面的wiremock,使用matchesJsonPath如果給定的字段等於某個值? 如何在我的情況下將其應用於根域? 雖然我們在此 - 我有類似的問題,檢查值是否爲空。我試圖應用正則表達式等 - 沒有運氣。

回答

0

嘗試用雙點操作(遞歸) $ .. PARAMS [?(@。客戶機版本== 「1」)]

2

繼爲我工作。

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

JSON:

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

Wiremock

{ 
    "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

更新Wiremock。它應該適用於更新的版本> = 2.0.0-beta。它的JsonPath依賴關係非常過時(GitHub #261)。

使用雙點運算符在語義上並不相同,因爲過濾器也將匹配樹中較深的相同名稱的元素。