Robot Framework如何拼接字符串生成适配SquashTM的动态变量名
Robot Framework 动态变量名适配SquashTM方案
报错原因
原代码使用的${nameItem${j}}属于嵌套变量写法,SquashTM内置的Robot Framework解析器对变量名做了强校验,不识别嵌套拼接的变量结构,判定变量名包含非法字符才抛出格式错误。
实现思路
完全基于RF内置原生关键字实现,无需安装第三方工具:
- 放弃直接在变量占位符内写嵌套逻辑
- 先将固定前缀和列表元素拼接为纯合法字符的变量名(仅含字母/数字,符合平台规则)
- 借助
Set Suite Variable、Get Suite Variable的动态入参特性完成变量的赋值和读取,保留动态生成、复用变量的能力
重构后可直接运行的代码
@{someList}= Create List A B C D E FOR ${j} IN @{someList} FOR ${i} IN RANGE 999999 ${randomString}= Generate Random String 4 0123456789 # 拼接合法变量名,无任何特殊字符 ${currentNameVar}= Set Variable nameItem${j} ${currentRefVar}= Set Variable refItem${j} # 动态赋值套件变量 Set Suite Variable \${${currentNameVar}} ${randomString} Set Suite Variable \${${currentRefVar}} ${randomString}/${date} # 动态读取变量值用于接口请求,避免嵌套变量写法 ${currentRefVal}= Get Suite Variable \${${currentRefVar}} ${myItem}= GET ${urlAPI}${urlItem}/${currentRefVal} ${condition}= Run Keyword And Continue On Failure ... The randomString number does not exist IF "${condition}"=="True" BREAK END END
后续变量复用方法
两种方式都可以正常取到生成的变量:
- 固定取值:直接使用拼接完成的合法变量名即可,比如取列表元素A对应的名称变量,直接写
${nameItemA} - 动态取值:和赋值逻辑一致,先拼接目标变量名,再通过
Get Suite Variable读取即可,示例:
# 动态取j对应的值 ${targetVarName}= Set Variable refItem${j} ${targetVal}= Get Suite Variable \${${targetVarName}}
写法说明
- 代码中
\$是RF原生支持的转义写法,作用是延迟变量解析,先将拼接完成的合法变量名字符串传入关键字,再由内置关键字完成变量创建/读取,不属于特殊语法 - 最终生成的所有变量名均为
nameItemA、refItemB这类纯字母组合,完全符合SquashTM的参数名规则,不会触发格式报错 - 所有逻辑均基于RF内置关键字实现,不需要安装任何第三方库或工具,符合公司政策限制
内容的提问来源于stack exchange,提问作者JohnnyBoi
相关产品推荐
相关产品推荐

