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

时间:2013-08-22 07:43:03

标签: groovy soapui

下面的代码是我的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应用程序。

有没有办法打破循环?

提前致谢。

2 个答案:

答案 0 :(得分:1)

严格地说,您可以使用“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客户端埋入循环中。

答案 1 :(得分:0)

假设你想运行“测试案例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'])

如果这对您有用,请告诉我。