__init__.robot中定义的Suite变量无法在测试用例中访问
Robot Framework套件变量初始化后子套件访问为空的问题解决
问题场景
套件结构如下:
Suite_folder |- __init__.robot |-\service_name |-\Resources | |-myresources.robot |-test_cases1.robot |-test_cases2.robot
在__init__.robot中通过Suite Setup初始化套件变量:
*** Settings *** ... Suite Setup Prepare Test Run *** Variables *** @{KC_Access_Tokens} # 存储套件所需令牌的列表 @{KC_Tokens_Claims} # 存储所有令牌声明的列表 *** Keywords *** Prepare Test Run set suite variable @{KC_Access_Tokens} token1 token2 token3 set suite variable @{KC_Tokens_Claims} claim1 claim2 claim3
运行套件时,Prepare Test Run已执行且变量初始化正确,但在test_cases1.robot的测试用例中调用如下关键字时,两个列表显示为空:
*** Keywords *** Check Suite Variables log ${KC_Access_Tokens} log ${KC_Tokens_Claims}
疑问:是否无法在__init__.robot中初始化套件变量?
原因及解决方法
并非不能在__init__.robot里初始化套件变量,问题出在变量作用域上:Set Suite Variable默认仅将变量绑定在当前套件(即Suite_folder根套件)的作用域内,而service_name作为子套件,默认无法直接访问父套件的变量。
方法1:改用全局变量
如果变量需要在整个测试层级共享,替换Set Suite Variable为Set Global Variable:
Prepare Test Run set global variable @{KC_Access_Tokens} token1 token2 token3 set global variable @{KC_Tokens_Claims} claim1 claim2 claim3
方法2:子套件中引用父套件变量
保持根套件的Set Suite Variable不变,在子套件中通过${SUITE PARENT}访问父套件变量:
Check Suite Variables log ${SUITE PARENT.KC_Access_Tokens} log ${SUITE PARENT.KC_Tokens_Claims}
方法3:通过变量文件共享
将变量定义在单独的变量文件中,在__init__.robot和所有子套件中导入该文件,实现变量跨套件共享。
内容的提问来源于stack exchange,提问作者juan noguera
相关产品推荐
相关产品推荐

