2012-07-24 78 views
1

有没有在使用SoapUI的XPath测试中的断言中使用通配符的方法?带通配符的SoapUI XPath断言

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

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

我查了“允许使用通配符”复选框。

我的问题是:我要坚持我的日期2012-08-22开始,但我不约分秒护理。我想我的表达应该是像2012-08-22 *,但它不起作用。

回答

2

你正在做的声音是什么样的它应该工作。这里是一个快速的例子,我使用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匹配和使用选择从当前按钮你

// GEONAMES /时区/时间

2012-07-25 04:39

如果更新这

// GEONAMES /时区/时间

2012-07-25 *

这将正常工作和更新与新的纬度其余要求和液化天然气的断言依然会通过时,因为它不检查时间。如果这没有帮助,请提供您的完整断言,也许我可以帮助更多。

*注:为SOAP请求,请务必声明命名空间,然后使用正确的格式

//ns1:message 
+0

我有soapUI 3.6.1,这是行不通的。我得到以下断言失败的错误:'XPathContains comparaison failed,expect [2012-08-25 *],actual was [2012-08-25T00:00:00-04:00]' – Gab 2012-07-25 17:08:03

+0

奇怪的是,你认为你发现一个问题3.6.1,当我在该版本中尝试时遇到同样的问题,只有这样,我在该版本中的通配符工作是拉取整个请求,而不是特定字段,// ns1:message,从当前选择,然后更新字段为*。如果可以的话,我会升级。 – 2012-07-25 18:06:07

0

这将是不大不小的疼痛,但这里是你可以做什么:

1)找出一个XPath“基地”使用断言标签(听起来像是你在这里的话)。我用这个公共网站进行测试:http://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl

我用'夏威夷'的角点方法作为单参数。

我建立这个 '基地' 的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)添加属性...我打电话给我的其它

6)添加TRANSF呃一步

* 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") 
} 

在常规步骤中,您可以做任何事情,你需要得到你的(部分)的数据。我添加的示例代码从包装在CDATA中的长行中获取纬度/经度,然后检查一些数据的起始部分。仅仅是一个例子。

记住,你可以使用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

+0

我其实是试图避免常规 – Gab 2012-07-25 17:08:33

+0

不知道在这种情况下该怎么做,但你可以减少我最初通过在实际的肥皂请求本身中进行常规断言而提出了相当多的建议。那么你不需要3个额外的步骤,只是在实际断言中的一些常规。 – chrismead 2012-07-25 19:40:48