Karate框架如何向JSON请求文件传递场景相关动态参数?
解决方案
1. 修复原有写法不生效的问题
原有写法不生效的核心原因有两个:
- 传递
currentDate时没有执行函数,直接传入了函数对象本身,需要补充括号调用获取返回值 - 需确保
successScenario.json模板中使用Karate内置的#(变量名)语法声明占位符,示例模板内容如下:
{ "id": "#(id)", "age": "#(age)", "date": "#(date)" }
修正后的调用写法:
* def requestBody = call read('successScenario.json') { id: 'U123', age: 23, date: currentDate() } And request requestBody
你也可以省略call关键字,直接读取JSON即可,Karate会自动填充当前上下文的变量,写法更简洁:
* def id = 'U123' * def age = 23 * def date = currentDate() * def requestBody = read('successScenario.json') And request requestBody
2. 配合Scenario Outline的Examples传递动态变量
Examples支持传入动态表达式,只需要在使用变量前通过__eval关键字解析即可,无需单独定义JS文件或者全局配置,示例写法如下:
Feature: 多场景请求测试 # 公共函数可定义在Feature层级,所有场景共用 * def currentDate = function(){ return java.time.LocalDate.now().toString() } Scenario Outline: 不同参数请求测试 # 解析examples中传入的动态表达式 * def date = __eval(date) # 直接读取JSON模板自动填充变量 * def requestBody = read('successScenario.json') And request requestBody When method post Then status 200 Examples: | id | age | date | | U123 | 23 | currentDate() | | U456 | 25 | '2024-05-20' | | U789 | 30 | '2024-12-31' |
3. 额外说明
所有变量都可以定义在Feature或Scenario层级,完全不需要在karate-config.js中配置全局变量,也不需要将JSON模板改为JS文件,符合你的场景需求。
内容的提问来源于stack exchange,提问作者Maddy
相关产品推荐
相关产品推荐

