有什么方法可以减少机器人框架中的套件设置/拆卸和测试设置/拆卸样板吗?

Hub*_*bro 1 python robotframework

我正在从事一个变得相当大和复杂的项目。

在我们的机器人测试文件中,我们现在有几个套件设置/拆卸和测试设置/拆卸,用于处理第三方服务的生成模拟服务器、重置配置、覆盖随机值的生成,以便我们的测试输出保持可预测等。

由于每个测试文件都需要进行所有设置/拆卸,因此设置部分中的样板数量变得非常愚蠢。

减少此测试设置样板的“规范”方法是什么?我不能简单地将所有设置/拆卸语句收集到几个关键字中并使用它们,因为测试套件并不都有完全相同的要求。

例如,Robot Framework 中是否有任何方法可以让测试库(特别是 Python)添加安装/拆卸操作?这样我就可以在设置部分设置一些元数据,并让测试库根据需要添加设置/拆卸操作。

例如,我可以添加一个元数据标头,例如Metadata Uses services Twitter, Facebook,然后测试库将处理套件级别的设置/拆卸以生成和终止模拟服务器,以及测试级别的设置/拆卸以清理其状态。

Ben*_*ics 5

您可以使用库范围。例如,对于SUITE范围,将为每个套件创建一个新实例。

为每个测试套件创建一个新实例。最低级别的测试套件由测试用例文件创建并包含测试用例,拥有自己的实例,而较高级别的测试套件都拥有自己的实例以进行可能的设置和拆卸。

这使您可以控制何时调用构造函数和析构函数。然后是这些,因此库的构造函数和析构函数可以像“设置”和“拆卸”一样起作用。您甚至可以将元数据设置移至构造函数中。

这是使用范围的示例TEST

from robot.libraries.BuiltIn import BuiltIn

class lib(object):
    ROBOT_LIBRARY_SCOPE = 'TEST'
    ROBOT_LIBRARY_VERSION = 0.1

    def __init__(self, x):
        self.x = x
        self.test_name = 'setup'
        BuiltIn().set_suite_metadata('META', 'value', append=True)
        BuiltIn().log_to_console(f'\n                 init {x}')

    def kw(self, test_name):
        self.test_name = test_name
        BuiltIn().log_to_console(f'                 keyword {self.test_name} - {self.x}')
        
    def __del__(self):
        BuiltIn().log_to_console(f'                 del {self.test_name}')


globals()[__name__] = lib
Run Code Online (Sandbox Code Playgroud)

测试机器人:

*** Settings ***
Library    lib    111

*** Test Cases ***
Test 1
    kw   ${TESTNAME}
    
Test 2
    kw   ${TESTNAME}
    
Test 3
    kw   ${TESTNAME}
Run Code Online (Sandbox Code Playgroud)

输出:

Bence:[Robotframework/SO_material]# robot --pythonpath . test.robot

                 init 111
                 del setup
==============================================================================
Test
==============================================================================
Test 1
                 init 111
                 keyword Test 1 - 111
Test 1                                                                | PASS |
------------------------------------------------------------------------------
                 del Test 1
Test 2
                 init 111
                 keyword Test 2 - 111
Test 2                                                                | PASS |
------------------------------------------------------------------------------
                 del Test 2
Test 3
                 init 111
                 keyword Test 3 - 111
Test 3                                                                | PASS |
------------------------------------------------------------------------------
                 del Test 3
Test                                                                  | PASS |
3 critical tests, 3 passed, 0 failed
3 tests total, 3 passed, 0 failed
==============================================================================
Run Code Online (Sandbox Code Playgroud)