You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:42:39