如何在Robot Framework中保留对象状态
问题描述
我是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_imair_Fixed是Python文件中的两个方法。通过关键字CONNECT,我正在连接到机器。当我执行这个测试用例时,它执行得很好,并且通过了。然后,当我选择第二个测试用例来配置延迟时,我得到一个错误消息"无法连接机器"。但我已通过第一个测试用例连接到计算机,当我进行物理检查时,计算机已连接到我的计算机。
因此,当我选择第二个关键字时,我认为另一个对象正在实例化,并且正在请求到计算机的新套接字连接,这显然是失败的,因为计算机已经在与其他套接字通信,无法接受另一个连接。
当我同时执行这两个测试用例时,它工作得很好。当我逐个分别执行它们时,就会出现问题。
如何防止为每个测试用例创建新对象,并且在整个测试周期中只有一个对象。请帮助我。
谢谢。
解决方案
默认情况下,Robot将为每个测试用例创建一个新的关键字库实例,特别是这样测试用例就不会继承其他测试用例的状态。
您可以通过在实现关键字的python文件或类中添加特殊变量来更改此行为。此变量名为ROBOT_LIBRARY_SCOPE
。您可以将其设置为以下文字字符串之一:
/li>"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"部分可以找到更完整的示例相关文章