0

在 SoapUI Pro V 4.5.2 中,我使用 HTTP 测试请求和 CSV 文件创建了一个数据驱动的测试,以制表符分隔,文本未加引号。请求是 HTTP,响应是 XML。数据包含 DataSource 中每个响应的输入变量和断言。我的一些断言包含双引号,即:“123 Any St.”

当我运行断言时,我得到以下响应: XPathContains 比较失败,期望 ["""123, Any St."""],实际是 ["123, Any St."]

我的问题与此类似: Xpath 匹配单引号?

但我没有使用基于 XSLT 的验证,而是在 HTTP 请求中使用 XPath 匹配断言。

问题是,我如何禁用三重双引号,在 HTTP 请求的上下文中解决它们,或者在我的断言数据中添加一些东西以使这些断言通过?请注意,从响应中删除双引号并因此删除断言数据不是一种选择。

4

2 回答 2

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 双引号。

于 2013-08-22T12:36:48.177 回答
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

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

于 2013-08-20T14:07:07.413 回答