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

如何基于运行的Karate Scenario选择对应Mock文件?

Karate MockServer 根据当前Scenario动态选择Mock文件的方案

最优方案:全局自动注入Scenario名称到请求头

无需手动在每个Scenario中添加自定义头,利用Karate的全局配置自动为所有请求注入当前Scenario名称:

  1. 在测试Feature的Background中配置全局请求头:
Background:
  * configure headers = { 'X-Karate-Scenario': karate.scenarioName }

该配置会让所有后续请求自动携带X-Karate-Scenario请求头,值为当前运行的Scenario名称。

  1. 在Mock特性中读取请求头并加载对应Mock文件:
Scenario: pathMatches('/downstream/path/api/v0')
  * string mockFileName = requestHeaders['X-Karate-Scenario'] + ".json"
  * def response = read(mockFileName)

方案优势

  • 避免重复代码:无需在每个Scenario中手动编写头信息,所有下游请求自动携带标识
  • 并行测试安全:每个测试线程的karate.scenarioName独立,不会出现上下文串扰问题
  • 灵活性高:若特定请求不需要该头,可通过And headers {}或单独设置头覆盖全局配置

备选方案:全局变量传递(仅适合串行测试)

如果你的测试是串行执行的,可通过全局变量传递Scenario名称,但并行测试时会存在上下文覆盖风险,不推荐:

  1. 在测试Scenario中设置全局变量:
Scenario: scenario 123
  * karate.set('currentScenario', karate.scenarioName)
  When method post
  1. 在Mock特性中读取全局变量:
Scenario: pathMatches('/downstream/path/api/v0')
  * def currentScenario = karate.get('currentScenario')
  * string mockFileName = currentScenario + ".json"
  * def response = read(mockFileName)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:58:24