SoapUI XPath断言与通配符

时间:2012-07-24 14:37:37

标签: xpath wildcard soapui

有没有办法在使用SoapUI进行XPath测试时在断言中使用通配符?

我看了一下SoapUI的文档,他们说你可以做这样的事情

<path1>
  <path2>*</path2>
</path1>

我选中了“允许通配符”复选框。

我的问题是:我想断言我的约会从2012-08-22开始,但我不关心分钟和秒。我想我的表达应该像2012-08-22 *但它不起作用。

2 个答案:

答案 0 :(得分:3)

你在做什么听起来应该有用。这是我使用http://www.geonames.org/export/web-services.html#timezone的休息服务烹饪的一个简单示例。我正在使用他们提供的演示

http://api.geonames.org/timezone?lat=47.01&lng=10.2&username=demo 输出

<geonames>
   <timezone tzversion="tzdata2012c">
      <countryCode>AT</countryCode>
      <countryName>Austria</countryName>
      <lat>47.01</lat>
      <lng>10.2</lng>
      <timezoneId>Europe/Vienna</timezoneId>
      <dstOffset>2.0</dstOffset>
      <gmtOffset>1.0</gmtOffset>
      <rawOffset>1.0</rawOffset>
      <time>2012-07-25 04:39</time>
      <sunrise>2012-07-25 05:50</sunrise>
      <sunset>2012-07-25 21:00</sunset>
   </timezone>
</geonames>

如果你在结果上进行xpath匹配并使用select from current按钮,那么

// GEONAMES /时区/时间

2012-07-25 04:39

如果您将其更新为

// GEONAMES /时区/时间

2012-07-25 *

这样可以正常工作,当用新的lat和lng更新休息请求时,断言仍会通过,因为它没有检查时间。如果这没有帮助,请提供您的完整断言,也许我可以提供更多帮助。

*注意:对于soap请求,请确保声明命名空间,然后使用正确的格式

//ns1:message

答案 1 :(得分:1)

这将是一种痛苦,但这是你可以做的:

1)使用断言选项卡找出Xpath“base”(听起来就像你在这里一样)。我使用此公共站点进行测试:http://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl

我使用CornerPoints方法将'hawaii'作为单一参数。

我创建了这个'base'xpath:

declare namespace ns1='http://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl';
declare namespace SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/';
declare namespace SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/';

/SOAP-ENV:Envelope/SOAP-ENV:Body/ns1:CornerPointsResponse/listLatLonOut

(it will write the declare statements for you if you click declare)
(which you can test out in the assertions window)

2)创建属性步骤

3)创建物业转移步骤

4)创建一个groovy脚本

5)添加一个属性......我称之为misc

6)添加转移步骤

* transfer from the CornerPoints - Request 1 --- Response

* paste the Xpath stuff in the box under the 'transfer from'

* Transfer to your property 

(You can test with the little play button)

7)在你的groovy脚本中添加这样的东西:

def x = context.expand( '${Properties#misc}' )
def parts = x.tokenize(',')
for (def part in parts)
{
    log.info(part)
    if (part.startsWith("-153"))
        log.info("good")
}

在groovy步骤中,您可以执行任何操作以获取(部分)数据。我添加的示例代码从包装在CDATA中的长行中获取lat / lons,然后仅检查某些数据的起始部分。只是一个示例。

请记住,您可以使用groovy和java字符串方法:

http://groovy.codehaus.org/groovy-jdk/java/lang/String.html

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html

更多常规技巧: http://www.soapui.org/Scripting-Properties/tips-a-tricks.html