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

Karate框架CSV场景大纲加载Null值异常问题求助

解决Karate Scenario Outline中CSV加载null值的问题

问题原因

Karate读取CSV时,会将单元格中的"null"识别为普通字符串,空单元格则解析为空字符串"";而表头的testField!语法是用来强制该字段必须非空(为空时抛出错误),并非将空值转换为JSON的null。

解决方案

方案1:在JSON模板中直接处理(推荐)

修改你的sample.json,使用Karate的三元表达式判断值,将字符串"null"或空字符串转换为JSON的null:

{
  "testField": "#(testField == 'null' || testField == '' ? null : testField)"
}

当CSV中testField的值是null字符串或空单元格时,会自动替换为JSON的null。

方案2:在Scenario中先处理变量再加载JSON

如果不想修改JSON模板,可以在Scenario Outline中先对变量进行处理,再传入JSON:

Scenario Outline:
   # 先处理testField,将"null"或空字符串转为null
   * def processedTestField = testField == 'null' || testField == '' ? null : testField
   # 通过read方法传递处理后的变量覆盖模板值
   * def inputJson = karate.read('../karate/data/sample.json', { testField: processedTestField })
   * print "Input JSON is: " + karate.pretty(inputJson)

Examples:
|read('classpath:karate/data/testData.csv')|

方案3:全局CSV转换(适合多字段场景)

如果有大量字段需要处理空值或"null"字符串,可以自定义CSV转换逻辑批量处理:

Background:
   * def transformCsvRow = function(row) {
       for (var key in row) {
         if (row[key] === 'null' || row[key] === '') {
           row[key] = null;
         }
       }
       return row;
     }
   * def rawCsv = karate.read('classpath:karate/data/testData.csv')
   * def processedCsv = karate.map(rawCsv, transformCsvRow)

Scenario Outline:
   * def testField = currentRow.testField
   * def inputJson = karate.read('../karate/data/sample.json')
   * print "Input JSON is: " + karate.pretty(inputJson)

Examples:
| currentRow |
| karate.forEach(processedCsv) |

这种方式通过Background提前处理所有CSV行,再用forEach循环作为Examples数据源,适合批量处理多字段的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:25:26