Karate中先定义JSON后定义变量,如何替换#(变量)占位符?
在Karate框架中延迟替换JSON里的#(..)占位符
Karate默认在定义JSON对象时会立即解析#(..)占位符,所以如果先定义带占位符的JSON、后定义对应变量,占位符不会自动替换。以下是几种可行的解决方法:
方法一:先存为字符串,后续解析
把JSON结构以字符串形式保存,等变量定义完成后,再用karate.fromString()解析成JSON对象,此时占位符会被正确替换:
* def jsonmapStr = '{a: "#(abc)"}' * def abc = "hello" * def jsonmap = karate.fromString(jsonmapStr) * print jsonmap
方法二:动态更新JSON属性
先定义初始JSON,变量定义完成后,用karate.set()直接替换目标属性的值:
* def jsonmap = {a: "#(abc)"} * def abc = "hello" * karate.set(jsonmap, 'a', abc) * print jsonmap
方法三:用函数延迟生成JSON
把JSON定义成一个函数,调用函数时再生成最终的JSON对象,此时变量已经存在,能正确引用:
* def getJsonmap = () => ({a: abc}) * def abc = "hello" * def jsonmap = getJsonmap() * print jsonmap
内容的提问来源于stack exchange,提问作者Nagulan S
相关产品推荐
相关产品推荐

