SoapUI的Property Transfer功能可以很好地对接口请求返回的数据进行参数属性获取传递,但对于Json数据,SoapUI会把数据格式先转换成XML格式,但实际情况却是,转换后的XML格式往往根本没法用Xpath形式获取到指定的数据了。因此只能用Script脚本形式了。

{"addUsersToDirectoryResponse":{"addUserToDirectoryResponse":[{"ack":"Success","userId":"2745379"}]}}

例如要获得userId的数据,有两种方式

一、建立一个script步骤,然后再建一个Property Transfer步骤,将script步骤的结果传递到指定的properties中的property中就可以了

import groovy.json.JsonSlurper

def xresponse = testRunner.testCase.testSteps["addUserToDirectory"].testRequest.response.contentAsString
def slurper = new JsonSlurper()

def result = slurper.parseText(xresponse)

def userId = result.addUsersToDirectoryResponse.addUserToDirectoryResponse[0].userId

二、直接在script步骤中赋值

import groovy.json.JsonSlurper

def xresponse = testRunner.testCase.testSteps["addUserToDirectory"].testRequest.response.contentAsString
def slurper = new JsonSlurper()

def result = slurper.parseText(xresponse)

def userId = result.addUsersToDirectoryResponse.addUserToDirectoryResponse[0].userId.toString()

//testSteps[]中括号中指定当前testCase中的哪个Properties步骤,setPropertyValue()方法中第一个userId参数指Properties步骤中名为userId的property,

第二个参数设定它的值,即上面从返回结果中获得的userId

testRunner.testCase.testSteps["Properties"].setPropertyValue("userId",userId)

另外,在断言中使用脚本断言时,如果也要获得testCase步骤中的property的话,不能直接使用

testRunner.testCase.testSteps["Properties"].getPropertyValue("userId")这样的形式,

否则会报"No such property: testRunner for clases: Script1"的错误

在Script Assertion中想要获得属性值的话可以用以下形式替代

def number = messageExchange.modelItem.testCase.testSteps["Properties"].getPropertyValue("userId")

对于项目中的属性可分为这么几个级别Global, Project,TestSuite, TestCase

即全局变量、项目级别、用例集级别、单个用例级别

要获得如项目级别的属性变量的话,可以用以下方法

def time_num=context.expand('${#Project#time_num}')        //##号内为定义哪个级别的属性变量,后面为属性

实例:

获取登录时的界面cookies值和登录相关的JsessionID

 def setCookie = testRunner.testCase.testSteps["打开cas页面"].testRequest.response.responseHeaders["Set-Cookie"]

 def  JSessionId
if ((m = setCookie =~ /JSESSIONID=(\w*);/)) {
JSessionId = m.group(1)
testRunner.testCase.setPropertyValue( "JSESSIONID", JSessionId )
}

验证登录信息:

 def setCookie = testRunner.testCase.testSteps["登录请求"].testRequest.response.responseHeaders["Set-Cookie"]
def match
if ((m = setCookie =~ /CASTGC=(.*);/)) {
match = m.group(1) }
def Castgc =match testRunner.testCase.setPropertyValue( "CASTGC", Castgc )

最新文章

  1. 百度地图API 批量添加 带检索功能的信息窗口
  2. Software Project Management hw1
  3. iOS8 VPN 应用内连接
  4. Html5最简单的游戏Demo——Canvas绘图的弹弹球
  5. 电商安全无小事,如何有效地抵御 CSRF 攻击?
  6. Java TreeMap 源码解析
  7. 动态修改log4net组件的日志文件名
  8. SQLServer怎样导入excel
  9. 用Delphi 实现WebService 转
  10. 【转】ARM交叉编译工具链
  11. 响应式Web图形篇 —— icon fonts 的探析及应用
  12. html5游戏开发框架之lufylegend开源库件学习记录
  13. Git 转载
  14. 20175213《Java程序设计》实验二Java面向对象程序设计实验报告
  15. 源码部署pxc集群
  16. 11: python中的轻量级定时任务调度库:schedule
  17. 解决 java.lang.ClassNotFoundException: javax.servlet.ServletContext报错
  18. Revit api 创建楼梯图元
  19. C#利用CDO.Message发送邮件
  20. D13——C语言基础学PYTHON

热门文章

  1. vue-resource 设置请求的参数以formData形式以及设置请求的过滤器
  2. Linear Regression_最小二乘(LMS)
  3. sscanf非常的重要
  4. E20170414-ms
  5. IDEA打开父类的接口方法快捷键
  6. Item
  7. python之处理json
  8. 香港药品 ref
  9. solr的多条件组合查询和solr的范围查询【转】
  10. Vue checkbox默认值改变