如何在大型JSON文件中使用全局变量占位符实现运行时值替换?
实现Robot Framework全局变量批量替换JSON占位符
完全可以不用逐个设置键值对,通过正则批量匹配+全局变量映射的方式实现需求,以下是具体实现方案:
核心思路
读取JSON文件的原始字符串,用正则匹配所有{变量名}格式的占位符,再从Robot Framework的全局变量池中自动匹配对应值完成替换,全程无需手动遍历JSON的每个键值对。
具体实现步骤
1. 编写自定义替换关键字
在Robot Framework文件中定义一个通用关键字,负责完成占位符的批量替换:
*** Keywords *** 批量替换JSON占位符 [Arguments] ${原始JSON字符串} # 获取所有全局变量 ${全局变量池}= Get Variables global=True # 正则匹配{xxx}格式的占位符 ${匹配规则}= Set Variable r'\{(\w+)\}' # 替换逻辑:找到占位符对应的全局变量值,找不到则保留原占位符 ${替换后JSON字符串}= Evaluate re.sub(${匹配规则}, lambda m: str(全局变量池.get(f'${{{m.group(1)}}}', m.group(0))), ${原始JSON字符串}) modules=re [Return] ${替换后JSON字符串}
2. 完整使用示例
假设你的资源文件夹中有JSON文件test.json:
{ "my_key": {variable1}, "user_name": {global_username}, "config": { "timeout": {global_timeout}, "switch": {enable_feature} } }
Robot Framework测试用例代码:
*** Settings *** Library json *** Test Cases *** 替换JSON全局变量示例 # 1. 设置全局变量(也可以从其他文件导入) Set Global Variable ${variable1} 123 Set Global Variable ${global_username} "test_user" Set Global Variable ${global_timeout} 30 Set Global Variable ${enable_feature} true # 2. 读取原始JSON文件内容 ${原始JSON}= Get File ${RESOURCES}/test.json # 3. 批量替换占位符 ${替换后JSON}= 批量替换JSON占位符 ${原始JSON} # 4. 可选:转为JSON对象用于后续操作 ${最终JSON对象}= Evaluate json.loads(${替换后JSON}) modules=json # 打印结果验证 Log 替换后的JSON字符串:${替换后JSON} Log 最终JSON对象:${最终JSON对象}
3. 关键注意事项
- 若变量是字符串类型,全局变量需要带上引号(如
${global_username} "test_user"),确保替换后符合JSON格式要求; - 数字、布尔值类型的变量直接设置原值即可,替换后会自动匹配JSON的对应类型;
- 若占位符对应的全局变量不存在,会保留原占位符,避免JSON格式报错。
内容的提问来源于stack exchange,提问作者Jaime Junior
相关产品推荐
相关产品推荐

