在Robot框架中,如何以数据驱动方法执行多个测试用例

问题描述 投票:0回答:1

我有一组测试场景(比如 10 个),我想针对不同的国家/地区(比如 3 个)执行这些测试场景。

  1. for 循环不是首选,因为每个场景的执行时间会更长,并且必须管理每个场景的通过/失败。
  2. 为每个测试场景创建关键字并按国家/地区命名。
    • 这会产生 3 个不同的机器人文件,每个国家一个,每个场景有 10 个测试用例
    • 任何新的添加/删除场景,都必须更新 3 个文件
  3. 基于机器人数据驱动程序模板的方法似乎支持每个机器人文件一个测试场景。使用数据文件并动态执行一个数据条目作为一个测试用例
    • 这会导致 10 个机器人文件,每个测试场景一个文件
    • 任何新的测试场景都将是新的机器人文件
    • 有什么方法可以在机器人数据驱动方法中包含更多测试场景
  4. 您建议针对数据集迭代执行场景的任何其他方法,其中每次迭代结果都是单独捕获的。
variables robotframework data-driven-tests
1个回答
1
投票

我的第一个推荐是带有 for 循环的模板。这样您就不必管理失败,每次迭代都将彼此独立。每个数据集都将使用模板执行。请注意,如果一次迭代失败,则整个测试用例将被标记为失败,但您将能够检查哪一次迭代失败。

以下是上述示例的代码:

*** Variables ***
@{COUNTRIES}    USA    UK

*** Test Cases ***
Test Scenario 1
    [Template]    Test Scenario 1 Template
    FOR    ${country}    IN    @{COUNTRIES}
        ${country}
    END

Test Scenario 2
    [Template]    Test Scenario 2 Template
    FOR    ${country}    IN    @{COUNTRIES}
        ${country}
    END

Test Scenario 3
    [Template]    Test Scenario 3 Template
    FOR    ${country}    IN    @{COUNTRIES}
        ${country}
    END
    
*** Keywords ***
Test Scenario 1 Template
    [Arguments]    ${country}
    Log    ${country}
    Run Keyword If    $country == 'UK'    Fail    Simulate failure.

Test Scenario 2 Template
    [Arguments]    ${country}
    Log    ${country}
    Run Keyword If    $country == 'USA'   Fail    Simulate failure.

Test Scenario 3 Template
    [Arguments]    ${country}
    Log    ${country}

另一个选项基于此answer,它在运行时动态生成测试用例。只需要一个小型库,同时也充当监听器。该库可以有一个将被调用的

start_suite
方法,它将获取作为 Python 对象的套件,
robot.running.model.TestSuite
。然后,您可以使用该对象以及 Robot Framework 的 API 以编程方式创建新的测试用例。

动态测试库.py:

from robot.running.model import TestSuite

class DynamicTestLibrary(object):
    ROBOT_LISTENER_API_VERSION = 3
    ROBOT_LIBRARY_SCOPE = 'GLOBAL'
    ROBOT_LIBRARY_VERSION = 0.1

    def __init__(self):
        self.ROBOT_LIBRARY_LISTENER = self
        self.top_suite = None

    def _start_suite(self, suite, result):
        self.top_suite = suite
        self.top_suite.tests.clear() # remove placeholder test

    def add_test_case(self, name, keyword, *args):
        tc = self.top_suite.tests.create(name=name)
        tc.keywords.create(name=keyword, args=args)
        
    def add_test_matrix(self, data_set, test_scenarios):
        for data in data_set:
            for test_scenario in test_scenarios:
                self.add_test_case(f'{test_scenario} - {data}', test_scenario, data)

globals()[__name__] = DynamicTestLibrary

机器人框架4.0更新

由于 4.0 版本中进行了向后不兼容的更改(运行和结果模型已更改),如果您使用 4.0 以上的版本,

add_test_case
功能应更改如下。

def add_test_case(self, name, keyword, *args):
    tc = self.top_suite.tests.create(name=name)
     tc.body.create_keyword(name=keyword, args=args)

在机器人文件中添加一个

Suite Setup
,您可以在其中调用
Add Test Matrix
关键字以及国家/地区和测试场景列表,以便为每个组合生成测试用例。这样,每个国家/地区都会有一个单独的测试用例 - 测试场景对,同时将所有内容都放在一个文件中。

测试机器人:

*** Settings ***
Library        DynamicTestLibrary
Suite Setup    Generate Test Matrix

*** Variables ***
@{COUNTRIES}    USA    UK

*** Test Cases ***
Placeholder test
    [Documentation]    Placeholder test to prevent empty suite error. It will be removed from execution during the run.
    No Operation
    
*** Keywords ***
Generate Test Matrix
    ${test scenarios}=    Create List    Test Scenario 1    Test Scenario 2    Test Scenario 3
    DynamicTestLibrary.Add Test Matrix    ${COUNTRIES}    ${test scenarios}

Test Scenario 1
    [Arguments]    ${country}
    Log    ${country}
    Run Keyword If    $country == 'UK'    Fail    Simulate failure.

Test Scenario 2
    [Arguments]    ${country}
    Log    ${country}
    Run Keyword If    $country == 'USA'   Fail    Simulate failure.

Test Scenario 3
    [Arguments]    ${country}
    Log    ${country}

这将是控制台上的输出:

# robot --pythonpath . test.robot
==============================================================================
Test
==============================================================================
Test Scenario 1 - USA                                                 | PASS |
------------------------------------------------------------------------------
Test Scenario 2 - USA                                                 | FAIL |
Simulate failure.
------------------------------------------------------------------------------
Test Scenario 3 - USA                                                 | PASS |
------------------------------------------------------------------------------
Test Scenario 1 - UK                                                  | FAIL |
Simulate failure.
------------------------------------------------------------------------------
Test Scenario 2 - UK                                                  | PASS |
------------------------------------------------------------------------------
Test Scenario 3 - UK                                                  | PASS |
------------------------------------------------------------------------------
Test                                                                  | FAIL |
6 critical tests, 4 passed, 2 failed
6 tests total, 4 passed, 2 failed
==============================================================================
© www.soinside.com 2019 - 2024. All rights reserved.