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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:15:05