2017-03-07 65 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非常感謝您的寶貴建議&意見。