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
相关产品推荐
相关产品推荐

