Karate 0.9.5:Feature文件Background调用Java方法变量返回null求助
在Karate 0.9.5中实现Background变量跨Scenario共享的解决方案
问题原因
Karate 0.9.5版本中,callonce在Background块内定义的变量默认作用域仅局限于当前执行的Scenario。由于每个Scenario运行前都会重新执行Background,callonce的缓存仅在单次Background执行中生效,导致后续Scenario无法获取到之前生成的变量值,从而输出null。
解决方案
方法1:使用karate.set()存入全局作用域
通过karate.set()将变量存入Karate的全局上下文,这样所有Scenario都能访问到同一个变量值。修改后的Feature文件如下:
Background: * def RandomStringGenerator = Java.type('Utilities') # 生成随机字符串并存入全局变量 * karate.set('randomString', callonce RandomStringGenerator.generateRandomString(10)) * print 'a' + randomString Scenario: Use Random String * print 'b' + randomString Scenario: Use Random String in scenario2 * print 'c' + randomString
方法2:升级Karate版本(可选)
Karate 1.x及以上版本优化了callonce在Background中的作用域,默认支持跨Scenario保留变量值。如果项目允许升级,直接升级到最新稳定版后,原代码即可正常工作。
额外注意事项
- 确保
Utilities类在测试类路径下(如src/test/java目录),若类带有包名,需在Java.type()中使用全限定类名(例如com.test.Utilities)。 karate.set()的变量会在整个测试运行周期内保留,若需要隔离不同Feature的变量,可添加前缀区分(如feature1_randomString)。
内容的提问来源于stack exchange,提问作者shilpa
相关产品推荐
相关产品推荐

