Python 有没有办法将连接到硬件的对象传递到机器人框架?

Python 有没有办法将连接到硬件的对象传递到机器人框架?,python,robotframework,Python,Robotframework,我想用Robot框架测试一个硬件设备。由于我不想在每个测试用例中再次断开和连接我的设备,我想知道是否有可能在Robot框架之外初始化Python对象,但在它内部使用它 请参见我的代码示例,如下所示: Main.py: from robot import run from SomeLibraryUsedByRobot import SomeLibraryUsedByRobot device = Device() SomeLibraryUsedByRobot.device = device ru

我想用Robot框架测试一个硬件设备。由于我不想在每个测试用例中再次断开和连接我的设备,我想知道是否有可能在Robot框架之外初始化Python对象,但在它内部使用它

请参见我的代码示例,如下所示:

Main.py:

from robot import run
from SomeLibraryUsedByRobot import SomeLibraryUsedByRobot

device = Device()
SomeLibraryUsedByRobot.device = device

run('SomeRobotFile.robot')
SomeLibraryUsedByRobot.py:

class SomeLibraryUsedByRobot:
    device = None

    def access_device(self):
        device.some_function()
SomeRobotFile.robot:

*** Settings ***
Library             SomeLibraryUsedByRobot.py

*** Test Cases ***  
Some Test
    Access Device
主文件的执行导致错误
'NoneType'对象没有属性某些函数
,这使我得出结论,主文件中库的
字段设备
的初始化不起作用

我还使用robot框架的侦听器界面及其函数
库导入(self、name、attributes)
尝试了我的计划

MyListener.py:

class MyListener:
    ROBOT_LISTENER_API_VERSION = 2

    def library_import(self, name, attributes):
        if name == "SomeLibraryUsedByRobot":
            device = Device()
            SomeLibraryUsedByRobot.device = device
            print( "SomeLibraryUsedByRobot initialized with device" )
当我尝试使用侦听器时,我直接从控制台(而不是main.py)执行robot文件。我还在库类中添加了一行:
ROBOT\u library\u SCOPE='testsuite'

library\u import(…)
函数肯定会被调用,因为我看到了控制台上的打印。但是第一次尝试的结果是一样的:
'NoneType'对象没有属性some\u function


基本上,我们不必在讨论中涉及任何硬件。我只想将一些python对象从外部传递到robot框架使用的库中。你看到解决方案了吗?

在你的
SomeLibraryUsedByRobot
中创建一个关键字来打开/初始化设备,并创建一个关键字来关闭/删除设备

class SomeLibraryUsedByRobot:

    # Called upon library import for more: http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#library-scope
    def __init__(self):
        self.device = None

    def access_device(self):
        self.device.some_function()

    def init_device(self):
        self.device = Device()

    def deinit_device(self):
        self.device.deinit()
        self.device = None
现在,为了避免连接,在每个测试用例中断开连接,请在中调用这些关键字

通常采用Telnet或SeleniumLibrary等其他现有库中使用的方法,其中有
Open…
Close…
关键字来管理与浏览器的连接,或者Telnet与服务器或硬件的连接,等等

对于多个设备,您可以使用管理多个连接。许多现有的库都在使用它

*** Settings ***
Library           SomeLibraryUsedByRobot
Suite Setup       Init Device
Suite Teardown    Deinit Device

*** Test Cases ***
Case 1
    Access Device

Case 2
    Access Device

Case 3
    Access Device

Case 4
    Access Device