Karate框架中如何重新赋值已定义变量?重复用def是否内存高效?
Karate变量重新赋值问题及内存效率解答
问题场景与报错
测试场景代码:
Scenario: Reassign variable * def name = "Amod" * print "Hello " + name * name = "Animesh" * print "Hello " + name
执行后触发报错:
* name = "Animesh" no step-definition method match found for: name = "Animesh"
原因与正确写法
Karate的Gherkin语法不支持直接用变量名 = 值的方式重新赋值,必须通过def或set关键字完成变量更新:
- 再次使用
def覆盖变量
Scenario: Reassign variable with def * def name = "Amod" * print "Hello " + name * def name = "Animesh" * print "Hello " + name
- 使用
set关键字(更推荐的重新赋值方式)
Scenario: Reassign variable with set * def name = "Amod" * print "Hello " + name * set name = "Animesh" * print "Hello " + name
内存效率说明
不管用def重新定义还是set赋值,内存层面都没有明显的效率损耗:
- 两种操作都是替换原变量指向的对象,原对象如果没有其他引用,会被Java的垃圾回收机制自动清理,不会残留无用内存占用。
def重新定义本质是覆盖变量的绑定关系,和set的底层逻辑一致,不会额外占用多余内存资源。
内容的提问来源于stack exchange,提问作者AMOD MAHAJAN
相关产品推荐
相关产品推荐

