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