RobotFramework中如何全局复用PowerSupply类实例?
问题分析
RobotFramework 默认会为每个测试套件/文件创建导入类的新实例,这就是不同测试文件无法共享同一个 PowerSupply 对象状态的核心原因。以下是几种可行的解决方案:
方案1:将 PowerSupply 改为单例模式
直接修改 Python 类,使其无论实例化多少次都返回同一个对象,从根源上解决实例共享问题:
# PowerSupply.py import powersupplyapi class PowerSupply(): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super().__new__(cls, *args, **kwargs) cls._instance.connect = None return cls._instance def connect(self): self.connect = powersupplyapi.connect() def set_voltage(self, voltage): self.voltage = powersupplyapi.set_voltage(voltage) def set_current(self, current): self.current = powersupplyapi.set_current(current)
修改后,所有测试文件导入该类时都会复用同一个实例,无需额外配置即可直接调用关键字共享状态。
方案2:通过全局变量共享实例
在套件初始化时创建实例并存储为全局变量,其他测试文件通过该变量调用方法:
- 修改
__init__.robot,在套件初始化中创建实例并设置全局变量:
# __init__.robot *** Settings *** Resource ./resources/Resource.resource Suite Setup Initialize Power Supply *** Keywords *** Initialize Power Supply ${ps_instance}= Create Instance PowerSupply Set Global Variable ${POWER_SUPPLY} ${ps_instance} ${POWER_SUPPLY}.Connect
- 在测试文件中直接调用全局变量的方法:
# 01_test.robot *** Test Cases *** Configure Power Supply ${POWER_SUPPLY}.Set Voltage 12.0 ${POWER_SUPPLY}.Set Current 2.0
方案3:导入库时指定复用实例(RobotFramework 3.1+)
利用 RobotFramework 内置的 instance 参数,指定导入类时复用已创建的实例:
- 修改
Resource.resource:
# Resource.resource *** Settings *** Library ../source/PowerSupply.py instance=${POWER_SUPPLY}
- 在
__init__.robot的套件初始化中创建实例并设置全局变量:
# __init__.robot *** Settings *** Suite Setup Initialize Power Supply *** Keywords *** Initialize Power Supply ${ps_instance}= Create Instance PowerSupply Set Global Variable ${POWER_SUPPLY} ${ps_instance} ${POWER_SUPPLY}.Connect
后续所有导入该资源的测试文件都会自动复用 ${POWER_SUPPLY} 实例。
内容的提问来源于stack exchange,提问作者cer
相关产品推荐
相关产品推荐

