В среде роботов, как я могу выполнить несколько тестовых примеров в методе, управляемом данными

У меня есть набор тестовых сценариев (скажем, 10), которые я хотел бы выполнить против разных стран (скажем, 3).

  1. Цикл for не является предпочтительным, так как время выполнения для каждого сценария будет больше, и необходимо будет управлять каждым сценарием Pass / Fail.
  2. Create Keyword for each Test Scenario and call them per country.
    • this leads to 3 different robot file one per country with 10 Testcases for each scenario
    • Любые новые сценарии добавления / удаления должны будут обновить 3 файла
  3. robot data driver template-based approach appears to support one Test scenario per robot file. Uses data file and dynamically execute one data entry as one testcase
    • This leads 10 robot file one per Test Scenario
    • Любой новый сценарий тестирования будет новым файлом робота.
    • Любой способ включить больше тестовых сценариев в подход, основанный на данных роботов
  4. Любой другой подход, который вы могли бы предложить для итеративного выполнения сценария с набором данных, при котором результаты каждой итерации фиксируются отдельно.

person DnD    schedule 30.01.2021    source источник


Ответы (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}

Другой вариант основан на этом ответе и генерирует тестовые примеры динамически во время выполнения. Только небольшая библиотека , которая также действует как слушатель необходимо. Эта библиотека может иметь start_suite метод, который будет вызываться, и он получит набор (ы) как объект (ы) Python, robot.running.model.TestSuite. Затем вы можете использовать этот объект вместе с API Robot Framework для создания нового теста. кейсы программно.

DynamicTestLibrary.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

ОБНОВЛЕНИЕ для Robot Framework 4.0

Из-за обратно несовместимых изменений (Были изменены модели выполнения и результатов) в версии 4.0 функция add_test_case должна быть изменена, как показано ниже, если вы используете версию выше 4.0.

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 со списком стран и тестовых сценариев, чтобы создать тестовый пример для каждой комбинации. Таким образом, будет индивидуальный тестовый пример для каждой пары страна - тестовый сценарий, при этом все будет храниться в одном файле.

test.robot:

*** 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
==============================================================================
person Bence Kaulics    schedule 30.01.2021
comment
Есть способ добавить новые тестовые наборы из существующего тестового набора вместо ключевого слова. Что-то вроде ‹pre› ‹code› ** Настройки *** Библиотека DataDriver file = data / countries_data.csv Test Teardown Close All Browsers *** Variables *** @ {COUNTRIES} UK Singapore *** Test Cases *** Test1 Создать тестовую матрицу test2 *** Ключевые слова *** Создать тестовую матрицу $ {тестовые сценарии} DynamicTestLibrary.Add Test Matrix $ {COUNTRIES} $ {тестовые сценарии} ‹pre› ‹code› - person DnD; 07.03.2021
comment
@DnD Думаю, если вы удалите эту строку self.top_suite.tests.clear() # remove placeholder test из библиотеки, она должна заработать. - person Bence Kaulics; 07.03.2021
comment
Они действительно создаются, но не выполняются. Следовательно, было интересно, что мне не хватает .. txs - person DnD; 07.03.2021
comment
Мне пришлось изменить строку 18 в DynamicTestLibrary.py на: tc.body.create_keyword (name = keyword, args = args) - person karezza; 08.05.2021
comment
@karezza Спасибо за ваш комментарий, я обновил ответ с изменениями, внесенными в выпуск 4.0. - person Bence Kaulics; 10.05.2021