Karate框架karate-config.js中如何定义使用配置变量
如何在karate-config.js中使用变量统一管理配置项
你可以直接利用JavaScript的函数内变量特性,把需要统一维护的硬编码值提前声明为变量,后续配置赋值时直接引用即可,以下是两种可直接落地的实现方式:
方式1:抽离通用常量(适合多环境存在复用配置值的场景)
把公共的配置片段提前定义为变量,不同环境分支里直接引用、拼接成最终配置值即可,修改时只需要调整变量定义的位置,不用逐行找重复硬编码。
改造后的完整配置代码如下:
function preConfiguration() { var env = karate.env; if (!env) { env = 'prod'; } // 未指定karate.env时默认使用prod环境 // ##### 以下为统一定义的可复用配置变量 ##### // 多环境通用配置 const baseServicePath = '/one'; const localServiceAddr = 'http://localhost:8443'; // prod环境专属配置 const prodDbAddr = '10.10.10.10:5443'; const prodDbName = 'abcd'; const prodDbUser = 'abc'; const prodDbPwd = 'abc123'; // test环境专属配置(如果有可以直接在这里加) // const testServiceAddr = 'http://test-server:8080'; var config = { env: env }; if (env == 'prod') { // 直接引用上面定义的变量赋值/拼接 config.Url = `${localServiceAddr}${baseServicePath}`; config.dbUrl = `jdbc:oracle://${prodDbAddr}/${prodDbName}`; config.dbUserName = prodDbUser; config.dbPassword = prodDbPwd; } else if (env == 'test') { // 测试环境配置直接引用对应变量即可 // config.Url = `${testServiceAddr}${baseServicePath}`; config.Url = ''; } return config; }
方式2:按环境映射配置块(更推荐,维护成本更低)
直接把每个环境的所有配置值统一存在映射对象里,不需要写多层if else判断,新增环境只需要加一组键值对即可:
function preConfiguration() { var env = karate.env; if (!env) { env = 'prod'; } // ##### 所有环境的配置统一在这里管理 ##### const allEnvConfig = { prod: { Url: 'http://localhost:8443/one', dbUrl: 'jdbc:oracle://10.10.10.10:5443/abcd', dbUserName: 'abc', dbPassword: 'abc123' }, test: { Url: 'http://test-env-address:8080/one', dbUrl: 'jdbc:oracle://10.10.10.11:5443/testdb', dbUserName: 'test', dbPassword: 'test123' } // 要加新环境直接在这里追加对应配置块即可 }; // 合并基础配置和当前环境的配置 var config = Object.assign({ env: env }, allEnvConfig[env]); return config; }
说明
- 以上两种写法的变量都定义在
preConfiguration函数作用域内,符合Karate配置加载规则,不会产生全局变量污染 - 所有配置值统一收口管理,后续修改配置不需要在多段逻辑里翻找重复硬编码,只需要修改变量定义的位置即可
内容的提问来源于stack exchange,提问作者user14704837
相关产品推荐
相关产品推荐

