Karate UI能否使用call table特性按数据集逐次执行UI测试场景
Karate UI 数据驱动调用方案解答
核心错误原因
你当前写法的问题集中在两点:
<变量名>格式的占位符仅适用于Scenario Outline搭配Examples的场景,被外部调用的feature中直接引用变量名即可,不需要加尖括号- 你可以直接通过CSV读取数据集,不需要手动维护table,更符合你的业务需求
修正后的实现方案
完全可以实现你要求的「一次登录 + 每组数据独立执行输入+提交」的逻辑,具体写法如下:
1. 主调度feature(负责执行登录、加载数据集、调度后续流程)
Feature: 订单批量提交流程 Background: # 仅执行一次登录逻辑 * call read('classpath:login.feature') # 方案1:手动定义table数据集 * table orderData | firstName | lastName | emailId | phoneNumber | zipCode | | 'test001' | 'Nov-7' | 'test@001.com' | '13000000000' | '100000' | | 'test002' | 'Nov-8' | 'test@002.com' | '13100000000' | '200000' | # 方案2:直接读取CSV文件,更适合大量数据的场景 # * def orderData = read('classpath:order-test-data.csv') Scenario: 迭代执行所有订单提交用例 # 传入数据集,Karate会自动迭代每一行数据,分别执行一次被调用的feature * call read('classpath:order-process.feature') orderData
2. 被调用的订单处理feature(单组数据的输入+提交逻辑)
Feature: 单组数据订单处理流程 Scenario: # 直接引用传入的变量,不要加尖括号 And waitFor(locators.firstNameInput).input(firstName) And waitFor(locators.lastNameInput).input(lastName) And waitFor(locators.emailInput).input(emailId) And waitFor(locators.phoneInput).input(phoneNumber) And waitFor(locators.zipCodeInput).input(zipCode) # 执行提交订单操作 And waitFor(locators.submitButton).click() # 可选:添加提交成功断言 And waitFor('.success-tip').containsText('提交成功')
你尝试的JSON参数写法修正
同样不需要加尖括号,直接引用变量即可:
* def query = { name: firstName, country: lastName, active: active, limit: limit } And waitFor(locators.inputArea).input(query)
如果你要把输入和提交逻辑拆成两个独立的feature也可以,在order-process.feature中先调用输入feature、再调用提交feature即可,传入的参数会在当前调用上下文自动生效,不需要重复传参。
内容的提问来源于stack exchange,提问作者shivin saraf
相关产品推荐
相关产品推荐

