如何使用Groovy脚本在soapUI中执行测试用例时停止无限循环

xpcnnkqh  于 2023-03-07  发布在  其他
关注(0)|答案(4)|浏览(202)

下面的代码是我的groovy脚本的一部分,它在soapUI中执行一个测试用例。

def testCase = testRunner.testCase.testSuite.testCases["TestCase"];  
def properties = new com.eviware.soapui.support.types.StringToObjectMap();  
def async = false;  
testCase.run(properties, async);

在执行完这段代码之后,测试用例的执行正常启动,但没有停止。假设测试用例中有13个测试步骤。一旦我运行了那个groovy脚本,它就从1开始到13,再从1开始到13,以此类推。直到我关闭整个soapUI应用程序。
有没有办法打破这个循环?
先谢了。

zvms9eto

zvms9eto1#

严格地说,你不能用类似“break”键这样的键来停止一个正在运行的脚本。由于公认的答案并没有充分说明这一点,我认为值得指出,以免别人徒劳地搜索。
由于Groovy脚本是在某个匿名的JVM工作线程中运行的,因此您目前对该工具的唯一希望是找到活动线程并终止它,然后希望该工具能够正常恢复。我尝试附加一个JIT调试器,但没有证明它有帮助。我最终重新启动了该工具,并重写了脚本中未保存的部分。
编写循环的一个好的经验法则是使用条件中断进行测试。

def i = 0;

for (foo in bar){

    // do stuff

    if(i>1){ break }
}

如果你的脚本停止响应,* 值得注意的是 * 它可能不一定是在无限循环中,而是有内存问题。这是我发布这个答案的第二个原因。
你可以查看这篇文章来寻找优化SOAPUI测试用例的内存使用的方法。它往往会变得饥渴。http://www.soapui.org/working-with-soapui/improving-memory-usage.html
具体来说,关闭任何打开的、可能被脚本中的循环更新的请求和响应窗口,重绘这些窗口的成本可能会使SOAPUI客户机很快陷入循环。

py49o6xq

py49o6xq2#

假设您要运行包含多个步骤的“测试用例1(13在您的情况下)。它也有一个时髦的步骤“G1”(测试索引1)。当您从G1运行测试用例时,测试用例将逐个执行其测试步骤,并且一旦到达G1,它将再次开始执行,因为"这就是你在那一步中所做的,因此你以一个无限循环结束。
您应该做的是将开始执行的步骤排除在必须执行的测试用例之外。传统上,这样的脚本被称为驱动脚本,它要么是一个单独的测试用例,要么在应用程序本身之外。
要解决您的问题,您可以执行以下操作之一。

1. Disable the step G1 from where you are starting the execution so that when the test runner cycles through all the steps in the test case it'll skip G1 because it is disabled and you'll escape the infinite loop.

2. Alternatively you can use the below code instead of what you have.

def project = testRunner.testCase.testSuite.project
testRunner.runTestStep(project.testSuites["TestSuite 1"].testCases["TestCase 1"].testSteps['delete'])

如果你觉得管用就告诉我。

7kjnsjlb

7kjnsjlb3#

我以前

testRunner.testCase.getTestStepByName("teste").setDisabled(false); //enabled
testRunner.testCase.getTestStepByName("teste").setDisabled(true); //disabled
kkbh8khc

kkbh8khc4#

在属性中创建条件,例如布尔值为true的continueLoop。检查脚本中的值是否为true。如果希望脚本停止,请将值更改为false。

相关问题