zoukankan      html  css  js  c++  java
  • 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 )
  • 相关阅读:
    数据类型的总结
    typeof加括号和不加括号的区别
    排序
    数据类型分为哪两类
    css中需要更小的字体如何实现
    一些细节注意点
    数值转换题
    如何用分支结构计算年份
    Scout YYF I
    D. AND, OR and square sum
  • 原文地址:https://www.cnblogs.com/xiaoyaowuming/p/6291918.html
Copyright © 2011-2022 走看看