2017-10-13 12 views
1

Je crée des cas avec Wiremocks et je générer une maquette de réponse.validation Xpath wiremock expression matchesXPath

J'ai une requête XML comme ceci:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xw="http://example.com"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <xw:gen> 
      <xw:input> 
       <xw:element1>0100</xw:element1> 
       <xw:element2>741</xw:element2> 
       <xw:element3>JAVA</xw:element3> 
       <xw:element4>123</xw:element4> 
      </xw:input> 
      <xw:global> 
       <xw:obj1> 
        <xw:attr1>john</xw:attr1> 
        <xw:attr2>doe</xw:attr2> 
       </xw:obj1> 
      </xw:global> 
     </xw:gen> 
    </soapenv:Body> 
</soapenv:Envelope> 

je ne dispose que de valider que XW: entrée/XW: element1 = 0100, XW: entrée/XW: element2 = 741 et je besoin que le XW: noeud global a quoi que ce soit. La seule condition pour XW: global n'est pas vide. (Ce nœud peut être <xw:global></xw:global>).

Ceci est mon maquette en JSON:

{ 
    "request" : { 
     "url" : "/myweb/myrequest.asmx", 
     "headers": { 
      "SOAPAction": { 
       "equalTo": "\"http://example.com/gen\"" 
      } 
     }, 
     "bodyPatterns" : [ { 
      "matchesXPath": "//xw:input[xw:element1=\"0100\" and xw:element2=\"741\" ]", 
      "xPathNamespaces" : { 
       "xw" : "http://example.com" 
      } 
     }] 
    }, 
    "response" : { 
     "status" : 200, 
     "headers": { 
      "Content-Type": "text/xml;charset=UTF-8" 
     }, 
     "body" : "<Abody>" 
    } 
} 

La question est: comment je peux valider que le nœud XW: global est pas vide ou est non nul?

J'ai essayé avec ce matchesXPath mais je n'ai pas la chance:

"matchesXPath": "//xw:input[xw:element1=\"0100\" and xw:element2=\"741\" ] and count(//xw:global) > 0".

Merci.

+0

Est-ce que vous spécifiez les espaces de noms dans la définition de talon? Sinon, vous ne pouvez pas les utiliser dans l'expression XPath. – Tom

+0

Oui. J'ai spécifié les espaces de noms. Merci. – dani77

Répondre

1

Je ne suis pas familier avec wiremock, mais vous pouvez essayer le XPath suivant:

"//xw:gen[xw:input[xw:element1=\"0100\" and xw:element2=\"741\"]][xw:global/*]" 

XPath ci-dessus vérifier s'il y a une xw:gen que:

  • [xw:input[xw:element1=\"0100\" and xw:element2=\"741\"]]: enfant ont élément xw:input avec les critères que vous avez mentionnés
  • [xw:global/*]: et d'avoir l'élément enfant xw:global contenant au moins un autre élément f ne importe quel nom
+0

Bonjour @ har07. Dans mon cas, le nœud XW: global peut être et moi cette validation: '[count (XW: globalObj)> 0]'. Mais votre réponse a été très utile. Je vous remercie!! – dani77