2017-04-24 52 views
1

我是soapui的新手,我正在嘗試在列表選項中選擇哪個哈特選擇= true。響應使用JSON,我可以選擇代碼爲$.response.optionList[0].options[1].id的元素,而是給出我希望選擇具有selected = true的元素編號。這是你用groovy腳本做的事嗎?有沒有人有任何建議?Soapui屬性傳遞JSON如果聲明

{  
    "response": { 

     "optionList": [ 
     { 
      "options": [ 
      { 
       "id": 10, 
       "selected": false 
      }, 
      { 
       "id": 11, 
       "selected": true 
      } 
      ] 
     }, 
     { 
      "options": [    
      { 
       "id": 12, 
       "selected": false 
      }] 
     } 
     ] 
    } 
}  

回答

1

您是否在剩餘請求步驟之後使用了屬性傳輸測試步驟?

您可以使用Script Assertion作爲其餘請求步驟來實現和刪除屬性轉移測試步驟。

使用下面的腳本:

//check if there is response 
assert context.response, 'response is empty or null' 
def json = new groovy.json.JsonSlurper().parseText(context.response) 
def id 
json.response.optionList.each{ optionItem -> 
    optionItem.options.each { option -> 
    if (option.selected == true) { 
     id = option.id 
    } 
    } 
} 
log.info "id value when selected is true : ${id}" 
context.testCase.setPropertyValue('ID', id?.toString()) 

如果需要從以前的階躍響應訪問上述id並在以後使用它的步驟,使用屬性擴展說${#TestCase#ID}

您可以快速地嘗試網上上面的腳本Demo

+0

非常感謝您的幫助,但實際上在響應中,optionId有另一個元素,請在上面更新響應。我試圖應用你的代碼,但得到空指針異常。我找不到一種方法來改變你的腳本,但試圖只獲得optionId的第一個元素。 – Mikael

+0

嘗試上述腳本時發生了什麼。相信它應該工作。試一試。 – Rao

+0

在將第二個元素添加到optionList列表之前,該腳本已工作。在我將第二個元素添加到optionList後,它會在選擇= true時給出id爲null – Mikael