将变量加载到JSON中
我有一个非常大的JSON文件,我需要其中的值来自另一个文件中全局定义的变量。有没有可能在这个JSON中使用与这些变量同名的占位符,以便在运行时加载?
示例:
我在resources文件夹中的JSON:
{
"my_key": {variable1}
}
在keywords.robot中定义的变量
Set Global Variable ${variable1} 123
我想在调用时发送的JSON:
{
"my_key": 123
}
有没有办法在不为每一个实例都逐一设置key: value的情况下实现?
解决方案
当然,可以。你可以用一个小巧的Python脚本来渲染你的JSON模板,然后再把它解析回真正的JSON。
# json_template_lib.py
import json, re
from robot.api.deco import keyword
_RE = re.compile(r"\{([A-Za-z_]\w*)\}")
@keyword("Render Json Template")
def render_json_template(template_path, variables: dict):
template_text = open(template_path, "r", encoding="utf-8").read()
def repl(m):
name = m.group(1)
return json.dumps(variables[name]) # handles numbers/strings correctly
rendered = _RE.sub(repl, template_text)
return json.loads(rendered)
下面是用法。
*** Settings ***
Library json_template_lib.py
*** Variables ***
${variable1}= 123
*** Test Cases ***
Send
${vars}= Create Dictionary variable1=${variable1}
${payload}= Render Json Template ${CURDIR}/resources/payload.json ${vars}
# then send ${payload} as your request body
这样你只需要把variable1设置一次,你的庞大的JSON模板就可以在任何地方重用 {variable1}。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。