在SoapUI Pro V 4.5.2中,我使用HTTP测试请求和CSV文件创建了数据驱动的测试,制表符分隔,文本不带引号。请求是HTTP,响应是XML。数据包含DataSource中每个响应的输入变量和断言。我的一些断言包含双引号,即: “123 Any St。”
当我运行断言时,我得到一个响应: XPathContains比较失败,期待[“”“123,Any St.”“”],实际是[“123,Any St。”]
我的问题与此类似: Xpath matches with single quotes?
但我没有使用基于XSLT的验证,我在HTTP请求中使用XPath Match断言。
问题是,我如何禁用三重双引号,在HTTP请求的上下文中解决它们,或者在我的断言数据中添加一些内容以使这些断言通过?请注意,从响应中删除双引号,因此断言数据不是一个选项。
答案 0 :(得分:1)
以下是执行该技巧的代码:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(messageExchange.responseContentAsXml)
String val = holder.getNodeValue('//Location[1]/Address[1]/Line1[1]')
def addressLine1 = context.expand( '${DataSource#AddressLine1}' )
def vala = val.replaceAll('"""','"')
def addressLine1a = addressLine1.replaceAll('"""','"')
assert addressLine1a == vala, 'Assertion failed'
replaceAll命令是一个字符串操作,在断言之前将任何3X双引号修剪为1X双引号。
答案 1 :(得分:0)
你使用什么样的断言?您是否尝试过脚本断言或从预期的断言值中删除引号?
请你分享xml或带引号的字符串的xml吗?
尝试将此作为脚本断言
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(messageExchange.responseContentAsXml)
String val = holder.getNodeValue('xPath to the value you want to extract')
assert 'The expected value in quotes' == val, "Appropriate message if the assertion fails"
OP需要能够从csv中选择预期值,并将其与响应中收到的值进行比较。
当您使用专业版的soapUI时,请使用数据源从csv文件中获取值。 让我们考虑一下你的csv有一个名为expectedVal的列,它将包含预期的响应值。这个值可以是任何东西,xml,带引号的字符串,任何东西。然后我们的脚本断言将变为下面的代码
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(messageExchange.responseContentAsXml)
String val = holder.getNodeValue('//ns1:GetConversionRateResponse[1]/ns1:GetConversionRateResult[1]/a:Rate[1]')
def expVal = context.expand( '${DataSource#expVal}' )
assert expVal == val, "Appropriate message if the assertion fails"
我使用xmethods.net提供的currencyConversion服务创建了一个soapUI项目。这个项目是我在下面解释的简单实现。
https://drive.google.com/folderview?id=0B7mJBdNSSV-YMW5jSFh3NGd1UHM&usp=sharing
上面的链接可以使用两天,您应该将此标记为答案。