2017-03-07 67 views
0

我是SoapUI工具的新手。我使用SoapUI版本5.3.0我的应用程序有几个RESTful API。SoapUI - Load Test -Assertion:使用SoapUI添加断言到负载测试

{ 
    "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脚本来生成我在如下JSON请求的形式发送多个请求到WebService对于“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标签e回应。 负载测试执行正常。

现在我想为每个负载测试响应添加一些断言,以检查StatusCode标记是否包含“1”,StatusText标记包含“成功”& 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

任何人都可以帮我吗?

这里是我的项目的截图:Assertion

+0

不清楚问题是什么?你有没有添加提到的断言,而不是工作?或者你不知道如何添加它们?请澄清。 – Rao

+0

我想为来自WebService(由负载测试套件生成)的10个请求/响应中的每一个创建断言以验证StatusCode是否为“1”,StatusText是“成功”并且匹配值“101”。我已经为单个请求/响应添加了断言。但现在我想为所有的请求/响应做这件事。 – DebanjanB

+0

那么,你可以把请求步骤中提到的断言(在你的情况下是第二个断言)。运行负载测试时,每次都会运行这些测试,以便以后不必做。 – Rao

回答

0

我有从另一个forum该查询的答案。这是问题的答案:

  1. 我们需要创建一个步骤的属性和属性将它添加为“的databaseName”
  2. 我们需要添加另一个Groovy脚本的属性如下:

    字符串的TestString = '$ {#测试用例#TARGET_DB}'

    testRunner.testCase.setPropertyValue( “的databaseName”,的TestString)

    DEF getLocalPropValue = testRunner.testCa se.getPropertyValue( “的databaseName”)

    log.info(getLocalPropValue)

    testRunner.testCase.testSteps [ “属性”。setPropertyValue( “的databaseName” 的TestString)

  3. 最后,我们可以有脚本断言如下:

    DEF groovyUtils =新com.eviware.soapui.support.GroovyUtils(上下文)

    DEF支架= groovyUtils.getXmlHolder(messageExchange.responseContent)

    持有人。命名空间[ “NS1”] = “http://schemas.datacontract.org/2004/07/AriaTechCore

    DEF nodeStatusCode = holder.getNodeValue!( “// NS1:的StatusCode”)

    断言nodeStatusCode = NULL

    如果(nodeStatusCode == “1” )

    {log.info “通行证”}

    其他 {log.info “失败”}

    高清nodeStatusText = holder.getNodeValue!( “// NS1:状态文本”)

    断言nodeStatusText = NULL

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

    其他

    {log.info “失败”}

    DEF nodeRequestNumber = holder.getNodeValue( “// NS1:RequestNumber”)

    断言nodeRequestNumbe [R!= NULL

    如果(nodeRequestNumber == context.expand( '$ {##TestCase的TARGET_DB}'))

    {log.info “通行证”}

    其他

    { log.info “失败”}

@Rao非常感谢您的宝贵建议&意见。