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 那里得到了这个问题的答案。这是问题的答案:

  1. 我们需要创建一个步骤作为属性并向其添加一个 属性 作为 "databaseName"
  2. 我们需要为 属性 添加另一个 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)

  3. 最后我们可以得到如下的脚本断言:

    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 非常感谢您的宝贵建议和意见。