Groovy 脚本在 运行 测试套件时保持 运行

Groovy script keeps running when running a test suite

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

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

请问我的脚本有问题吗?我没有看到任何无限循环或类似的东西。这只是 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++; 
}

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

所以,第一个要做的改变是脚本应该从测试用例移动到测试套件Setup Script

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

请关注在线评论。

//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,当执行测试套件时,测试用例会自动按字母顺序移动。因此,仅订购不需要单独的测试用例。

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