微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在机器人框架中,如何以数据驱动的方法执行多个测试用例

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

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

解决方法

我的第一个建议是Templates with for loops。这样您就不必管理故障,每次迭代都将相互独立。每个数据集都将使用模板执行。请注意,如果一次迭代失败,整个测试用例将被标记为失败,但您将能够检查哪个迭代失败。

enter image description here

这是上面例子的代码:

--------

另一个选项基于此 answer,它在运行时动态生成测试用例。只需要一个小的 library that also acts as a listener。这个库可以有一个 *** 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} 方法被调用,它会以 Python 对象 start_suite 的形式获取套件。然后您可以使用此对象和 Robot Framework's API 以编程方式创建新的测试用例。

DynamicTestLibrary.py:

robot.running.model.TestSuite

Robot Framework 4.0 更新

由于在 4.0 版本中进行了向后不兼容的更改 (Running and result models have been changed),如果您使用的是 4.0 以上的版本,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 函数应更改如下。

add_test_case

在机器人文件中添加一个 def add_test_case(self,*args): tc = self.top_suite.tests.create(name=name) tc.body.create_keyword(name=keyword,args=args) ,您可以在其中调用 Suite Setup 关键字以及国家和测试场景列表,为每个组合生成一个测试用例。这样一来,每个国家/地区都有一个单独的测试用例 - 测试场景对,同时将所有内容都放在一个文件中。

test.robot:

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}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。