Мощная практика автоматического тестирования BDD на Python с использованием Behave
Мощная практика автоматического тестирования BDD на Python с использованием Behave

Автоматизированное тестирование является неотъемлемой частью современной разработки программного обеспечения, улучшая качество программного обеспечения, ускоряя циклы разработки и снижая стоимость регрессионного тестирования. В мире Python Behave служит инструментом разработки на основе поведения (BDD), который предоставляет разработчикам понятный и удобочитаемый способ написания и выполнения тестовых примеров. В этой статье будет показано, как использовать библиотеку Behave в Python в сочетании с BDD для выполнения автоматического тестирования, а также приведены некоторые практические примеры кода.

Что такое БДД?

BDD — это методология разработки программного обеспечения, в которой упор делается на написание понятных спецификаций на естественном языке путем работы с заинтересованными сторонами (такими как клиенты, менеджеры по продуктам, разработчики). Основная идея BDD — способствовать разработке программного обеспечения путем определения спецификаций поведения системы и обеспечения соответствия разработанного программного обеспечения этим спецификациям.

Поведение Введение

Behave — это среда тестирования BDD для Python.,Это позволяет разработчикам писать простые для понимания поведенческие спецификации.,И преобразуйте эти спецификации в исполняемые тестовые примеры. Синтаксис Behave прост и интуитивно понятен.,Написание тестовых сценариев с использованием языка Gherkin.,Напримерgiven, when, thenи другие ключевые слова,Сделайте тестовые примеры понятными для нетехнических людей.

Установить поведение

первый,Убедитесь, что Python и pip установлены. Затем,Вы можете сделать это с помощью следующей команды:

Язык кода:bash
копировать
pip install behave

Написание тестовых примеров поведения

Допустим, мы разрабатываем простое приложение-калькулятор.,мы хотим написать немногоBehaveПротестируйте его базовую функциональность.。наспервый Создайте файл с именемfeaturesкаталог,Затемсуществовать Должен Оглавление Вниз Создайте файл с именемcalculator.featureфайлы,Этот файл будет содержать наши тестовые примеры.

Язык кода:gherkin
копировать
# calculator.feature

Feature: Calculator
  As a user
  I want to perform basic arithmetic operations
  So that I can use the calculator for calculations

  Scenario: Add two numbers
    Given I have entered 5 into the calculator
    And I have entered 3 into the calculator
    When I press add
    Then the result should be 8 on the screen

Среди приведенного выше кода,насопределяет файл с именемCalculatorфункция,и сценаAdd two numbers,В этом сценарии описывается процесс ввода двух чисел в калькулятор и выполнения операции сложения. Следующий,Нам необходимо реализовать эти шаги.

image-20240418200859406
image-20240418200859406

определение шага реализации

Чтобы сообщить Behave, как выполнять наши тестовые шаги.,наснуждатьсяхотетьреализовать определение этих шагов。существоватьfeaturesОглавление Вниз Создайте файл с именемstepsкаталог,Затем создайте файл Python в этом каталоге.,Напримерcalculator_steps.py,И напишите код определений шагов.

Язык кода:python
кодКоличество запусков:0
копировать
# calculator_steps.py

from behave import given, when, then

@given('I have entered {number} into the calculator')
def step_enter_number(context, number):
    context.number = int(number)

@when('I press add')
def step_press_add(context):
    context.result = context.number + context.number

@then('the result should be {result} on the screen')
def step_check_result(context, result):
    assert context.result == int(result), f"Expected {result}, but got {context.result}"

В приведенном выше коде,нас Определены три шага:step_enter_numberдля ввода цифр,step_press_addИспользуется для выполнения операций сложения.,step_check_resultИспользуется для проверки правильности результатов.。

Запуск тестов

После завершения тестового примера и определений шагов,нас Можетсуществовать Войдите в терминалfeaturesОглавление,И запустите Behave, чтобы выполнить тест:

Язык кода:bash
копировать
behave

Если все в порядке, вы должны увидеть, как Behave выводит результаты теста и указывает, пройден ли тестовый пример или нет.

Из этой статьи мы узнали, как использовать библиотеку Behave в Python в сочетании с BDD для автоматического тестирования. Благодаря интуитивно понятному синтаксису Behave и простым для понимания сценариям тестирования разработчики могут более эффективно писать и выполнять тестовые сценарии, тем самым улучшая качество программного обеспечения и ускоряя процесс разработки.

image-20240418200911848
image-20240418200911848

Расширенное использование: использование схемы сценария и примера

image-20240418200700893
image-20240418200700893

В дополнение к базовым сценариям тестирования Behave также поддерживает структуру и пример сценария, что позволяет нам более гибко писать тестовые сценарии, особенно для нескольких наборов входных данных.

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

Язык кода:gherkin
копировать
# calculator.feature

Feature: Calculator
  As a user
  I want to perform basic arithmetic operations
  So that I can use the calculator for calculations

  Scenario: Add two numbers
    Given I have entered 5 into the calculator
    And I have entered 3 into the calculator
    When I press add
    Then the result should be 8 on the screen

  Scenario Outline: Subtract two numbers
    Given I have entered <num1> into the calculator
    And I have entered <num2> into the calculator
    When I press subtract
    Then the result should be <result> on the screen

    Examples:
      | num1 | num2 | result |
      | 10   | 5    | 5      |
      | 8    | 3    | 5      |
      | 20   | 15   | 5      |

  Scenario Outline: Multiply two numbers
    Given I have entered <num1> into the calculator
    And I have entered <num2> into the calculator
    When I press multiply
    Then the result should be <result> on the screen

    Examples:
      | num1 | num2 | result |
      | 2    | 3    | 6      |
      | 5    | 4    | 20     |
      | 10   | 2    | 20     |

Теперь нам нужно обновить файл определения шага для обработки новых действий.

Язык кода:python
кодКоличество запусков:0
копировать
# calculator_steps.py

from behave import given, when, then

@given('I have entered {number:d} into the calculator')
def step_enter_number(context, number):
    context.number = number

@when('I press add')
def step_press_add(context):
    context.result = context.result + context.number

@when('I press subtract')
def step_press_subtract(context):
    context.result = context.result - context.number

@when('I press multiply')
def step_press_multiply(context):
    context.result = context.result * context.number

@then('the result should be {result:d} on the screen')
def step_check_result(context, result):
    assert context.result == result, f"Expected {result}, but got {context.result}"

В приведенном выше определении шага,насдобавленstep_press_subtractиstep_press_multiplyсправиться Вычитаниеи Операция умножения。в то же время,Мы анализируем число в целочисленном типе в определении шага.,для правильного выполнения математических действий.

С помощью расширения сценария ###: использование тегов для управления сценариями тестирования.

В реальной разработке программного обеспечения,Часто необходимо запускать различные типы тестов.,Например, дымовое тестирование, регрессионное тестирование и т. д. Для лучшего управления тестовыми сценариями,Behave предоставляет функцию тегов,Сценарии тестирования можно классифицировать по разным меткам.,В целях выборочного Запуска тестов.

Предположим, мы хотим классифицировать предыдущие тестовые сценарии по функциональности и использовать теги для управления ими.

Язык кода:gherkin
копировать
# calculator.feature

@addition
Feature: Calculator Addition
  As a user
  I want to perform addition operation
  So that I can add numbers

  Scenario: Add two numbers
    Given I have entered 5 into the calculator
    And I have entered 3 into the calculator
    When I press add
    Then the result should be 8 on the screen

@subtraction
Feature: Calculator Subtraction
  As a user
  I want to perform subtraction operation
  So that I can subtract numbers

  Scenario Outline: Subtract two numbers
    Given I have entered <num1> into the calculator
    And I have entered <num2> into the calculator
    When I press subtract
    Then the result should be <result> on the screen

    Examples:
      | num1 | num2 | result |
      | 10   | 5    | 5      |
      | 8    | 3    | 5      |
      | 20   | 15   | 5      |

@multiplication
Feature: Calculator Multiplication
  As a user
  I want to perform multiplication operation
  So that I can multiply numbers

  Scenario Outline: Multiply two numbers
    Given I have entered <num1> into the calculator
    And I have entered <num2> into the calculator
    When I press multiply
    Then the result should be <result> on the screen

    Examples:
      | num1 | num2 | result |
      | 2    | 3    | 6      |
      | 5    | 4    | 20     |
      | 10   | 2    | 20     |

В приведенном выше примере,Мы определяем функцию для каждой функции (сложение, вычитание, умножение).,и использовать@символ для каждогоScenarioТеги добавлены。сейчассуществовать,Мы можем выборочно Запускать тесты по тегам.

Запуск тестов для определенного ярлыка

хотеть Запуск тестов для определенного ярлыка,Можно использовать-kвариант и укажите имя метки。

Язык кода:bash
копировать
behave -k addition

Это будет выполняться только с тегами@additionтестовый сценарий。

Запускайте тесты, за исключением определенных тегов

Если мы хотим исключить определенные теги из тестирования,Можно использовать-kОпции исуществовать Добавить перед названием ярлыка~символ。

Язык кода:bash
копировать
behave -k ~multiplication

Это будет выполняться, за исключением тех, которые отмечены как@multiplicationВсе тестовые сценарии, кроме。

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

Интеграция и формирование отчетов

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

Платформа интеграционного тестирования

Behave можно интегрировать со многими популярными платформами и инструментами тестирования, такими как Selenium для тестирования веб-интерфейса, Appium для тестирования мобильных приложений и т. д. Благодаря этой интеграции мы можем использовать эти инструменты в тестовых примерах Behave и добиться более комплексного автоматического тестирования.

Создать отчет

Behave также предоставляет различные плагины для создания отчетов.,На основе результатов испытаний могут быть созданы удобные для чтения отчеты об испытаниях. Например,behave-html-formatterПлагины могут генерироватьHTMLФорматировать отчет,Он содержит подробную информацию о сценарии тестирования, пройденных и неудавшихся тестовых случаях, времени выполнения и т. д. Установка и использование этих плагинов может дать нам лучшее понимание того, как выполняются наши тесты.,и поделитесь им с другими членами команды или заинтересованными сторонами.

Пользовательская реализация шага

иногда,Возможно, нам придется взаимодействовать с другими системами.,Например, база данных, API и т. д. Behave позволяет нам Пользовательская реализация шага,Выполните эти операции, написав Pythonкод,и интегрировать его в процесс тестирования. Таким образом,Мы можем реализовать более гибкие и сложные сценарии тестирования.,Охватите больше функций и бизнес-логики.

лучшие практики

При написании автоматизированных тестов стоит обратить внимание на некоторые вещи:

  1. Делайте тестовые примеры краткими и конкретными:Тестовые случаи должны быть достаточно простыми,Но он может охватывать различные ситуации целевой функции.,Избегайте избыточных и повторяющихся этапов тестирования.
  2. хорошее соглашение об именах:Используйте очистку、Назовите тестовый сценарий описательным именем.ишаг,Чтобы другим было легче понять и поддерживать.
  3. Часто проводите тесты:Поскольку проект продолжает повторятьсяивозобновлять,Автоматизированное тестирование необходимо проводить часто.,Своевременно выявляйте и устраняйте потенциальные проблемы.
  4. Регулярно просматривайте и обновляйте тест-кейсы:Регулярно просматривайте тест-кейсы,А также обновлять и оптимизировать в соответствии с изменениями и потребностями проекта.,Убедитесь, что тестовые примеры соответствуют реальной бизнес-логике.
  5. Правильное использование контроля версий:проверю кейсишаг定义等测试资产纳入版本控制系统,Чтобы облегчить командное сотрудничество и историческое отслеживание.

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

Подвести итог

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

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

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

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

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose