如何在机器人框架中保存对象状态

How to Preserve Object state in Robot Framework

我是 Robot Framework 的新手,我写了几个关键字,它们调用 .py 文件中的方法。所有这些 Python 方法都放在文件 llk_machine.py.

中的 class 中

下面是我的测试用例文件:

    *** Settings ***

Variables         /repo/user/var_attero.py

Library           %{ROBOTREPO}/Lib/LIB_LLK/llk_machine.py    WITH NAME    class1

    *** Keywords ***
CONNECT

        [Documentation]    Connects to Machine.
        ${CONNECT_PASS_or_FAIL}=    class1.llk_Connect
        [Return]    ${CONNECT_PASS_or_FAIL}

CONFIGURE_DELAY

         [Arguments]    ${port_number}=1    ${fixed_delay}=25000
         [Documentation]    Configure impairment in the active testbed.
         ${pass_fail_status}=    class1.llk_Config_Impair_fixed    ${port_number}  ${fixed_delay}
         [Return]    ${pass_fail_status}

llk_Connect和llk_Config_Impair_fixed是Python文件中的两个方法。通过关键字 connect 我正在连接到机器。当我执行这个测试用例时,它执行得很好并通过了。然后当我 select 配置延迟的第二个测试用例时,我得到一个错误 "Not able to connect the machine"。但是我已经通过第一个测试用例连接到机器,当我物理检查时,机器连接到我的电脑。

所以我认为当我 select 第二个关键字时正在实例化另一个对象,并且正在请求与机器的新套接字连接,这显然失败了,因为机器已经在与其他套接字通信并且可以'接受另一个连接。

当我同时执行两个测试用例时,它工作得很好。当我分别执行它们时,问题就出现了,一个接一个。

如何防止为每个测试用例创建新对象并且在整个测试中只有一个对象cycle.Please帮帮我。

谢谢。

默认情况下,robot 会为每个测试用例创建一个关键字库的新实例,特别是这样测试用例就不会从其他测试用例继承状态。

您可以通过在实现关键字的 python 文件或 class 中添加特殊变量来更改此行为。这个变量被命名为 ROBOT_LIBRARY_SCOPE。您可以将其设置为以下文字字符串之一:

  • "TEST CASE" - 为每个测试用例创建一个新实例。可能的套件设置和套件拆卸共享另一个实例。这是默认值。

  • "TEST SUITE" - 为每个测试套件创建一个新实例。 lowest-level 测试套件由测试用例文件创建并包含测试用例,它们有自己的实例,higher-level 套件都有自己的实例用于可能的设置和拆卸。

  • "GLOBAL" - 在整个测试执行过程中只创建一个实例,并由所有测试用例和测试套件共享。从模块创建的库始终是全局的。

注:以上描述来自Test library scope in the robot framework user guide部分。

例如,要在套件中的所有测试之间共享状态,python 文件的顶部可能如下所示:

# llk_machine.py
ROBOT_LIBRARY_SCOPE = "TEST SUITE"
...
def llk_Connect(...):
    ...

如果您的关键字是 class 上与文件同名的方法,您应该将变量设置为 class

的属性
# llk_machine.py
class llk_machine(...):
    ROBOT_LIBRARY_SCOPE = "TEST SUITE"
    ...

可以在 "Test library scope" section of the robot framework user guide

中找到更完整的示例