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

1 def setCookie = testRunner.testCase.testSteps["打开cas页面"].testRequest.response.responseHeaders["Set-Cookie"]
2 
3 
4 
5 def  JSessionId
6 if ((m = setCookie =~ /JSESSIONID=(\w*);/)) {
7   JSessionId = m.group(1)
8   testRunner.testCase.setPropertyValue( "JSESSIONID", JSessionId )
9 }

 验证登录信息:

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

 

posted @ 2017-01-17 10:11  逍遥无名  阅读(1182)  评论(0编辑  收藏  举报