You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:15:04