2

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

有没有办法打破循环?

提前致谢。

4

3 回答 3

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 客户端埋在一个循环中。

于 2015-03-27T15:45:18.507 回答
0

假设您要运行具有多个步骤(在您的案例中为 13 个)的“测试用例 1”。它还有一个常规步骤“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'])

让我知道这是否对您有用。

于 2013-08-22T16:09:03.293 回答
0

我用了

testRunner.testCase.getTestStepByName("teste").setDisabled(false); //enabled
testRunner.testCase.getTestStepByName("teste").setDisabled(true); //disabled
于 2021-12-21T15:17:09.383 回答