SoapUI Escaped Quotes导致断言失败

时间:2013-08-16 20:02:35

标签: xml xpath soapui

在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请求的上下文中解决它们,或者在我的断言数据中添加一些内容以使这些断言通过?请注意,从响应中删除双引号,因此断言数据不是一个选项。

2 个答案:

答案 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

上面的链接可以使用两天,您应该将此标记为答案。