如何在Robot Framework中遍历键对应多值的字典?
Robot Framework字典遍历生成指定命令的正确写法
问题场景
我有一个这样的字典:
myDict = {"keyA" : ["valA_1","valA_2"], "keyB" : ["valB_1","valB_2"]}
想要通过for循环遍历它,生成并执行下面格式的命令:
command --arg1 keyA --arg2 valA_1 --arg3 valA_2 command --arg1 keyB --arg2 valB_1 --arg3 valB_2
我试了下面的写法,但达不到预期效果:
FOR ${key} IN @{MY_DICT.keys()} FOR ${val1} IN @{MY_DICT.values()[0]} FOR ${val2} IN @{MY_DICT.values()[1]}
问题原因
你写的嵌套循环逻辑不对:@{MY_DICT.values()[0]}只会取第一个key对应的列表,而且三层循环会把所有值乱组合,不是每个key对应自己的两个值。
正确写法
方法1:遍历键值对再拆分值列表
FOR ${key} ${values} IN &{MY_DICT} ${val1} Set Variable ${values}[0] ${val2} Set Variable ${values}[1] # 替换成你实际执行命令的关键字,比如Execute Command Execute Command command --arg1 ${key} --arg2 ${val1} --arg3 ${val2} END
方法2:直接在循环里解构值列表
如果你的Robot Framework版本支持,可以一步到位解构值列表,写法更简洁:
FOR ${key} ${val1} ${val2} IN &{MY_DICT} Execute Command command --arg1 ${key} --arg2 ${val1} --arg3 ${val2} END
关键点说明
- 用
&{MY_DICT}可以直接遍历字典的键值对,每次循环取出一个key和它对应的value列表。 - 第一种方法先拿到完整的value列表,再拆分出两个元素;第二种方法直接在循环参数里把列表拆成两个变量,更高效。
内容的提问来源于stack exchange,提问作者bgkrdb07
相关产品推荐
相关产品推荐

