如何在Java测试运行器类中读取karate-config.js配置数据?
解决方案
要在JUnit测试运行器里读取karate-config.js的配置并执行条件逻辑,咱们可以手动加载并解析配置脚本,具体实现如下:
修改后的测试运行器代码
import com.intuit.karate.Karate; import com.intuit.karate.core.ScriptValue; import com.intuit.karate.core.ScriptContext; import com.intuit.karate.FileUtils; import java.io.File; class default_TestRunner { @Karate.Test Karate testPostResult() { // 设置测试环境 System.setProperty("karate.env", "qa"); // 定位karate-config.js文件,根据项目实际路径调整 File configFile = new File("src/test/resources/karate-config.js"); // 获取Karate脚本上下文,设置环境变量 ScriptContext context = Karate.context(); context.set("env", System.getProperty("karate.env")); // 执行配置脚本,获取配置对象 ScriptValue config = Karate.eval(FileUtils.toString(configFile), context); // 读取配置中的ACH和PAYPAL值 String achStatus = config.getMap().get("ACH").asString(); String paypalStatus = config.getMap().get("PAYPAL").asString(); // 条件判断,运行指定的feature文件 if ("Yes".equals(achStatus) && "Yes".equals(paypalStatus)) { return Karate.run("src/test/java/features/ACHE2E.feature", "src/test/java/features/PAYPALE2E.feature") .tags("~@ignore"); } // 其他条件分支可以在这里补充,比如返回默认测试执行 return Karate.run().tags("~@ignore"); } }
关键说明
- 路径调整:确保
configFile的路径和项目中karate-config.js的实际位置一致,多数项目会把它放在src/test/resources目录下。 - 上下文初始化:通过
Karate.context()获取脚本上下文并设置env变量,保证和karate-config.js中的环境逻辑匹配。 - 配置解析:用
Karate.eval()执行配置脚本,得到的ScriptValue可以通过getMap()转换成键值对,直接读取需要的配置项。
内容的提问来源于stack exchange,提问作者prem gupta
相关产品推荐
相关产品推荐

