SoapUI - 负载测试 - 断言:使用SoapUI向负载测试添加断言

时间:2017-03-07 13:05:50

标签: json rest groovy soapui assertions

我是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脚本为&#34; targetDB&#34;生成动态名称。如下:

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())

我设计的测试数据的方式是传递&#39; targetdb&#39;的名称。 as&#34; 101&#34;在请求中将导致在响应中创建101标记。 负载测试正在执行。

现在我想为每个负载测试响应添加一些断言,以检查StatusCode标记是否包含&#34; 1&#34;,StatusText标记包含&#34;成功&#34; &安培; RequestNumber标记包含变量&#34; $ {#TestCase#TARGET_DB}&#34;的值。 (在请求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

有人可以帮帮我吗?

以下是我的项目的屏幕截图:Assertion

1 个答案:

答案 0 :(得分:0)

我从另一个forum获得了此查询的答案。以下是问题的答案:

  1. 我们需要创建一个Step as Properties,并将该属性添加为“databaseName”
  2. 我们需要为Property添加另一个Groovy脚本,如下所示:

    String 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)

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

    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”)

    断言nodeStatusCode!= null

    如果(nodeStatusCode == “1”)

    {log.info“通过”}

    否则 {log.info“失败”}

    def nodeStatusText = holder.getNodeValue(“// ns1:StatusText”)

    断言nodeStatusText!= null

    如果(nodeStatusText == “成功”) {log.info“通过”}

    否则

    {log.info“失败”}

    def nodeRequestNumber = holder.getNodeValue(“// ns1:RequestNumber”)

    断言nodeRequestNumber!= null

    if(nodeRequestNumber == context.expand('$ {#TestCase#TARGET_DB}'))

    {log.info“通过”}

    否则

    {log.info“失败”}

  4. @Rao非常感谢你提出的宝贵意见和建议。评价。