Karate中Scenario Outline如何限制CSV文件读取行数
Karate框架Scenario Outline读取CSV指定行数实现方法
Karate原生支持该需求,无需修改原始CSV文件、无需引入额外依赖,直接通过内置的数据处理能力即可实现指定行数读取。
具体实现方案
Karate中read('xxx.csv')读取CSV文件后,会自动将CSV解析为JSON数组(数组每个元素对应一行CSV数据,首行表头会自动映射为对象键名,不会计入数据数组),你可以直接用内置的数组操作方法截取需要的行数,两种常用写法如下:
- 方法1:使用
take关键字(优先推荐,适合取前N行场景)take是Karate内置的数组截取语法,作用是取数组前N个元素,自带越界保护——如果CSV实际数据行数小于你设置的N值,会自动读取全部有效数据,不会抛出索引越界错误。
以读取前50行为例,直接修改Examples块的读取逻辑即可:
Examples: | read('kittens.csv') take 50 |
- 方法2:使用
sublist方法(适合自定义区间取数场景)
如果需要跳过部分头部数据、或者读取中间指定区间的行,可以用Java List原生的sublist方法,参数格式为sublist(起始索引, 结束索引):- 索引从0开始计数,0对应CSV的第一行有效数据
- 截取范围包含起始索引对应的行,不包含结束索引对应的行
比如读取前50行的写法为:
Examples: | read('kittens.csv').sublist(0, 50) |
如果需要跳过前10行、读取后续40行(即第11行到第50行数据),写法为:
Examples: | read('kittens.csv').sublist(10, 50) |
注意:使用
sublist时需要保证传入的结束索引不超过数组总长度,否则会抛出索引越界异常。
完整修改后的Feature示例
Feature: scenario outline using a dynamic table from a csv file Scenario Outline: cat name: Given url demoBaseUrl And path 'cats' And request { name: '#(name)', age: '#(age)' } When method post Then status 200 And match response == { id: '#number', name: '#(name)' } Examples: | read('kittens.csv') take 50 |
内容的提问来源于stack exchange,提问作者Sumathy Natarajan
相关产品推荐
相关产品推荐

