Java 重启:无法使用Xpath解析所需值的响应
我需要一点帮助来适应,放心 我有一个请求,我正在构建一个字符串(这些测试暂时必须简化,因为测试人员将维护这些测试,所以使用像JAXB这样更高级的概念是次要的)Java 重启:无法使用Xpath解析所需值的响应,java,xml,xpath,soap,rest-assured,Java,Xml,Xpath,Soap,Rest Assured,我需要一点帮助来适应,放心 我有一个请求,我正在构建一个字符串(这些测试暂时必须简化,因为测试人员将维护这些测试,所以使用像JAXB这样更高级的概念是次要的) String request=myPayRequest.searchPaymentOptions(dataObject) 我传递的字符串实际上是一个Soap信封,看起来是这样的: <?xml version="1.0" encoding="UTF-8" ?> <soapenv:Envelope xmlns:soapenv
String request=myPayRequest.searchPaymentOptions(dataObject)代码>
我传递的字符串实际上是一个Soap信封,看起来是这样的:
<?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>
…即使数据值为SUCCESS,测试也会通过
同样,我尝试使用不同的语法,但这也给出了一个误判:
given().config(newConfig().xmlConfig(xmlConfig().with().namespaceAware(true)));
given().body(request).post();
expect().body(hasXPath("//soap:Body//*[name()='status']", equalTo("SUCCESS")));
我哪里做错了?我实际上不需要把响应读成字符串,我相信这样一来,示例一可能会很难闻。但是示例2也通过了,但应该失败。尝试以下格式:
expect().body("Envelope.Body.preferredPaymentSearch.header.status", equalTo("SUCCESS"))
.given().body(request)
.when().post()
如果您刚刚开始使用REST-assured,请查看您是否可以进行评估,因为它对于测试SOAP和XML更好
免责声明:am dev
这里是链接到
XPath表达式是本机支持的,大多数情况下,您可以按原样比较两个有效负载。在hasXPath()中,您的意思是不是说soapenv:Body
而不是soap:Body
?可能-但这仍然不能解释为什么当响应不包含预期的xpath值时测试会通过在第一个示例中,值匹配器equalTo(“FAILURE”)
不是hasXPath()的参数。这是正确的吗?很好地指出了这一点-但即使有了这一修正,测试仍然通过,无论'equalTo(“任何东西”)中的值是什么,这都不起作用。我得到一个“java.lang.AssertionError:1预期失败。预期:一个XPath//soap:Body//*[name()='status'的XML文档实际:
…对于剩余的soap信封响应,不要忘记我的示例中的“请求”是一个字符串,而不是XML文档。但是,我在响应中得到了一个有效的soap信封,所以我不确定为什么我不能简单地解析它以获得预期的Xpath值,因为我必须将我的请求用作字符串,这可能会使我不得不转换请求在我可以在建议的应用程序中使用XML(soap)文档之前,先响应它manner@Steerpike我怀疑您使用的hasXPath()语法不正确,或者您需要指定Content-Type header.hmmm-可能,尽管xpath语法绝对正确-我在一个外部工具上运行它,它工作正常
given().config(newConfig().xmlConfig(xmlConfig().with().namespaceAware(true)));
given().body(request).post();
expect().body(hasXPath("//soap:Body//*[name()='status']", equalTo("SUCCESS")));
expect().body("Envelope.Body.preferredPaymentSearch.header.status", equalTo("SUCCESS"))
.given().body(request)
.when().post()