Karate测试场景中判断字符串是否属于预定义列表并优化大文件读取
解决方案
首先明确:Karate 原生的 read() 函数自带缓存机制,同一路径的文件在单次测试执行过程中只会被读取一次,你当前的写法本身不会重复读取大体积 input.csv 文件。如果想要彻底消除疑虑、同时简化冗余代码,可以按如下方案优化:
优化点说明
- 把固定配置和预读取操作放到
Background块,全局只执行一次,避免每个用例重复定义常量 - 用 Karate 内置的
karate.contains()方法替代karate.match().pass判断元素是否在列表中,逻辑更直观、执行效率更高 - 去掉冗余的临时变量赋值,直接使用 Examples 注入的变量即可
优化后代码
Feature: 商品单位校验 Background: # 全局仅读取一次CSV文件和预定义列表 * def inputData = read('input.csv') * def listMinBestTypes = ['PCE','PR','DZN'] Scenario Outline: Mass_A is correct for STD and PCE * def row = """ { Artikeltyp: '<Artikeltyp>', MinBestellmengeEinheit: '<MinBestellmengeEinheit>', Mass_A: '<Mass_A>' } """ * def expected = (Artikeltyp == 'STD' && karate.contains(listMinBestTypes, MinBestellmengeEinheit) && Mass_A.length <= 0) ? 'Mass_A is NOT populated for STD and PCE' : 'Mass_A is correct for STD and PCE' * match expected == karate.info.scenarioName Examples: | inputData |
额外可选优化
如果你的CSV文件体积特别大(超过十万行级别),可以改用karate.readAsCsv()方法读取,直接生成JSON数组处理,不用依赖Scenario Outline的逐行注入,进一步提升执行效率。
内容的提问来源于stack exchange,提问作者Stephanie H
相关产品推荐
相关产品推荐

