1. 作自動化測試的時候,須要模擬一些界面上的操做場景,有時就會碰到須要根據上一步的測試步驟狀態選擇下一步須要跳轉的步驟,這個時候就須要獲取上個TestStep的運行狀態,我的理解的狀態應該有:html
Successapi
Failed測試
Cancelledui
Disabledspa
因而在SoapUI Groovy Script中注入的三個對象「log」, "context"和「testRunner」中各類嘗試,看是否存在一個屬性,表示TestStep的狀態。htm
2. 試了不少次,終於在testRunner的方法中看到了一個帶有Status的方法「getStatus()」,因而欣喜的想知道這個方法獲取到的是什麼值:對象
log.info testRunner.status接口
log.info testRunner.getStatus()ip
上面這兩條語句都打印了"RUNNING",因而去查了API,發現TestRunner的Status是一個枚舉值:rpc
Enum Constants:
CANCELLED
FAILED
FINISHED
INITIALIZED
PENDING
RUNNING
WARNING
可是這個狀態的值表示的是當前TestRunner的狀態,並非某個TestStep的狀態。
3. 因而查了不少SoapUI API中的其餘類,發現TestStepResult這個接口裏面有一個方法「getStatus()」,專門用來獲取TestStep的運行狀態(TestStepStatus)。
這個TestStepStatus也是枚舉值:
CANCELLED
FAILED
OK
UNKNOWN
4. 實現這個TestStepResult接口的類不少:
AMFTestStepResult, JdbcTestStepResult, ManualTestStepResult, PropertyTransfersTestStep.PropertyTransferResult, RestRequestStepResult, WsdlMessageExchangeTestStepResult, WsdlSingleMessageExchangeTestStepResult, WsdlTestRequestStepResult, WsdlTestStepResult, XmlRpcTestStepRequestResult
可是Groovy Script中注入的三個對象"log", "context", "testRunner"都不是實現TestStepResult的類的實例。(包括Script Assertion中注入的「messageExchange」也不是以上這些類的實例)
messageExchange屬於:RestResponseMessageExchange類的實例
testRunner屬於:MockTestRunner類的實例
5. 因而就想着怎樣經過"log", "context", "testRunner" 和"messageExchange"這四個對象來獲取到一個TestStepResult對象呢?
查了它們四個的API之後,發現:
testRunner.runTestStep(TestStep testStep) 和
testRunner.runTestStepByName(String name)
這兩個方法返回的是一個TestStepResult實例。
因此就在Groovy Script裏面調用了以下方法:
log.info testRunner.runTestStepByName("GetHoldingsReturn").getStatus()
等這個"GetHoldingsReturn"方法運行完了之後,狀態欄輸出"OK".
6. 綜上所述:
SoapUI在獲取某個TestStep的運行狀態時有很是大的侷限性:
只有在Groovy Script裏面調用testRunner的 "runTestStep" 和 "runTestStepByName" 方法去運行某個TestStep,才能獲取該TestStep的狀態。