【问题标题】:How to Preserve Object state in Robot Framework如何在 Robot Framework 中保留对象状态
【发布时间】:2016-04-26 15:42:55
【问题描述】:

我对 Robot Framework 还很陌生,我写了一些关键字,它们调用 .py 文件中的方法。所有这些 Python 方法都放在 llk_machine.py 文件中的一个类中。

下面是我的TestCase文件:

    *** 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 我连接到机器。当我执行这个测试用例时,它执行得很好并通过了。然后,当我选择第二个测试用例来配置延迟时,我收到一条错误消息“无法连接机器”。但是我已经通过第一个测试用例连接到机器,当我物理检查时,机器连接到我的电脑。

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

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

如何防止为每个测试用例创建新对象,并且在整个测试周期中只有一个对象。请帮帮我。

谢谢。

【问题讨论】:

    标签: python robotframework


    【解决方案1】:

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

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

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

    • "TEST SUITE" - 为每个测试套件创建一个新实例。从测试用例文件创建并包含测试用例的最低级别的测试套件有自己的实例,而更高级别的套件都有自己的实例,用于可能的设置和拆卸。

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

    注意:以上描述来自robot framework user guide中的Test library scope部分。

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

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

    如果你的关键字是同名文件的类上的方法,你应该将变量设置为类的属性

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

    更完整的例子可以在robot framework user guide"Test library scope"部分找到

    【讨论】:

      猜你喜欢
      • 2017-09-15
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多