使用Karate设置JSON值时,Avro命名空间格式键设置失败
解决Karate中带点命名空间键的赋值问题
问题重现
原测试代码尝试为带Avro命名空间格式的键赋值时触发错误:
* def payload = { "name" : { "com.val.str": ""} } * set payload.name["com.val.str"] = 'hello' * print payload
报错信息:
Can only add to an array
尝试过的写法均无效:
* set payload.name[com.val.str] = 'hello' * set payload.name.["com.val.str"] = 'hello'
解决方案
Karate的set语法对带点的键名解析存在特殊处理,可通过以下两种方式解决:
方法1:使用eval执行JavaScript赋值逻辑
直接通过JS语法访问对象属性,避开Karate的表达式解析限制:
* def payload = { "name" : { "com.val.str": ""} } * eval payload.name["com.val.str"] = 'hello' * print payload
方法2:先提取子对象再赋值
将包含目标键的子对象存为变量,再直接操作变量的属性:
* def payload = { "name" : { "com.val.str": ""} } * def nameObj = payload.name * nameObj["com.val.str"] = 'hello' * print payload
两种方法都能正确将payload.name["com.val.str"]的值设为hello,输出结果如下:
{ "name": { "com.val.str": "hello" } }
内容的提问来源于stack exchange,提问作者Viswanath Thothadri
相关产品推荐
相关产品推荐

