J'ai besoin d'un peu d'aide pour m'habituer à Rest Assured.RestAssured: impossible d'analyser la réponse pour la valeur requise à l'aide de Xpath
J'ai une requête que je construis en tant que String (ces tests sont nécessairement simplifiés pour l'instant comme cela sera maintenu par les testeurs donc l'utilisation de concepts plus avancés comme JAXB est en retard).
String request = myPayRequest.searchPaymentOptions(dataObject);
La chaîne Je passe est en fait une enveloppe de savon qui ressemble à ceci:
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<searchPaymentOptions xmlns="http://website.stuff.com">
<header xmlns="">
<ns1:credentials organisation="stuff" password="password" username="foobar" xmlns:ns1="http://website.stuff.com"/>
<ns2:invocationDetails system="FindAndBook" trackingId="qqdG6jVIqIkw459wSj0ymokh" type="NATIVE" xmlns:ns2="http://website.stuff.com"/>
</header>
<criteria xmlns="">
<performFundingCheck>false</performFundingCheck>
<preferredPayment>
<productSupplier>
<ns3:thingyCode xmlns:ns3="http://website.stuff.com">ABC</ns3:thingyCode>
</productSupplier>
<requiredFunds amount="35.63" currency="GBP"/>
</preferredPaymentCriterions>
</criteria>
</searchPaymentOptions>
RÉPONSE:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:preferredPaymentSearch xmlns:ns2="http://website.com">
<header>
<issueAudit>
<info>
<issues>
<issue host="website/10.2.333.46" issueCode="Host" issueId="b5b006c7-42b6-4d8c-8e07-c2f2e1634a9e" issueMessage="website/10.2.333.46" severity="INFO" timestamp="2017-03-23T13:04:53.106Z"/>
<issue host="website/10.2.333.46" issueCode="TrackingId" issueId="38f73e0d-5c42-415b-b88d-1aba098e1a59" issueMessage="qqdG6jVIqIkw459wSj0ymokh" severity="INFO" timestamp="2017-03-23T13:04:53.106Z"/>
</issues>
</info>
<warnings>
<issues/>
</warnings>
<errors>
<issues/>
</errors>
</issueAudit>
<status>SUCCESS</status>
<ver>1.0.0-SNAPSHOT</ver>
</header>
<results>
<preferredPaymentResults>
<preferredPaymentCriterion>
<productSupplier>
<ns2:actorCode>ABC</ns2:actorCode>
</productSupplier>
<requiredFunds amount="35.63" currency="GBP"/>
</preferredPaymentCriterion>
<preferredPaymentOption>
<preferredCardOption>
<cardForm>GENERATABLE</cardForm>
<cardType>VISA_CREDIT</cardType>
<provider>wibble</provider>
</preferredCardOption>
</preferredPaymentOption>
</preferredPaymentResults>
</results>
</ns2:preferredPaymentSearch>
</soap:Body>
La réponse doit & ne contient une enveloppe SOAP avec l'extrait suivant <status>SUCCESS</status>
Quand je effectuez les opérations suivantes:
String response = given().body(request)
.when().post().andReturn().asString();
expect().body(hasXPath("//soap:Body//*[name()='status']", equalTo("FAILURE")));
... le test passe même quand le succès est la valeur des données
De même, j'ai essayé d'utiliser une syntaxe différente mais cela donne aussi un faux positif:
given().config(newConfig().xmlConfig(xmlConfig().with().namespaceAware(true)));
given().body(request).post();
expect().body(hasXPath("//soap:Body//*[name()='status']", equalTo("SUCCESS")));
Où est-ce que je me trompe? Je ne devrais pas réellement besoin de lire la réponse en tant que chaîne, je crois que l'exemple un peut être malodorant. Mais l'exemple 2 passe également mais devrait échouer.
Dans hasXPath(), ne voulez-vous pas dire soapenv: Body à la place de soap: Body? –
peut-être - mais cela n'explique toujours pas pourquoi les tests passent lorsque la réponse ne contient pas la valeur xpath attendue – Steerpike
Dans votre premier exemple, la valeur matcher 'equalTo (" FAILURE ")' n'est pas un argument de hasXPath() . Est-ce exact? –