2017-04-24 104 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