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

Karate调用其他feature文件时如何在read函数中传递变量?

报错原因

  • Karate 中 #() 属于嵌入式表达式语法,仅支持在 JSON/XML 构造、请求断言等场景下做变量替换,不能直接作为 read() 这类JS原生函数的入参使用,所以你写的 read('#(file)') 会把 #(file) 当成固定文件名去读取,自然找不到对应文件。

修复方案

1. 修改 FeatureBase.feature 代码

把 read('#(file)') 改为直接读取传入的 file 变量即可:

Background:
    * url baseUrl
    * def requestBody = read(file)

2. 可选:优化文件路径写法避免路径错误

如果你的JSON文件和调用脚本不在同一级目录,建议使用classpath:前缀指定类路径下的文件,避免相对路径匹配异常,比如JSON文件存放在src/test/resources/data目录下,Feature1的传参可以改成:

Background:
    * url baseUrl
    * def callFeature = call read('FeatureBase.feature') { file: 'classpath:data/json1.json'}

验证方法

如果修改后还是有问题,可以在FeatureBase的Background中加一行日志打印,确认参数是否正确传递:

Background:
    * url baseUrl
    * print '接收到的文件路径参数:', file
    * def requestBody = read(file)

运行后看控制台输出的路径是否和你实际JSON文件的存放路径一致即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:45:02