SoapUI - Load Test -Assertion:使用 SoapUI 添加断言到负载测试
SoapUI - Load Test -Assertion : Adding assertion to Load Test using SoapUI
我是 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
谁能帮帮我?
这是我的项目的截图:
我从另一个 forum 那里得到了这个问题的答案。这是问题的答案:
- 我们需要创建一个步骤作为属性并向其添加一个 属性 作为 "databaseName"
我们需要为 属性 添加另一个 Groovy 脚本,如下所示:
字符串 testString = '${#TestCase#TARGET_DB}'
testRunner.testCase.setPropertyValue("databaseName", 测试字符串)
def getLocalPropValue = testRunner.testCase.getPropertyValue("databaseName")
log.info(getLocalPropValue)
testRunner.testCase.testSteps["Properties"].set属性Value("databaseName", testString)
最后我们可以得到如下的脚本断言:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(上下文)
def holder = groovyUtils.getXmlHolder(messageExchange.responseContent)
holder.namespaces["ns1"] = "http://schemas.datacontract.org/2004/07/AriaTechCore"
def nodeStatusCode = holder.getNodeValue("//ns1:StatusCode")
断言 nodeStatusCode != null
if(nodeStatusCode=="1")
{ log.info "Pass" }
其他
{ log.info "Fail"}
def nodeStatusText = holder.getNodeValue("//ns1:StatusText")
断言 nodeStatusText != null
if(nodeStatusText=="success")
{ log.info "Pass" }
其他
{ log.info "Fail"}
def nodeRequestNumber = holder.getNodeValue("//ns1:RequestNumber")
断言 nodeRequestNumber != null
if (nodeRequestNumber == context.expand('${#TestCase#TARGET_DB}'))
{ log.info "Pass" }
其他
{ log.info "Fail"}
@Rao 非常感谢您的宝贵建议和意见。
我是 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
谁能帮帮我?
这是我的项目的截图:
我从另一个 forum 那里得到了这个问题的答案。这是问题的答案:
- 我们需要创建一个步骤作为属性并向其添加一个 属性 作为 "databaseName"
我们需要为 属性 添加另一个 Groovy 脚本,如下所示:
字符串 testString = '${#TestCase#TARGET_DB}'
testRunner.testCase.setPropertyValue("databaseName", 测试字符串)
def getLocalPropValue = testRunner.testCase.getPropertyValue("databaseName")
log.info(getLocalPropValue)
testRunner.testCase.testSteps["Properties"].set属性Value("databaseName", testString)
最后我们可以得到如下的脚本断言:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(上下文)
def holder = groovyUtils.getXmlHolder(messageExchange.responseContent)
holder.namespaces["ns1"] = "http://schemas.datacontract.org/2004/07/AriaTechCore"
def nodeStatusCode = holder.getNodeValue("//ns1:StatusCode")
断言 nodeStatusCode != null
if(nodeStatusCode=="1")
{ log.info "Pass" }
其他 { log.info "Fail"}
def nodeStatusText = holder.getNodeValue("//ns1:StatusText")
断言 nodeStatusText != null
if(nodeStatusText=="success") { log.info "Pass" }
其他
{ log.info "Fail"}
def nodeRequestNumber = holder.getNodeValue("//ns1:RequestNumber")
断言 nodeRequestNumber != null
if (nodeRequestNumber == context.expand('${#TestCase#TARGET_DB}'))
{ log.info "Pass" }
其他
{ log.info "Fail"}
@Rao 非常感谢您的宝贵建议和意见。