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")


對於項目中的屬性可分爲這麼幾個級別GlobalProject,TestSuiteTestCase

即全局變量、項目級別、用例集級別、單個用例級別

要獲得如項目級別的屬性變量的話,可以用以下方法

def time_num=context.expand('${#Project#time_num}')        //##號內爲定義哪個級別的屬性變量,後面爲屬性名

發佈了53 篇原創文章 · 獲贊 11 · 訪問量 62萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章