我在测试用例中有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应用程序
答案 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);
}