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

Karate框架:如何将Scenario Outline变量引用至Examples段

Karate框架中Scenario Outline引用动态生成变量的解决方案

错误原因

你的写法逻辑完全颠倒了:Scenario Outline的执行顺序是先加载Examples中的数据,再执行Scenario内的步骤。你在Examples里引用的filtered是Scenario步骤中才会生成的变量,此时Karate还没执行到生成变量的步骤,自然会报ReferenceError: "filtered" is not defined。

正确实现思路

要把CSV过滤后的数据作为测试用例输入,必须先完成数据过滤操作,再将结果传入Scenario Outline的Examples。Karate提供两种常用实现方式:

方式1:动态生成Examples表格(拆分独立测试用例)

先在Background中完成CSV过滤,将结果转为表格格式,再通过karate.setup()动态注入到Examples中,这样每个过滤后的条目都会作为独立测试用例执行:

Background:
* def data = read('test.csv')    
* def selected = 'TRUE'
* def filterFun = function(x){ return x.Status == selected }
* def filteredData = karate.filter(data, filterFun)
# 将过滤后的数据转为Examples需要的二维数组格式
* def examplesData = karate.map(filteredData, function(item){ return [item] })

Scenario Outline: 处理过滤后的每条数据
* print "当前测试用例数据: ", __row
# 这里可以添加你的业务逻辑,比如接口请求、断言等
* match <item> contains { Status: 'TRUE' }

Examples:
    | item |
    | karate.setup(examplesData) |

方式2:循环处理过滤数据(不拆分测试用例)

如果不需要将每个过滤条目拆分为独立测试用例,直接在单个Scenario中用karate.forEach()循环处理即可:

Scenario: 批量处理过滤后的数据
* def data = read('test.csv')    
* def selected = 'TRUE'
* def filterFun = function(x){ return x.Status == selected }
* def filteredData = karate.filter(data, filterFun)

* karate.forEach(filteredData, function(currentItem){
    print "当前处理数据: ", currentItem
    # 插入你的业务逻辑,比如发送请求、验证响应等
    * match currentItem.Status == 'TRUE'
})

关键注意点

  • Examples是Scenario Outline的输入源,必须在Scenario执行前就准备好数据,不能引用Scenario内部生成的变量。
  • 动态生成Examples时,必须将数据转为二维数组格式(每个子数组对应一行用例数据),否则karate.setup()无法识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:15:36