我是 SoapUI 工具的新手。我使用的是 SoapUI 版本 5.3.0 我的应用程序有几个 RESTful API。我以 json 请求的形式向 WebService 发送多个请求,如下所示:
{
"app_key":"i8gAVDwcAq40n2kAv6Ox+w==",
"targetDB":"${#TestCase#TARGET_DB}",
"createNew": "true"
}
来自 WebService 的响应如下:
<StartDataExtractResult xmlns="http://schemas.datacontract.org/2004/07/AriaTechCore" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<StatusCode>1</StatusCode>
<StatusText>success</StatusText>
<RequestNumber>101</RequestNumber>
</StartDataExtractResult>
我正在使用 Groovy 脚本为“targetDB”生成一个动态名称,如下所示:
def targetdb = ((context.expand('${#TestCase#TARGET_DB}') ?: 100) as Integer) + 1
log.info "Target db for current request : ${targetdb}"
context.testCase.setPropertyValue('TARGET_DB', targetdb.toString())
我以这样一种方式设计了我的测试数据,即在请求中将 'targetdb' 的名称传递为“101”将导致在响应中创建 101 标签。负载测试运行良好。
现在我想为每个负载测试响应添加一些断言,以检查 StatusCode 标记是否包含“1”,StatusText 标记包含“success”和 RequestNumber 标记包含变量“${#TestCase#TARGET_DB}”的值(在请求 json 中发送)。为了实现这一点,我编写了一个脚本断言如下:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(messageExchange.responseContent)
holder.namespaces["ns1"] = "http://schemas.datacontract.org/2004/07/AriaTechCore"
def nodeStatusCode = holder.getNodeValue("//ns1:StatusCode")
assert nodeStatusCode != null
if(nodeStatusCode=="1")
{ log.info "Pass" }
else
{ log.info "Fail"}
def nodeStatusText = holder.getNodeValue("//ns1:StatusText")
assert nodeStatusText != null
if(nodeStatusText=="success")
{ log.info "Pass" }
else
{ log.info "Fail"}
def nodeRequestNumber = holder.getNodeValue("//ns1:RequestNumber")
assert nodeRequestNumber != null
if(nodeRequestNumber=="${TARGET_DB}")
{ log.info "Pass" }
else
{ log.info "Fail"}
但我得到一个错误,因为:
No such Property: TARGET_DB for class: Script 53
有人可以帮我吗?
我从另一个论坛得到了这个问题的答案。以下是问题的答案:
我们需要为该属性添加另一个 Groovy 脚本,如下所示:
字符串testString ='$ {#TestCase#TARGET_DB}'
testRunner.testCase.setPropertyValue( "databaseName", testString )
def getLocalPropValue = testRunner.testCase.getPropertyValue("databaseName")
log.info(getLocalPropValue)
testRunner.testCase.testSteps["Properties"].setPropertyValue( "databaseName", testString )
Finally we can have the Script Assertion as follows:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(messageExchange.responseContent)
holder.namespaces["ns1"] = "http://schemas.datacontract.org/2004/07/AriaTechCore"
def nodeStatusCode = holder.getNodeValue("//ns1:StatusCode")
assert nodeStatusCode != null
if(nodeStatusCode=="1")
{ log.info "Pass" }
else { log.info "Fail"}
def nodeStatusText = holder.getNodeValue("//ns1:StatusText")
断言 nodeStatusText != null
if(nodeStatusText=="success") { log.info "Pass" }
别的
{ log.info "失败"}
def nodeRequestNumber = holder.getNodeValue("//ns1:RequestNumber")
断言 nodeRequestNumber != null
if (nodeRequestNumber == context.expand('${#TestCase#TARGET_DB}'))
{ log.info“通过”}
别的
{ log.info "失败"}
@Rao 非常感谢您的宝贵建议和意见。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句