2015-11-19 5 views
1

J'utilise la fonctionnalité SoapUI JSONPath Mach pour affirmer la réponse JSON. Depend sur une langue, je peux avoir deux réponses différentes:Affirmation SoapUI JSON Path pour deux chaînes différentes n'utilisant pas JsonSlurper

Factura no encontrada en el lote. ou Invoice not found in open batch.

Je sais que je peux le faire en utilisant JsonSlurper:

assert jsonSlurper.header.rspMsg in ["Factura no encontrada en el lote.","Invoice not found in open batch."] 

Mais, ce que je suis à la recherche est d'utiliser cette fonctionnalité d'assertion SoapUI, voir capture d'écran: enter image description here

Plus précisément, comment dois-je changer de fond:

"Factura no encontrada en el lote." OR "Invoice not found in open batch." 

Merci

Répondre

1

Malheureusement, ce n'est pas possible en utilisant JSONPath match assert (au moins avec les versions existantes, peut-être à l'avenir ...). Pour cela, le résultat escompté n'est autorisé que pour les chaînes (ou développer une expression qui sera évaluée en chaînes), il n'est donc pas possible de définir les valeurs attendues en utilisant l'opérateur OR comme vous le souhaitez.

Une autre façon de le faire pourrait être de mettre l'opérateur OR dans l'expression jsonpath et d'utiliser true comme résultat attendu.

Par exemple, pour votre cas, vous pouvez utiliser quelque chose comme:

$.header.[?(@.['rspMsg'] == 'Factura no encontrada en el lote.' || ?(@.['rspMsg'] == 'Invoice not found in open batch.']

Et le résultat attendu utiliser true.

Cependant, il existe déjà un autre problème, SOAPUI 5.2.1 utilise com.jayway.jsonpath version 0.9.1 et cette version ne prend pas en charge l'opérateur ||, donc cela ne fonctionne pas.

La dernière tentative pourrait donc être d'utiliser JSONPath Regex match assert qui évalue l'expression JSONPath par rapport à une expression rationnelle fournie et attend vrai ou faux. En utilisant cette approche, vous pouvez utiliser:

expression JSONPath:$.header.rspMsg

Expression régulière:(Factura no encontrada en el lote\.)|(Invoice not found in open batch\.)

Résultat attendu:true

enter image description here

À ce stade, je pense que la meilleure approche est la vôtre en utilisant jsonSlurper pour effectuer l'assertion.

Hope this helps,

+0

Merci pour cette réponse complète, je pensais utiliser RegEx mais n'a pas pu comprendre le modèle, de toute façon je pense que l'aide JsonSlurper est bien meilleure approche ici. – QB1979

+0

@ QB1979 regex est la meilleure approche que j'ai trouvé pour répondre à vos demandes ... mais bien sûr votre première approche est bien meilleure ':)'. – albciff