升级Karate至1.5.0.RC4后全局变量返回NULL的问题求助
Karate升级后全局变量返回NULL的解决方案
问题根源
Karate 1.5.x版本对变量作用域和karate.set()行为做了严格调整,同时你的示例代码存在两处关键错误:
- 变量名不匹配:初始化时用了带空格的
‘global variable’(还误用了中文引号),但后续引用的是globalVariable - 未显式声明全局作用域:1.5.x默认变量为场景级作用域,跨Scenario共享必须显式指定全局/特性级作用域
修复步骤
1. 修正全局变量初始化代码
确保变量名一致,并用~前缀显式声明全局作用域(或^前缀声明特性级作用域,仅当前Feature内共享):
Feature: 全局变量初始化Feature Scenario: 初始化全局变量 * def globalVariable = {} # 使用英文引号,变量名与后续引用一致,~前缀标记全局作用域 * karate.set('~globalVariable', globalVariable)
2. 修正测试场景中的变量引用
所有跨Scenario的变量引用必须添加对应作用域前缀:
Feature: 全局变量测试Feature @Test1 Scenario: 给全局变量赋值 - print ~globalVariable - set ~globalVariable.key1 = 'test1' - set ~globalVariable.key2 = 'test2' - print ~globalVariable - print 'key1的值: ', ~globalVariable.key1 @Test2 Scenario: 从Test1获取值 - print ~globalVariable - set ~globalVariable.key3 = 'test3' - print ~globalVariable @Test3 Scenario: 从Test2获取值 - print 'key1的值: ', ~globalVariable.key1 - print 'key2的值: ', ~globalVariable.key2 - print 'key3的值: ', ~globalVariable.key3 @Test4 Scenario: 从Test3获取值 - print ~globalVariable - set ~globalVariable.key3 = 'testA' - print ~globalVariable @Test5 Scenario: 从Test4获取值 - print 'key1的值: ', ~globalVariable.key1 - print 'key2的值: ', ~globalVariable.key2 - print 'key3的值: ', ~globalVariable.key3
3. 可选:同一Feature内共享的更优方案
如果仅需在同一Feature内跨Scenario共享变量,建议用特性级作用域(^前缀)替代全局变量,避免污染全局空间:
# 初始化时用^前缀 * karate.set('^featureVariable', {}) # 引用时同样加^前缀 - print ^featureVariable
关键版本差异说明
Karate 1.4.x默认将karate.set()的变量视为全局作用域,且对变量名的容错性较高;1.5.x开始强制区分作用域,默认变量仅在当前Scenario有效,必须通过~(全局)或^(特性级)前缀显式声明跨场景共享的变量,同时严格校验变量名的一致性。
内容的提问来源于stack exchange,提问作者Vijay Kanth Perikala
相关产品推荐
相关产品推荐

