Порекомендуйте среду тестирования, основанную на разработке, основанной на бизнес-поведении (BDD): Cucumber!
Порекомендуйте среду тестирования, основанную на разработке, основанной на бизнес-поведении (BDD): Cucumber!
Всем привет,Я сумасшедший мастер.

Сегодня я познакомлю вас с драйвером поведенияразвиватьтестрамка:Cucumber

1. Введение

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

Расширение знаний:

Язык Gherkin — это доменно-ориентированный язык (DSL), используемый для описания бизнес-поведения. Он позволяет пользователям описывать операции, которые должна выполнять программная система, не обращая внимания на конкретные детали реализации. Этот язык имеет читабельность, подобную естественному языку, что делает его идеальным для деловых людей и разработчиков при написании автоматизированных тестовых примеров. Gherkin особенно подходит для подхода Behavior Driven Development (BDD) из-за его способности преобразовывать бизнес-требования в четкие, простые для понимания и поддержки этапы тестирования.

Gherkin использует специальный набор ключевых слов для построения структурированных и содержательных этапов тестирования. Он предназначен для описания, а не для непосредственного выполнения, но в сочетании с инструментом Cucumber позволяет автоматизировать процесс тестирования. Он предназначен для того, чтобы позволить людям с разным опытом (например, деловым людям, разработчикам и тестировщикам) работать с одним и тем же документом. . Понимание требований и достижение консенсуса. Типичный тестовый сценарий Gherkin состоит из нескольких «шагов», каждый шаг представляет собой минимальный блок тестирования. Эти шаги можно объединить в «Сценарии», которые, в свою очередь, составляют «Особенности». Файлы функций обычно начинаются с «Feature:», и каждый шаг содержит ряд условных операторов (таких как «Дано», «Когда» и «Тогда») и, возможно, других ключевых слов.

2. Преимущества, недостатки и применимые сценарии

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

Применимые сценарии:

  1. Для проектов, требующих тесного сотрудничества с бизнес-персоналом,Cucumber может помочь написать простые для понимания сценарии использования тестов.,Содействовать общению и сотрудничеству между медицинским персоналом, персоналом тестировщиков и бизнес-персоналом.
  2. Для проектов, требующих частых обновлений и изменений,Функции Cucumber могут снизить затраты на обслуживание скриптов.,Потому что сценарии использования тестов написаны на естественном языке.,Нет необходимости в частых модификациях。
  3. Подходит для веб-приложений、Автоматизация мобильных приложений и API.

преимущество:

  1. Содействие командной совместной работе: сценарии использования Cucumbertest, написанные на естественном языке,Это позволяет профессиональному персоналу, тестировщикам и бизнес-персоналу лучше понимать и участвовать в тестировании.
  2. Снижение затрат на обслуживание: поскольку тестовые сценарии использования написаны на естественном языке.,Нет необходимости в частых модификациях,Это может снизить стоимость обслуживания тестового сценария.
  3. Поддерживает несколько языков программирования. Cucumber поддерживает несколько языков программирования, таких как Java, Ruby, Python и т. д., что упрощает выбор команд на основе их собственного технологического стека.

недостаток:

  1. Высокая стоимость обучения: для новичков изучение языков огурца и корнишона может занять некоторое время.
  2. Медленное выполнение: поскольку варианты использования Cucumbertest написаны на естественном языке.,Скорость выполнения может быть медленнее,Особенно в крупных проектах.

3. Как использовать

3.1 Cucumber+Java реализует автоматическое тестирование веб-приложений.

При использовании Cucumber для автоматического тестирования веб-приложений он обычно реализуется совместно с Selenium WebDriver. Ниже приведен простой пример, демонстрирующий, как писать автоматизированные тестовые примеры с использованием Cucumber и Selenium WebDriver.

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

Во-первых, нам нужно ввести в проект связанные зависимости Cucumber и Selenium WebDriver и создать файл .feature для написания тестовых примеров. Предположим, что наш файл .feature называется Registration.feature и имеет следующее содержимое:

Язык кода:javascript
копировать
Feature: User Registration
  Scenario: User can register with valid credentials
    Given User is on the registration page
    When User enters "john_doe" as username
    And User enters "password123" as password
    And User enters "password123" as confirm password
    And User clicks on register button
    Then User should be registered successfully

Далее нам нужно создать определения шагов для реализации шагов, определенных в файле .feature. Предположим, мы определяем определения шагов в файле RegistrationStepDefs.java:

Язык кода:javascript
копировать
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class RegistrationStepDefs {
    WebDriver driver;

    @Given("User is on the registration page")
    public void userIsOnRegistrationPage() {
        System.setProperty("webdriver.chrome.driver", "path_to_chrome_driver");
        driver = new ChromeDriver();
        driver.get("url_of_registration_page");
    }

    @When("User enters {string} as username")
    public void userEntersUsername(String username) {
        driver.findElement(By.id("username")).sendKeys(username);
    }

    @When("User enters {string} as password")
    public void userEntersPassword(String password) {
        driver.findElement(By.id("password")).sendKeys(password);
    }

    @When("User enters {string} as confirm password")
    public void userEntersConfirmPassword(String confirmPassword) {
        driver.findElement(By.id("confirmPassword")).sendKeys(confirmPassword);
    }

    @When("User clicks on register button")
    public void userClicksOnRegisterButton() {
        driver.findElement(By.id("registerButton")).click();
    }

    @Then("User should be registered successfully")
    public void userShouldBeRegisteredSuccessfully() {
        // Add assertions to verify successful registration
        driver.quit();
    }
}

В этом примере мы используем аннотации Cucumber для определения шагов тестирования и Selenium WebDriver для имитации пользовательских операций в браузере.

Наконец, мы можем использовать JUnit или TestNG для запуска тестовых случаев Cucumber. В проекте Maven вы можете использовать плагин Maven Surefire для запуска тестов Cucumber.

Это всего лишь простой пример, в реальных проектах могут быть более сложные тестовые сценарии и операции. Однако на этом примере вы можете понять, как использовать Cucumber и Selenium WebDriver для реализации автоматического тестирования веб-приложений.

3.2 Реализация Cucumber+Python автоматизированного тестирования веб-приложений

При использовании Cucumber и Python для автоматического тестирования веб-приложений мы обычно используем Behave в качестве платформы BDD в сочетании с Selenium WebDriver. Ниже приведен простой пример, демонстрирующий, как использовать Behave и Selenium WebDriver для написания автоматических тестовых случаев.

Для начала нам нужно установить необходимые библиотеки. В Python мы можем использовать pip для установки Behave и Selenium WebDriver:

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

Затем мы создаем файл .feature для записи тестовых примеров. Предположим, что наш файл .feature называется Registration.feature и имеет следующее содержимое:

Язык кода:javascript
копировать
Feature: User Registration
  Scenario: User can register with valid credentials
    Given User is on the registration page
    When User enters "john_doe" as username
    And User enters "password123" as password
    And User enters "password123" as confirm password
    And User clicks on register button
    Then User should be registered successfully

Затем нам нужно создать определения шагов для реализации шагов, определенных в файле .feature. Мы определяем определения шагов в файле с именем Registration_steps.py:

Язык кода:javascript
копировать
from behave import given, when, then
from selenium import webdriver

@given('User is on the registration page')
def user_is_on_registration_page(context):
    context.driver = webdriver.Chrome()
    context.driver.get('url_of_registration_page')

@when('User enters "{text}" as username')
def user_enters_username(context, text):
    username_input = context.driver.find_element_by_id('username')
    username_input.send_keys(text)

@when('User enters "{text}" as password')
def user_enters_password(context, text):
    password_input = context.driver.find_element_by_id('password')
    password_input.send_keys(text)

@when('User enters "{text}" as confirm password')
def user_enters_confirm_password(context, text):
    confirm_password_input = context.driver.find_element_by_id('confirmPassword')
    confirm_password_input.send_keys(text)

@when('User clicks on register button')
def user_clicks_on_register_button(context):
    register_button = context.driver.find_element_by_id('registerButton')
    register_button.click()

@then('User should be registered successfully')
def user_should_be_registered_successfully(context):
    # Add assertions to verify successful registration
    context.driver.quit()

В этом примере мы используем аннотации Behave для определения шагов тестирования и используем Selenium WebDriver для имитации действий пользователя в браузере.

Наконец, мы можем использовать командную строку для запуска теста поведения:

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

Это выполнит написанный нами тестовый пример и выведет результаты теста.

3.3 Cucumber+Python реализует пример автоматического тестирования интерфейса API

При использовании Cucumber и Python для автоматического тестирования интерфейсов API мы обычно используем Behave в качестве BDD-фреймворка и объединяем его с библиотекой запросов. Ниже приведен простой пример, демонстрирующий, как использовать библиотеки поведения и запросов для написания автоматических тестовых случаев.

Для начала нам нужно установить необходимые библиотеки. В Python мы можем использовать pip для установки библиотек поведения и запросов:

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

Затем мы создаем файл .feature для записи тестовых примеров. Предположим, что наш файл .feature называется api_test.feature и его содержимое следующее:

Язык кода:javascript
копировать
Feature: API Test
  Scenario: Verify API response
    Given API endpoint is "https://api.example.com/users"
    When User sends a GET request to the API
    Then API should respond with status code 200
    And API response should contain user data

Затем нам нужно создать определения шагов для реализации шагов, определенных в файле .feature. Мы определяем определения шагов в файле api_test_steps.py:

Язык кода:javascript
копировать
from behave import given, when, then
import requests

@given('API endpoint is "{url}"')
def set_api_endpoint(context, url):
    context.api_url = url

@when('User sends a GET request to the API')
def send_get_request(context):
    context.response = requests.get(context.api_url)

@then('API should respond with status code {status_code}')
def verify_status_code(context, status_code):
    assert context.response.status_code == int(status_code)

@then('API response should contain user data')
def verify_user_data_in_response(context):
    # Add assertions to verify user data in API response
    # For example, check if certain fields are present in the response
    pass

В этом примере мы используем аннотации Behave для определения шагов тестирования и используем библиотеку запросов для отправки запросов API и проверки ответов API.

Наконец, мы можем использовать командную строку для запуска теста поведения:

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

Это выполнит написанный нами тестовый пример и выведет результаты теста.

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

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

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