在Groovy Script中的SOAP UI中访问响应

时间:2015-08-04 02:28:34

标签: groovy soapui

我是Groovy Scripting的新手。我试图访问Response节点的值 下面是脚本

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context);
def responseHolder = groovyUtils.getXmlHolder( testRunner.testCase.testSteps["request"].testRequest.response.responseContent );
responseHolder.namespaces["ns0"]="http://xmlns.int.com/orders/xsd/v1"
String mySection = responseHolder.getNodeValue["//ns0:MT_OrderCreateDTCFulfillmentResponse/ns0:StatusCode"] ;
log.info mySection

mySection打印为[]

响应XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header xmlns:v1="http://xmlns.int.com/orders/xsd/v1"/>
   <soapenv:Body xmlns:v1="http://xmlns.int.com/orders/xsd/v1">
      <ns0:MT_OrderCreateDTCFulfillmentResponse xmlns:ns0="http://xmlns.int.com/orders/xsd/v1">
         <StatusCode>000</StatusCode>
         <ReferenceDocNbr>NA</ReferenceDocNbr>
         <SchemaValidationStatus>Validated</SchemaValidationStatus>
         <StatusTimestamp>2015-08-03T18:58:01.602</StatusTimestamp>
         <FaultDetails>Request for customer order number NA received successfully and format validated.</FaultDetails>
      </ns0:MT_OrderCreateDTCFulfillmentResponse>
   </soapenv:Body>
</soapenv:Envelope>

SOAP UI项目结构 - 我正在运行Test_Script。建议我缺少什么 SOAP UI Project structue

1 个答案:

答案 0 :(得分:1)

您可以使用:

responseHolder.getNodeValue("//ns0:MT_OrderCreateDTCFulfillmentResponse/StatusCode");

而不是responseHolder.getNodeValue["//ns0:MT_OrderCreateDTCFulfillmentResponse/ns0:StatusCode"];

请注意,我将responseHolder.getNodeValue调用更改为使用()而不是[],并且还更改了xpath,因为在您的回复<StatusCode>中,xmlns:ns0="http://xmlns.int.com/orders/xsd/v1"&#39;未在*中定义。

另一种选择是使用responseHolder.getNodeValue("//*:MT_OrderCreateDTCFulfillmentResponse/*:StatusCode");通配符作为命名空间来映射任何人。所以在这种情况下你可以使用:

<MT_OrderCreateDTCFulfillmentResponse>

另外,请注意,可能您的XML错误,因为我认为"http://xmlns.int.com/orders/xsd/v1"的所有子元素都必须属于<ns0:MT_OrderCreateDTCFulfillmentResponse xmlns:ns0="http://xmlns.int.com/orders/xsd/v1"> <ns0:StatusCode>000</ns0:StatusCode> <ns0:ReferenceDocNbr>NA</ns0:ReferenceDocNbr> <ns0:SchemaValidationStatus>Validated</ns0:SchemaValidationStatus> <ns0:StatusTimestamp>2015-08-03T18:58:01.602</ns0:StatusTimestamp> <ns0:FaultDetails>Request for customer order number NA received successfully and format validated.</ns0:FaultDetails> </ns0:MT_OrderCreateDTCFulfillmentResponse> 命名空间...所以您必须将其声明为:< / p>

<MT_OrderCreateDTCFulfillmentResponse xmlns="http://xmlns.int.com/orders/xsd/v1">
         <StatusCode>000</StatusCode>
         <ReferenceDocNbr>NA</ReferenceDocNbr>
         <SchemaValidationStatus>Validated</SchemaValidationStatus>
         <StatusTimestamp>2015-08-03T18:58:01.602</StatusTimestamp>
         <FaultDetails>Request for customer order number NA received successfully and format validated.</FaultDetails>
      </MT_OrderCreateDTCFulfillmentResponse>

或者使用此标记的默认值:

StatusCode

请注意,如果您使用我的指示更改XML,那么您的第一个XPath是正确的,因为现在_属于您的命名空间。

希望它有所帮助,