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}') //##號內爲定義哪個級別的屬性變量,後面爲屬性名