0

在运行整个套件时,我遇到了一个 groovy 脚本的奇怪行为。我有一个脚本,它在我的测试用例运行之前按字母顺序排序,即使整个测试套件完成,它似乎也会永远运行。

在此处输入图像描述

在我单击它查看详细信息并立即返回测试套件后,它显示它已完成且不再运行。

请问我的脚本有问题吗?我没有看到任何无限循环或类似的东西。它只是 ReadyAPI 中的一个错误吗?谢谢你的建议。

我的排序脚本:

ArrayList<String> testCaseList = new ArrayList<String>();
for (testCase in testRunner.testCase.testSuite.getTestCaseList()) {
 testCaseList.add(testCase.getName());
}
testCaseList.sort();
int i = 0;
for (tCase in testCaseList) {
 def curCase = testRunner.testCase.testSuite.getTestCaseByName(tCase);
 curIndex = testRunner.testCase.testSuite.getIndexOfTestCase(curCase); 
 testRunner.testCase.testSuite.moveTestCase(curIndex,i-curIndex);
 i++; 
}
4

1 回答 1

2

目前,看起来您有单独的测试用例进行排序。但实际上,这不是您的有效测试用例。

因此,要进行的第一个更改是脚本应该从 test case 移动到Setup Scripttest suite

这是测试套件的设置脚本,它按字母顺序排列。需要特别注意的是,如果测试用例名称中有数字,则必须按自然顺序排列。否则应该没问题。

请遵循在线评论。

//Get the sorted order of the test case which is expected order
def newList = testSuite.testCaseList.name.sort()
log.info "Expected order of test cases: ${newList}"

//Get the current index of the test case
def getTestCaseIndex = { name -> testSuite.getIndexOfTestCase(testSuite.getTestCaseByName(name))}

//Closure definition and this is being called recursively to make the desired order
def rearrange
rearrange = {
    def testCaseNames = testSuite.testCaseList.name
    if (testCaseNames != newList) {
        log.info testCaseNames
        newList.eachWithIndex { tc, index ->
            def existingIndex = getTestCaseIndex(tc)
            if (index != existingIndex) {
                testSuite.moveTestCase(index, existingIndex-index)
                rearrange()
            }
        }
    } else {
        log.info 'All cases sorted'
    }
}

//Call the closure
rearrange()

这样Setup Script,当执行测试套件时,测试用例会自动按字母顺序移动。因此,仅订购不需要单独的测试用例。

现在,该套件使用所需的测试用例执行,并且问题中提到的当前问题根本不应该存在。

于 2017-12-05T06:30:33.403 回答