2016-01-20 84 views
1

我是Robot Framework的新手,我写了几个关键字,它们调用.py文件中的方法。所有这些Python方法都放在文件llk_machine.py中的一个类中。如何在Robot Framework中保留对象状态

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

*** 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文件中的两个方法。通过关键字连接,我连接到机器。当我执行这个测试用例时,它执行得很好并且通过。然后,当我选择第二个测试用例来配置延迟时,出现“无法连接机器”的错误。但是,我已经通过第一个测试用例连接到机器,并且在物理检查时,机器已连接到我的计算机。

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

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

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

谢谢。

回答

2

默认情况下,机器人将为每个测试用例创建一个关键字库的新实例,特别是为了使测试用例不会从其他测试用例继承状态。

您可以通过在实现关键字的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"部分中找到的类的属性