Как разработать Python-код для удобного добавления / настройки третьими лицами - PullRequest
0 голосов
/ 04 сентября 2018

Я сейчас тестирую HW & SW. Чтобы следовать нашему процессу, мне нужно подготовить «спецификацию тестового сценария» и «документы спецификации тестового набора» и на основе «спецификации тестового примера» подготовить сценарий / код тестирования для проверки HW и SW.

Пример спецификации тестового сценария: Test scenario specification example

Пример спецификации тестового примера:

Test case specification example

Во время кодирования / тестирования я выяснил, что нам нужно обновить спецификации «тестового сценария» и «тестового случая». Это подвержено ошибкам. Другой момент заключается в том, что после обновления одного документа вы вынуждены обновить остальные документы.

Поэтому у меня возникла идея создать фреймворк, чтобы упростить мою жизнь и написать все на Python. В любом случае мне нужно комментировать свой код, поэтому я буду использовать исходный код, его комментарии, описание и т. Д. Для генерации документации.

Краткое описание архитектуры:
Класс Test Framework - содержит 0 - x тестовых сценариев
Класс сценария тестирования - содержит 0 - x контрольных примеров
Класс Test Case - содержит 0 - x шагов теста
Класс Test Step - этот класс представляет один шаг, который должен быть выполнен, как описано в спецификации тестового примера.

Я решил использовать класс для шага, так как мне нужно хранить информацию об ожидаемом результате + Мне нужно сохранять фактический результат после выполнения теста, и мне нужно иметь доступ к этим переменным для каждого шага.

Все элементы (Framework, сценарий, тестовый набор) должны быть неизменными и общими для каждого тестирования, однако «шаги теста», выполняемые для каждого тестового примера, различаются и добавляются в зависимости от потребностей и т. Д. Таким образом, этот код может быть рассматривается как код третьего лица / человека или около того, который не является частью структуры.

Вопрос в том, как спроектировать такую ​​вещь? Код, который необходимо добавить.

Я придумал следующую архитектуру:
1) Используя construtor, создайте тестовый сценарий * 1037 2) вызвать метод добавления тестового примера
- этот метод требует / ожидает имя модуля
- пользователь создает новый модуль (новый file.py) для каждого теста

3) метод append с данным модулем импортирует модуль и считывает / сохраняет его внутренние компоненты - имя, описание, шаги.

4) Пользователь создает экземпляр Framework, который содержит методы для перебора всех зарегистрированных сценариев и тестовых случаев и автоматически запускает все тесты и т. Д.

5) Пользователь должен зарегистрировать сценарий.

Структура модуля:

    name = "Undervoltage simulation during stop mode"
    description = "This test verifies undervoltage during stop mode..."

    #The user defines a single method for every step:
    def step1(*args, **kwargs):
       ...

    def step2(*args, **kwargs):
       ...

Фрагмент кода:

    import tfw
    import tscenario
    import tcase
    import tstep

    test_setup = tfw.TestFramework()

    ts1 = tscenario.TScenario('TS0003', 'Requirement1', 'WPT undervoltage simulation')
    ts1.append_test_case('test_case_module_1')

    ts2 = tscenario.TScenario('TS0004', 'Requirement2', 'WPT overvoltage simulation')
    ts2.append_test_case('test_case_module_2')

    test_setup.register_scenarios([ts1, ts2])

    test_setup.generate_scenario_spec('C:/Test/wch65w_test_scenario_spec.xlsx')
    test_setup.generate_test_case_spec('C:/Test/wch65w_test_case_spec.xlsx')

    test_setup.execute()

Все работает, как и ожидалось, однако у меня нет хорошего представления о дизайне - это правильный способ сделать это.

Я не буду беспокоить пользователя такими вещами, как создание объекта «Шаг теста» для каждого шага, который вы хотите выполнить, помещение его в список, это ваш ввод в метод append_test_case () и т. Д. Я хотел бы отвлечь пользователя от этих вещей.

Однако это единственное, что я придумал. Я также новичок в Python, поэтому у меня мало опыта работы со всеми концепциями, которые предлагает Python.

Спасибо за ваши подсказки и идеи.

1 Ответ

0 голосов
/ 04 сентября 2018

Что ж, для тех случаев, когда нетехнические люди вовлечены в процесс тестирования, существует развитие, основанное на поведении (или BDD).

Я рекомендую вам обратиться к Behave , который для меня является библиотекой тестирования, которая имеет лучшую реализацию BDD. Из их описания проекта Github:

Разработка на основе поведения (или BDD) - это гибкая разработка программного обеспечения техника, которая поощряет сотрудничество между разработчиками, QA и нетехнических или бизнес-участников в программном проекте.

Поведение использует файлы функций, в которых задокументировано, как должно работать программное обеспечение. Нетехнические люди в вашей команде должны написать эту спецификацию. Я собираюсь добавить очень простой пример:

Feature: Supported voltage

  Scenario: Plug a device in a 110 socket
    Given we have a device
     When we plug it into a 110 socket
     Then the devices does not explode

  Scenario: Plug a device in a 220 socket
    Given we have a device
     When we plug it into a 220 socket
     Then the device dies miserably

, заданные , , когда и , а затем строки называются шагами, и вы можете связать каждую из них с функцией Python, которая должна проверить, что определенный оператор верны.

from behave import given, when, then, step

@given('we have a device')
def setup_device(context):
    pass

@when('we plug it into a {voltage:d} socket')
def plug_to_socket(context, voltage):
   # your code

@then('behave will test them for us!')
def step_impl(context):
    # test what happens

Обратите внимание на вторую функцию plug_to_socket, она может динамически обрабатывать шаги When we plug it into a 110 socket и When we plug it into a 220 socket, поскольку она определяет переменную voltage, которая может принимать целое число .

Таким образом, эта библиотека может помочь вам избежать дублирования кода и создать гибкую структуру, где нетехнические люди могут определить, как должен работать продукт (SW / HW).

Я не могу сильно помочь, потому что я не знаю бизнес-логику вашего программного обеспечения, поэтому я не могу привести лучший пример. Но я думаю, что это отправная точка, и вы должны прочитать документацию Behave, чтобы ознакомиться с ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...