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的状态。