在脚本断言SOAP UI中运行测试步骤

时间:2015-12-02 23:02:18

标签: groovy soapui

我在测试用例中有5个测试步骤,我想为测试步骤编写脚本断言

喜欢

    def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
    def httpResponseHeaders = context.testCase.testSteps["Step1"].testRequest.response.responseHeaders
    def httpStatus = httpResponseHeaders["#status#"]
    def httpStatusCode = (httpStatus =~ "[1-5]\\d\\d")[0]
    if (httpscode == "500")

我想重新运行名为第1步的测试步骤

我知道在Script断言中没有testRunner类有没有办法用messageExchange变量类

我看到堆栈溢出的答案

`messageExchange.modelItem.testStep.testCase.getTestStepByName("Step1").run(context.getTestRunner(),context)`

我尝试了代码,但是当我单击运行SOAP UI挂起并且我必须强制关闭SOAP UI应用程序

3 个答案:

答案 0 :(得分:1)

要从脚本断言运行测试步骤,您可以使用此

    import com.eviware.soapui.support.types.StringToObjectMap
    import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner

    def Runner = new WsdlTestCaseRunner(messageExchange.modelItem.testStep.testCase, new StringToObjectMap())

yourTestStep= messageExchange.modelItem.testStep.testCase.testSuite.project.testSuites["ScriptLibrary"].testCases["Library"].testSteps["Lib"]


    yourTestStep.run(Runner,context)

答案 1 :(得分:1)

你的代码很好,除了你的逻辑是有缺陷的,因为你第一次遇到错误500,然后再次调用同一步,然后再用500等失败。在Java内存不足之前,您需要获得不同的状态。

因此,如果你想做类似的事情,你必须实现某种计数器(使用TestCase,TestSuite,Project或Global属性)只执行此循环几次然后失败。

无论如何这对我有用:

def utilitiesSuite = messageExchange.modelItem.testStep.testCase
  .testSuite.project.getPropertyValue('utilitiesTestSuiteName');
messageExchange.modelItem.testStep.testCase.testSuite.project
  .testSuites[utilitiesSuite].testCases["Test Case utility name"]
  .run(null, true);

在这种情况下,我们拥有所有“实用程序”=在专用测试套件中具有一些经常需要的功能的测试用例,我希望它的名称可以在项目级别进行设置,测试套件名称可以放在那里直接作为例如“公用事业”。 我也试过这个:

context.getTestRunner()

作为methor运行中的第一个参数而不是null,但它仅在测试一个需求时起作用,而不是在运行整个测试用例或测试套件时。

答案 2 :(得分:0)

我在这里让另一个对我有用的例子。 它是一个断言脚本,它根据响应节点值运行testStep。

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context );
def holder = groovyUtils.getXmlHolder( "yourTestStep#response" );
def myValue = holder.getNodeValue( "//theNameSpace:yourNode" );

if(myValue == 'whateverYouWant'){
    //com.eviware.soapui.support.UISupport.showInfoMessage(myValue);
    def Runner = new com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner(
    messageExchange.modelItem.testStep.testCase, new com.eviware.soapui.support.types.StringToObjectMap());

    def mySteps= messageExchange.modelItem.testStep.testCase.testSuite.project.testSuites["yourTestSuite"].testCases["yourTestCase"].testSteps["yourTestStep"];
    mySteps.run(Runner,context);
}