【发布时间】:2017-01-05 12:50:54
【问题描述】:
我想在同一个测试用例中将 Soap Ui API 响应中的指定标记值传输到 groovy 脚本。我尝试了这两者之间的属性传输,但是来自响应的整个数据都粘贴到了 groovy 中。任何人都可以建议我一些更好的想法。谢谢。
【问题讨论】:
-
您能否提供示例响应?
我想在同一个测试用例中将 Soap Ui API 响应中的指定标记值传输到 groovy 脚本。我尝试了这两者之间的属性传输,但是来自响应的整个数据都粘贴到了 groovy 中。任何人都可以建议我一些更好的想法。谢谢。
【问题讨论】:
使用示例 xml 解释这一点,因为没有提供您的示例。
在执行请求时,下面是响应 xml:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ConversionRateResponse xmlns="http://www.webserviceX.NET/">
<ConversionRateResult>0.005</ConversionRateResult>
</ConversionRateResponse>
</soap:Body>
</soap:Envelope>
现在,将向您展示如何检索 ConversionRateResult 元素值并使其可在其他测试步骤中访问。
关键是使用Script Assertion 将给定元素的值存储在测试用例级别的自定义属性中,用于测试用例的请求步骤,并能够使用property expansion 访问它。
脚本断言:
//Check if the response is not empty
assert context.response
//Closure to get the any element value(non-repeting)
def searchData = { data, elementName ->
data.'**'.find{ it.name() == elementName}
}
//Create object for the response
def parsedXml = new XmlSlurper().parseText(context.response)
//Call the above closure to get the value of ConversionRateResult which is 0.005 in above response
log.info searchData(parsedXml, 'ConversionRateResult')
//Store it at test case custom property called RATE
context.testCase.setPropertyValue('RATE', searchData(parsedXml, 'ConversionRateResult') as String)
如何使用属性扩展在同一测试用例的以下测试步骤中访问 RATE?
Request 类型的步骤,则使用${#TestCase#RATE}。例如,您必须在下一个soap 或rest 或http 或jdbc 请求中访问RATE 值,然后<element>${#TestCase#RATE}</element>
Groovy Script,则使用以下之一:
context.expand('${#TestCase#RATE}') 或context.testCase.getPropertyValue('RATE')
【讨论】: