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

Karate框架中Examples另作他用时如何从CSV读取数据传递给调用的feature

适配多CSV数据行的实现方案

根据你的使用场景可以选择以下两种实现方式:

方案1:CSV行数与Examples行数一一对应

直接使用Karate内置的__num变量即可,该变量为当前Scenario Outline执行行的索引(从0开始计数),刚好可以匹配CSV读取后的数组下标,不需要手动写死索引值:

Scenario Outline: 
    * def testData = read('classpath:com/testdata/Test.csv')
    # 合并当前CSV行数据与Examples自定义参数
    * def callParams = testData[__num]
    * set callParams.gain = gain
    * set callParams.spend = spend
    * call read('classpath:controller/Controller.feature') callParams

Examples:
|gain |spend    |
|12000| 12008   |
|3400 | 4655    |

方案2:CSV所有行与Examples所有行做笛卡尔积全量执行

如果你需要CSV的每一条数据都搭配Examples的每一组参数执行(即N行CSV × M行Examples产生N×M条用例),可以用以下两种写法任选其一:

写法A:调用时传入参数数组自动循环

Karate的call指令传入数组时会自动遍历数组的每一个元素,重复执行目标feature:

Scenario Outline: 
    * def testData = read('classpath:com/testdata/Test.csv')
    # 给所有CSV行数据拼接当前Examples的自定义参数
    * def callParams = karate.map(testData, function(row) {
        return karate.merge(row, {gain: gain, spend: spend})
      })
    * call read('classpath:controller/Controller.feature') callParams

Examples:
|gain |spend    |
|12000| 12008   |
|3400 | 4655    |
写法B:预生成测试用例作为Examples数据源

直接把合并好的全量测试用例作为Examples的输入源,代码更简洁:

Background:
  * def csvData = read('classpath:com/testdata/Test.csv')
  * def customParams = [{gain:12000, spend:12008}, {gain:3400, spend:4655}]
  # 生成笛卡尔积测试用例数组
  * def testCases = karate.map(csvData, csvRow => 
      karate.map(customParams, customRow => karate.merge(csvRow, customRow))
    ).flat()

Scenario Outline:
  * call read('classpath:controller/Controller.feature')

Examples:
  | testCases |

以上方案都不需要手动指定索引,可自动适配任意行数的CSV测试数据。

内容的提问来源于stack exchange,提问作者karateKid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:54:06