You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Katalon Studio 7中使用多数据集运行完整测试套件

在Katalon Studio 7中用多数据集运行完整测试套件的实现方法

我之前在Katalon Studio 7里也碰到过这个需求——默认的执行逻辑确实是先把单个测试用例的所有数据集行跑完,再执行下一个测试用例,但如果想要「用一组数据集跑完整个套件里的所有用例,再切换到下一组数据集重复执行整个流程」,可以通过以下两种靠谱的方法实现:

方法一:利用测试监听器(Test Listener)+ 全局数据集

这种方法通过监听器控制整个测试套件的迭代次数,让所有测试用例共享同一组数据集参数。

步骤1:准备全局数据集

创建一个Excel(或其他支持格式)的全局数据集,每一行对应一组要在整个套件中使用的参数(比如用户名、密码、测试环境配置等)。确保所有测试用例需要的参数都包含在这个数据集里。

步骤2:编写测试监听器

创建一个Test Listener,用来读取全局数据集、控制迭代次数,并触发套件重复执行:

import com.kms.katalon.core.annotation.BeforeTestSuite
import com.kms.katalon.core.annotation.AfterTestSuite
import com.kms.katalon.core.context.TestSuiteContext
import com.kms.katalon.core.testdata.TestDataFactory
import com.kms.katalon.core.testdata.TestData

class SuiteDataIteratorListener {
    // 替换为你的全局数据集实际路径
    private static final String GLOBAL_DATA_PATH = "Data Files/GlobalSuiteTestData.xlsx"
    private static TestData globalTestData
    private static int currentIteration = 0

    @BeforeTestSuite
    def beforeTestSuite(TestSuiteContext testSuiteContext) {
        // 仅第一次执行时加载全局数据集
        if (globalTestData == null) {
            globalTestData = TestDataFactory.findTestData(GLOBAL_DATA_PATH)
            currentIteration = 0
        }
        // 将当前迭代行号存入全局变量(Katalon数据行从1开始计数)
        GlobalVariable.currentDataRow = currentIteration + 1
    }

    @AfterTestSuite
    def afterTestSuite(TestSuiteContext testSuiteContext) {
        currentIteration++
        // 如果还有未执行的数据集行,重新触发套件执行
        if (currentIteration < globalTestData.getRowNumbers()) {
            com.kms.katalon.core.execution.TestExecutionManager.getInstance().startTestSuite(testSuiteContext.getTestSuiteId(), null)
        }
    }
}

步骤3:修改测试用例读取数据

让所有测试用例通过全局变量currentDataRow读取对应行的参数,不要单独绑定数据集。比如在测试用例中:

// 从全局数据集读取当前行的参数
def username = findTestData("GlobalSuiteTestData").getValue("username", GlobalVariable.currentDataRow)
def password = findTestData("GlobalSuiteTestData").getValue("password", GlobalVariable.currentDataRow)

// 后续用这些参数执行测试步骤(比如登录操作)
WebUI.setText(findTestObject('Page_Login/txt_Username'), username)
WebUI.setText(findTestObject('Page_Login/txt_Password'), password)

步骤4:启用监听器

在Katalon的Profiles设置中,启用你创建的这个Test Listener,确保执行套件时监听器生效。


方法二:使用脚本化测试套件(Scripted Test Suite)

如果想要更灵活的执行控制(比如某用例失败时终止当前迭代),可以直接编写脚本自定义整个套件的执行流程:

步骤1:创建脚本化测试套件

在Katalon中新建一个Scripted Test Suite(区别于普通Test Suite),然后写入以下代码:

import com.kms.katalon.core.testdata.TestDataFactory
import com.kms.katalon.core.testcase.TestCaseFactory
import com.kms.katalon.core.execution.TestCaseExecutor
import com.kms.katalon.core.context.TestCaseContext

// 加载全局数据集
def globalTestData = TestDataFactory.findTestData("Data Files/GlobalSuiteTestData.xlsx")
// 替换为你的测试用例ID列表(按你想要的执行顺序排列)
def targetTestCases = ["TC_Login", "TC_CreateOrder", "TC_VerifyOrder"]

// 遍历每一行数据集
for (int row = 1; row <= globalTestData.getRowNumbers(); row++) {
    println "开始执行第 ${row} 组数据集..."
    // 将当前行号存入全局变量
    GlobalVariable.currentDataRow = row
    
    // 依次执行每个测试用例
    for (String tcId : targetTestCases) {
        def testCase = TestCaseFactory.findTestCase(tcId)
        TestCaseExecutor executor = TestCaseExecutor.newInstance(testCase)
        TestCaseContext tcContext = executor.execute()
        
        // 可选:如果测试用例失败,终止当前数据集的迭代
        if (!tcContext.getTestCaseStatus().isPassed()) {
            println "测试用例 ${tcId} 执行失败,跳过当前数据集剩余用例"
            break
        }
    }
}

步骤2:测试用例读取数据

和方法一一致,所有测试用例通过GlobalVariable.currentDataRow读取全局数据集的对应行参数即可。


注意事项

  • 确保所有测试用例不要单独绑定自己的数据集,避免和全局数据集的逻辑冲突。
  • 如果需要在每次迭代前重置测试环境(比如清理浏览器缓存、退出登录),可以在beforeTestSuite方法(方法一)或脚本的迭代循环开头(方法二)添加对应的操作步骤。
  • 在Katalon Studio 7中,记得提前定义好全局变量currentDataRow(类型设为Integer)。

内容的提问来源于stack exchange,提问作者m shravan goud

火山引擎 最新活动