2015-02-23 20 views
7

Próbuję utworzyć makiety dla mojej procedury logowania. Używam metody POST z kilkoma polami i obiektem logowania (z loginem, hasłem itp.). Do tego używam JsonPath. Kod poniżej:Dopasowywanie danych w JsonPath z wiremockiem

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

Sprawdzam clientVersion, ponieważ jest podobny do przykładów.

Moim problemem jest to, że te z danym stanowisku JSON:

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

otrzymam 404. Jednak, kiedy zmienić

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

do normalnych

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

wszystko działa w porządku.

A więc - jak sprawdzić wnętrze drutu, używając matchJsonPath, jeśli podane pole jest pewne? Jak zastosować ją do pola głównego, tak jak w moim przypadku? I chociaż jesteśmy przy tym - miałem podobne problemy z sprawdzaniem, czy wartość nie jest zerowa. Próbowałem stosować wyrażenia regularne i takie - bez powodzenia.

Odpowiedz

0

spróbować z podwójnym operatora kropki (rekurencyjne) $ .. params [? (@. ClientVersion == "1")]

2

Obserwowany pracował dla mnie.

"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

Aktualizacja Wiremock. Powinien działać z nowszymi wersjami> = 2.0.0-beta. Jego zależność JsonPath była bardzo nieaktualna (GitHub #261).

Używanie operatora podwójnych kropek jest semantycznie różne, ponieważ filtr będzie również dopasowywany dla elementów o tej samej nazwie w głąb drzewa.