如何在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




