如何基于运行的Karate Scenario选择对应Mock文件?
Karate MockServer 根据当前Scenario动态选择Mock文件的方案
最优方案:全局自动注入Scenario名称到请求头
无需手动在每个Scenario中添加自定义头,利用Karate的全局配置自动为所有请求注入当前Scenario名称:
- 在测试Feature的
Background中配置全局请求头:
Background: * configure headers = { 'X-Karate-Scenario': karate.scenarioName }
该配置会让所有后续请求自动携带X-Karate-Scenario请求头,值为当前运行的Scenario名称。
- 在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名称,但并行测试时会存在上下文覆盖风险,不推荐:
- 在测试Scenario中设置全局变量:
Scenario: scenario 123 * karate.set('currentScenario', karate.scenarioName) When method post
- 在Mock特性中读取全局变量:
Scenario: pathMatches('/downstream/path/api/v0') * def currentScenario = karate.get('currentScenario') * string mockFileName = currentScenario + ".json" * def response = read(mockFileName)
内容的提问来源于stack exchange,提问作者Luca Pelosi
相关产品推荐
相关产品推荐

