Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重启:无法使用Xpath解析所需值的响应_Java_Xml_Xpath_Soap_Rest Assured - Fatal编程技术网

Java 重启:无法使用Xpath解析所需值的响应

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

我需要一点帮助来适应,放心

我有一个请求,我正在构建一个字符串(这些测试暂时必须简化,因为测试人员将维护这些测试,所以使用像JAXB这样更高级的概念是次要的)

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()