我是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文件中的两个方法。通过关键字连接我连接到机器。当我执行这个测试用例时,它执行得很好并通过。然后,当我选择第二个用于配置延迟的测试用例时,我收到一条错误说"无法连接机器"。但我已经通过第一个测试用例连接到机器,当我进行物理检查时,机器已连接到我的计算机。
所以我认为当我选择第二个关键字时正在实例化另一个对象,并且正在请求与机器的新套接字连接,这显然是失败的,因为机器已经与其他套接字通话并且不能接受另一个连接。
当我同时执行两个测试用例时,它工作得很好。当我一个接一个地执行它们时会出现问题。
如何防止为每个测试用例创建新对象,并且在整个测试周期中只有一个对象。请帮帮我。
感谢。
答案 0 :(得分:2)
默认情况下,robot会为每个测试用例创建一个关键字库的新实例,特别是以便测试用例不会从其他测试用例继承状态。
您可以通过在python文件或实现关键字的类中添加特殊变量来更改此行为。此变量名为ROBOT_LIBRARY_SCOPE
。您可以将其设置为以下文字字符串之一:
"TEST CASE"
- 为每个测试用例创建一个新实例。可能的套件设置和套件拆解共享另一个实例。这是默认设置。
"TEST SUITE"
- 为每个测试套件创建一个新实例。从测试用例文件创建并包含测试用例的最低级别测试套件具有自己的实例,而更高级别的套件都可以获得自己的实例以进行可能的设置和拆卸。
"GLOBAL"
- 在整个测试执行期间只创建一个实例,并由所有测试用例和测试套件共享。从模块创建的库始终是全局的。
注意:以上说明来自Test library scope中的robot framework user guide部分。
例如,要在套件中的所有测试之间共享状态,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部分找到更完整的示例