RobotFramework接口测试:如何从JSON响应中获取嵌套键值
从嵌套JSON中提取指定值的Robot Framework方案
嘿,刚接触Robot Framework和Python遇到嵌套JSON取值的问题太正常啦,我来帮你一步步搞定从这个响应里拿到"tom"的方法!
首先,假设你已经用RequestLibrary发送请求并拿到了响应,第一步先把响应转换成Robot能直接处理的JSON对象,用Get Response Json关键字就能搞定:
${response_json}= Get Response Json
接下来给你两种常用的取值方案,按需选择就行:
方法1:通过索引直接取值(适合元素位置固定的场景)
你的JSON里Key2是一个数组,目标对象是数组里的第二个元素(Robot里列表索引从0开始,所以索引是1),直接通过路径就能拿到name值:
${target_name}= Set Variable ${response_json}[Key2][1][name] Log 提取到的名字:${target_name}
不过这种方法有个小局限:如果数组里元素的顺序发生变化,就会取错值,所以更稳妥的是用下面的循环查找法。
方法2:循环遍历数组查找(灵活可靠,适配元素位置变化)
如果不确定目标元素在数组里的位置,或者需要根据id等条件匹配,就遍历Key2里的每个对象,找到符合条件的name:
${target_name}= Set Variable ${EMPTY} :FOR ${item} IN @{response_json}[Key2] \ Run Keyword If '${item}[name]' == 'tom' Set Variable ${target_name} ${item}[name] \ Exit For Loop If '${target_name}' != '${EMPTY}' Log 找到的目标名字:${target_name}
要是你需要忽略大小写(比如想匹配"Tom"但JSON里是小写的"tom"),把判断条件改成下面这样就行:
Run Keyword If '${item}[name]'.lower() == 'tom'.lower() Set Variable ${target_name} ${item}[name]
另外,如果你想用上Python的简洁写法,也可以用Evaluate关键字写一段小代码,效率很高:
${target_name}= Evaluate next(item['name'] for item in ${response_json}['Key2'] if item['name'].lower() == 'tom'.lower()) Log 提取到的名字:${target_name}
这段代码用生成器表达式遍历数组,直接返回第一个匹配的name值,非常省心。
内容的提问来源于stack exchange,提问作者mac
相关产品推荐
相关产品推荐

