在soapui中的xpath断言不起作用

时间:2017-04-03 12:45:02

标签: xpath soapui

我使用xpath- // ns1:GetAtomicWeightResponse / ns1:GetAtomicWeightResult [1]来达到这个目的,但是如何达到AtomicWeight。

<NewDataSet>
  <Table>
    <AtomicWeight>12.0115</AtomicWeight>
  </Table>
</NewDataSet>

此处,我无法从表格AutomicWeight获取XML的价值。

编辑:根据OP的评论,在问题中添加xml。

<soap:Envelope
    xmlns:soap="schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="w3.org/2001/XMLSchema-instance"
    xmlns:xsd="w3.org/2001/XMLSchema">
    <soap:Body>
        <GetAtomicWeightResponse
            xmlns="webserviceX.NET">
            <GetAtomicWeightResult>
                <![CDATA[<NewDataSet><Table><AtomicWeight>12.0115</AtomicWeight></Table></NewDataSet>]]>
            </GetAtomicWeightResult>
        </GetAtomicWeightResponse>
    </soap:Body>
</soap:Envelope>

2 个答案:

答案 0 :(得分:0)

请使用以下xpath

//NewDataSet/Table/AtomicWeight

编辑:基于OP的数据

因为,您最初提到的数据位于cdata,这就是您无法获得该值的原因。

您可以在Groovy Script下面使用:

def xml = """<soap:Envelope xmlns:soap="schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="w3.org/2001/XMLSchema-instance" xmlns:xsd="w3.org/2001/XMLSchema">
    <soap:Body>
        <GetAtomicWeightResponse xmlns="webserviceX.NET">
            <GetAtomicWeightResult><![CDATA[<NewDataSet><Table><AtomicWeight>12.0115</AtomicWeight></Table></NewDataSet>]]></GetAtomicWeightResult>
        </GetAtomicWeightResponse>
    </soap:Body>
</soap:Envelope>"""
def getData = { data, element -> new XmlSlurper().parseText(data).'**'.find{it.name() == element} }
def atomicWeight = getData((getData(xml, 'GetAtomicWeightResult') as String).trim(), 'AtomicWeight').text()
log.info atomicWeight

或者您可以快速在线试用 Demo

如果您在SoapUI的测试用例中使用它,则不必添加额外的Groovy Test步骤来获取该值。而是使用以下代码将Script Assertion添加到相同的请求步骤(获得响应的位置)(处理相同,但您不必使用固定的xml,而是可以使用动态响应)。

脚本断言

assert context.response, 'Response is empty or null'

def getData = { data, element -> new XmlSlurper().parseText(data).'**'.find{it.name() == element} }
def atomicWeight = getData((getData(context.response, 'GetAtomicWeightResult') as String).trim(), 'AtomicWeight').text()
log.info atomicWeight

答案 1 :(得分:0)

考虑使用soap XML中的响应

   <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <ConversionRateResponse xmlns="http://www.webserviceX.NET/">
         <ConversionRateResult>1505.7</ConversionRateResult>
      </ConversionRateResponse>
   </soap:Body>
</soap:Envelope>

Xpath将是

declare namespace ns1='http://www.webserviceX.NET/';
//ns1:ConversionRateResponse[1]/ns1:ConversionRateResult[1]