2017-09-21 1 views
1

J'utilise l'outil d'automatisation de karaté pour l'automatisation des services .. et j'essaie d'extraire id du département de la réponse JSON que j'ai stocké dans la variable ...unabel pour localiser l'élément de JSON

def departmentId = getstorewalk . .departments [*] id

getstorewalk est ma variable dans laquelle la réponse JSON est stockée

suivante est la réponse JSON

{ "walkzz": "001", "zz": zz, » ddd ":" zz "," zz ": {" zz ":" zz "," qui ": {" zz ":" 11 "," zz ":" zz "}}," de partments ": [{" id ": besoin d'extraire cet id," nom ":" zz "," someorder ": 1," zzs ": [{" zz ": zz," nom ":" zz (zz, zz, zz, zz & zz) "," someorder ": zz," zz ": [{" zz ": 51," nom ":" zz propagation "," someorder ": 16," zz ":" disponible " , "zz": [{"zz": "1223", "zz": "zz 30g", "zz": 3, "zz": 0, "zz": "périmé", "zz": faux, "zz": vrai, "zz": [], "zz": {"zz": 2, "zz": "zz", "zz": 6, "zzName": "Noyau zz (zz)", "département": 56, "zz": "015 zz Spreads", "zz": "zz Spread", "subzz": 100, "somezz": "zz & zz", "zz": {}, "zz_ ": 100", "zz": {"zz": "2017-09-21T11: 09: 15.524Z", "qui": {"zz": "11", "zz": "zz"}}, "action": {"zz": "Inclure"}, "zz": [{"capturezz": 375716, "zz": "Écart", "qté": 15, "zz": "zz", "zz ": {" zz ":" zz "," type ":" N "," nom ":" zz "," séquence ": 1}," zz ": {" zz ":" 211 "," qui " : {"zz": "11", "zz": "zz"}}}]}]}]}]}}

J'ai utilisé ce qui suit en arrière-plan:

  • def = getstorewalk lu callonce ('classpath: zz/zz/zz.feature')
  • def = departmentId getstorewalk.departments [*] id

et l'erreur est ci-dessous:. com .jayway.jsonpath.PathNotFoundException: Propriété manquante dans le chemin $ ['departments'] at com.jayway.jsonpath.internal.path.PathToken.handleObjectProperty (PathToken.java:72) at com.jayway.jsonpath.internal.path .PropertyPathToken.evaluate (PropertyPathToken.java:77) at com.jayway.jsonpath.internal.path.RootPathToken.evaluate (RootPathToken.java:62) à com.jayway.jsonpath.internal.path.CompiledPath.evaluate (CompiledPath.java:53) à com.jayway.jsonpath.internal.path.CompiledPath.evaluate (CompiledPath.java:61) à com.jayway. jsonpath.JsonPath.read (JsonPath.java:187) à com.jayway.jsonpath.internal.JsonContext.read (JsonContext.java:164) à com.jayway.jsonpath.internal.JsonContext.read (JsonContext.java: 151) à com.intuit.karate.Script.evalJsonPathOnVarByName (Script.java:339) à com.intuit.karate.Script.eval (Script.java:262) à com.intuit.karate.Script.eval (Script.java:182) à com.intuit.karate.Script.assign (Script.java:606) à com.intuit.karate.Script.assign (Script.java:537) at com .intuit.karate.StepDefs.def (StepDefs.java:268) at?. * def departmentId = getstorewalk.departments [*]. id (C:/Karaté/zz/zz/src/test/java/zz/zz /zz.feature:11)

Répondre

0

Cela fonctionne pour moi, vous pouvez essayer de coller les 3 lignes ci-dessous dans un fichier Karaté. D'ailleurs c'est un bon conseil pour le dépannage, vous pouvez tester des extraits de ce genre sans avoir besoin de faire des appels HTTP.

* def getstorewalk = {"walkzz":"001","zz":zz,"ddd":"zz","zz":{"zz":"zz","who":{"zz":"11","zz":"zz"}},"departments":[{"id":need to extract this id,"name":"zz","someorder":1,"zzs":[{"zz":zz,"name":"zz (zz, zz, zz, zz & zz)","someorder":zz,"zz":[{"zz":51,"name":"zz Spread","someorder":16,"zz":"Available","zz":[{"zz":"1223","zz":"zz 30g","zz":3,"zz":0,"zz":"stale","zz":false,"zz":true,"zz":[],"zz":{"zz":2,"zz":"zz","zz":6,"zzName":"Core zz (zz)","department":56,"zz":"015 zz Spreads","zz":"zz Spread","subzz":100,"somezz":"zz & zz","zz":{},"zz_":100},"zz":{"zz":"2017-09-21T11:09:15.524Z","who":{"zz":"11","zz":"zz"}},"action":{"zz":"Include"},"zz":[{"capturezz":375716,"zz":"Gap","qty":15,"zz":"zz","zz":{"zz":"zz","type":"N","name":"zz","sequence":1},"zz":{"zz":"211","who":{"zz":"11","zz":"zz"}}}]}]}]}]}]} 
* def departmentId = getstorewalk.departments[*].id 
* print departmentId 

qui enregistre:

19:40:55.135 [main] INFO com.intuit.karate - [print] ["need to extract this id"] 

Alors, vous avez clairement fait une erreur attribuant la réponse à getstorewalk.

Je suppose que vous l'intention de le faire:

def result = callonce read('classpath:zz/zz/zz.feature') 
def departmentId = result.response.departments[*].id 

S'il vous plaît lire la documentation sur l'appel d'autres fichiers de fonctionnalités avec soin et vous aurez probablement réaliser ce que vous faites mal.

+0

Peter ..merci pour la réponse ..mais j'ai besoin de prendre la réponse d'une autre demande et passer l'ID de département à partir de la demande suivante ... et donc j'ai besoin d'appeler le premier fichier de fonctionnalité pour la réponse) ... vous stockez directement le fichier json dans la variable .. et par conséquent cela fonctionne. .. je pense que je fais une erreur en appelant la réponse et en la stockant à la variable .. votre solution fonctionne au cas où vous stockez directement la réponse dans getstorewalk ... comment puis-je appeler le fichier de fonctionnalité ..et stocker sa réponse json à getstorewalk ?? –

+0

@TanajiPadwal avez-vous lu les 6 dernières lignes de ma réponse? réessayer. –