升级Karate至1.x及以上版本后无法从mock文件访问配置文件
Karate 1.x+ 版本driver.intercept/mock场景访问全局配置的可行方案
Karate 1.0版本对请求拦截、mock服务的执行上下文做了隔离调整,旧版本通过在mock feature中直接调用* call read('classpath:karate-config.js')获取配置的方式已失效,可通过以下三种方案实现配置访问:
方案1:规则绑定阶段显式传参
主测试流程配置intercept规则时,直接将mock逻辑需要用到的配置变量作为参数传入对应mock feature,无需在mock feature内单独读取配置文件:# 主测试用例代码 * def mockParams = { targetUrl: baseApiUrl, testToken: userToken } * driver.intercept(read('classpath:mocks/request-intercept.feature'), mockParams)拦截规则feature中可直接使用传入的参数变量:
# request-intercept.feature 拦截逻辑 Feature: 接口拦截规则 Scenario: pathMatches('/api/user/info') * def response = { code: 0, data: { jumpUrl: targetUrl, token: testToken } }方案2:全局属性透传
多拦截规则复用同一批配置时,可在测试初始化阶段将配置写入Karate全局属性,所有拦截链路的feature都可直接读取,无需逐次传参:# 主测试初始化阶段 * karate.setProperty('publicKey', testPublicKey) * karate.setProperty('envFlag', testEnv)拦截feature中读取配置:
* def publicKey = karate.getProperty('publicKey') * def envFlag = karate.getProperty('envFlag')方案3:抽离mock专属公共配置
将mock场景需要用到的配置从karate-config.js中拆分出来,写成独立的公共feature文件,避免直接调用绑定主测试上下文的karate-config.js:# 新建common/mock-common.feature Feature: mock场景公共配置 * def mockSignSalt = 'test-salt-2024' * def mockCommonResp = { code: 0, msg: 'success' }在所有拦截用的mock feature开头直接调用该公共配置即可:
* call read('classpath:common/mock-common.feature')
注意:Karate 1.x版本中
karate-config.js仅在测试主流程启动时执行一次,绑定主测试上下文生命周期,在拦截链路的独立执行上下文中调用该文件不仅无法注入变量到当前作用域,还可能触发配置重复执行导致的全局变量异常。
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

