Автоматизация тестирования Selenium WebDriver 4 с Cucumber: лучшие практики и инструменты для Java с использованием JUnit 5

В современном мире веб-приложения стали неотъемлемой частью бизнеса. Их надежность и корректная работа напрямую влияют на успешность компании. Именно поэтому автоматизация тестирования веб-приложений приобретает все большую актуальность.

Автоматизация тестирования – это процесс, позволяющий компьютеру выполнять тесты программного обеспечения вместо человека. Это позволяет существенно ускорить процесс тестирования, повысить его точность и снизить затраты на ручное тестирование.

В этом материале мы рассмотрим лучшие практики и инструменты для автоматизации тестирования веб-приложений с использованием Selenium WebDriver 4, Cucumber, JUnit 5 и Java. Данный подход позволяет создавать надежные и эффективные автотесты, которые обеспечат высокое качество веб-приложений.

По данным исследования Statista, в 2023 году 70% компаний используют автоматизацию тестирования для проверки своих веб-приложений. Это подтверждает, что автоматизация тестирования стала стандартной практикой для многих организаций.

Автоматизация тестирования веб-приложений – это комплексный процесс, включающий в себя следующие этапы:

  1. Планирование. Определение целей, scope, и типов тестирования, а также выбор инструментов.
  2. Разработка сценариев. Создание набора сценариев, которые будут использоваться для автоматического тестирования.
  3. Реализация. Написание кода автотестов с использованием выбранных инструментов и фреймворков.
  4. Запуск и анализ. Запуск автотестов, сбор результатов и анализ полученных данных.
  5. Обслуживание. Регулярное обновление и корректировка автотестов с учетом изменений в функциональности веб-приложения.

Автоматизация тестирования с использованием Selenium WebDriver 4, Cucumber, JUnit 5 и Java имеет ряд преимуществ, которые мы рассмотрим в следующих разделах.

Преимущества автоматизации тестирования с Selenium WebDriver 4

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

Selenium WebDriver 4 обладает рядом преимуществ, которые делают его идеальным выбором для автоматизации тестирования веб-приложений:

  • Ускорение тестирования. Автоматизация тестирования с помощью Selenium WebDriver 4 позволяет выполнять тесты значительно быстрее, чем ручное тестирование. Это особенно важно для регрессионного тестирования, когда необходимо проверить, что новые изменения не нарушили существующую функциональность.
  • Повышение точности. Автоматические тесты выполняются по строго определенному сценарию, что исключает человеческий фактор и минимизирует ошибки.
  • Снижение затрат. Автоматизация тестирования снижает расходы на ручное тестирование, высвобождая время и ресурсы команды разработчиков.
  • Улучшение качества. Автоматизированные тесты позволяют проводить тестирование более часто, что позволяет выявлять ошибки на ранних стадиях разработки, а также улучшить общее качество программного обеспечения.
  • Поддержка многоплатформенности. Selenium WebDriver 4 работает на различных платформах, включая Windows, Mac, Linux, что обеспечивает гибкость при разработке автотестов.
  • Поддержка множества языков программирования. Selenium WebDriver 4 интегрируется с различными языками программирования, включая Java, Python, JavaScript, что делает его доступным для широкого круга разработчиков.
  • Расширяемость. Selenium WebDriver 4 позволяет использовать дополнительные инструменты и библиотеки, что позволяет расширять возможности автоматизации тестирования.

По данным исследования, проведенного компанией Sauce Labs, использование Selenium WebDriver 4 позволило компаниям увеличить скорость тестирования в среднем на 30% и снизить количество ошибок на 20%.

В следующем разделе мы рассмотрим Cucumber – мощный инструмент для BDD-тестирования, который идеально дополняет Selenium WebDriver 4.

Cucumber: BDD-тестирование для ясности и сотрудничества

Cucumber – это фреймворк для автоматизации тестирования, который использует подход Behavior Driven Development (BDD). BDD – это методика разработки, которая фокусируется на поведении системы с точки зрения пользователя, а не на ее реализации.

Cucumber позволяет писать тесты в формате Gherkin, который является простым и читаемым языком, похожим на английский. Это делает тесты понятными не только для разработчиков, но и для менеджеров, аналитиков и других участников проекта.

Вот некоторые преимущества использования Cucumber для BDD-тестирования:

  • Повышение ясности и четкости. Gherkin-тесты легко читаются и понимаются всеми участниками проекта, что позволяет обеспечить единое видение функциональности системы.
  • Улучшение коммуникации. BDD способствует улучшению коммуникации между разработчиками, тестировщиками, менеджерами и аналитиками.
  • Сокращение времени на тестирование. Тесты, написанные на Gherkin, легко автоматизировать с помощью Cucumber, что позволяет ускорить процесс тестирования.
  • Повышение качества. BDD способствует созданию более качественного программного обеспечения, потому что фокусируется на поведении системы с точки зрения пользователя.

В результате использования Cucumber для BDD-тестирования можно добиться следующих результатов:

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

Согласно исследованию компании SmartBear, использование BDD привело к сокращению количества ошибок в программах на 30%.

В следующем разделе мы рассмотрим, как интегрировать Selenium WebDriver 4 с Cucumber.

Интеграция Selenium WebDriver 4 с Cucumber

Интеграция Selenium WebDriver 4 с Cucumber является мощным инструментом для автоматизации тестирования веб-приложений. Она позволяет сочетать возможности Selenium WebDriver 4 по управлению веб-браузером с возможностями Cucumber по написанию тестов в формате Gherkin.

Такая интеграция предоставляет следующие преимущества:

  • Повышение читаемости и понятности тестов. Тесты, написанные с помощью Cucumber, легко читаются и понимаются всеми участниками проекта, что позволяет обеспечить единое видение функциональности системы.
  • Сокращение времени на разработку тестов. Cucumber позволяет быстро создавать тесты с помощью простого и интуитивно понятного синтаксиса Gherkin.
  • Улучшение масштабируемости тестирования. Cucumber позволяет легко добавлять новые тесты и расширять существующие тестовые сценарии.
  • Увеличение гибкости тестирования. Cucumber позволяет легко изменять тестовые сценарии в соответствии с изменениями в функциональности веб-приложения.
  • Создание более качественных тестов. Cucumber позволяет создавать более качественные тесты, которые более полно охватывают функциональность веб-приложения.

Процесс интеграции Selenium WebDriver 4 с Cucumber включает в себя следующие шаги:

  1. Установка необходимых библиотек. Для интеграции Selenium WebDriver 4 с Cucumber необходимо установить необходимые библиотеки, включая Selenium WebDriver 4, Cucumber и JUnit 5.
  2. Создание файлов Gherkin. В файлах Gherkin описываются тестовые сценарии с помощью простого и интуитивно понятного синтаксиса.
  3. Создание шагов определения. В шагах определения прописывается код, который выполняется при выполнении тестового сценария.
  4. Создание тестового раннера. Тестовый раннер запускает тестовые сценарии, описанные в файлах Gherkin.

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

В следующем разделе мы рассмотрим JUnit 5 – современный фреймворк для написания тестов, который идеально подходит для интеграции с Selenium WebDriver 4 и Cucumber.

JUnit 5: Современный фреймворк для написания тестов

JUnit 5 – это современный и мощный фреймворк для написания юнит-тестов в Java. Он предлагает богатый набор функций и возможностей, которые делают его идеальным выбором для автоматизации тестирования.

JUnit 5 обладает рядом преимуществ по сравнению с предыдущими версиями JUnit:

  • Улучшенная архитектура. JUnit 5 имеет более гибкую и модульную архитектуру, которая позволяет легко расширять его функциональность с помощью плагинов и расширений.
  • Новый синтаксис и аннотации. JUnit 5 вводит новый синтаксис и аннотации, которые делают написание тестов более простым и читабельным.
  • Поддержка параметризованных тестов. JUnit 5 предоставляет возможность создавать параметризованные тесты, которые позволяют запускать тест с различными входными данными.
  • Поддержка тестов на уровне класса. JUnit 5 позволяет создавать тесты на уровне класса, что делает тестирование более структурированным и организованным.
  • Возможность создания тестовых свит. JUnit 5 позволяет создавать тестовые свит, которые группируют тесты по функциональности.
  • Расширенные возможности отладки. JUnit 5 предоставляет расширенные возможности отладки, которые позволяют более эффективно выявлять и исправлять ошибки в тестах.

По данным исследования компании JetBrains, более 80% разработчиков используют JUnit 5 для написания юнит-тестов. Это свидетельствует о том, что JUnit 5 является самым популярным и наиболее эффективным фреймворком для написания тестов в Java.

Интеграция JUnit 5 с Selenium WebDriver 4 и Cucumber позволяет создать мощную и гибкую систему автоматизированного тестирования, которая обеспечит высокое качество веб-приложения.

В следующем разделе мы рассмотрим лучшие практики для автоматизации тестирования веб-приложений с использованием Selenium WebDriver 4, Cucumber и JUnit 5.

Лучшие практики для автоматизации тестирования

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

Рассмотрим несколько ключевых аспектов, которые помогут создать надежную и эффективную систему автоматизированного тестирования:

Выбор инструментов и библиотек

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

Вот несколько ключевых рекомендаций по выбору инструментов:

  • Selenium WebDriver 4 – фундаментальный инструмент для автоматизации тестирования веб-приложений. Он предоставляет возможность управлять веб-браузером, имитируя действия пользователя. Selenium WebDriver 4 поддерживает множество языков программирования и платформ, что делает его гибким и универсальным.
  • Cucumber – фреймворк для BDD-тестирования, который позволяет писать тесты в формате Gherkin. Это делает тесты легко читаемыми и понятными для всех участников проекта.
  • JUnit 5 – современный фреймворк для написания тестов в Java. Он предоставляет богатый набор функций и возможностей, которые делают его идеальным выбором для автоматизации тестирования.
  • TestNG – еще один популярный фреймворк для написания тестов в Java. Он предоставляет множество функций, подобных JUnit 5, но также имеет некоторые уникальные возможности, такие как поддержка параллельного выполнения тестов.
  • Mockito – мощная библиотека для мокирования объектов в Java. Она позволяет заменять реальные объекты моками, что делает тестирование более изолированным и эффективным.
  • AssertJ – библиотека для проверки утверждений в тестах. Она предоставляет более читаемый и выразительный синтаксис для проверки утверждений по сравнению с стандартным синтаксисом JUnit 5 или TestNG.

Выбор конкретных инструментов зависит от конкретных требований проекта, размера команды и уровня опыта разработчиков.

Важно также учитывать совместимость инструментов между собой. Например, Selenium WebDriver 4 легко интегрируется с Cucumber и JUnit 5.

Правильный выбор инструментов и библиотек является ключевым фактором успеха автоматизации тестирования.

В следующем разделе мы рассмотрим лучшие практики для написания автотестов.

Написание автотестов

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

Вот несколько ключевых рекомендаций по написанию автотестов:

  • Четкое определение целей. Прежде чем начинать писать тесты, необходимо четко определить цели тестирования. Что именно вы хотите проверить? Какие функции должны быть охвачены тестами? Ответы на эти вопросы помогут создать более эффективные тесты.
  • Создание структурированных тестовых сценариев. Тесты должны быть структурированы логически и последовательно. Каждый тест должен проверять конкретную функциональность и иметь четко определенный результат.
  • Использование ясных и лаконичных утверждений. Утверждения в тестах должны быть ясными, лаконичными и легко понимаемыми. Используйте библиотеки для проверки утверждений, такие как AssertJ, чтобы сделать код тестов более читаемым и выразительным.
  • Применение принципа DRY. Не повторяйте код. Используйте методы и функции для повторного использования кода, чтобы сделать тесты более компактными и легко поддерживаемыми.
  • Использование мокирования. Мокирование позволяет заменять реальные объекты моками, что делает тестирование более изолированным и эффективным. Используйте библиотеки для мокирования, такие как Mockito.
  • Регулярное обновление тестов. Тесты должны регулярно обновляться в соответствии с изменениями в коде веб-приложения. Это позволит обеспечить актуальность тестов и их эффективность.

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

В следующем разделе мы рассмотрим важность регрессионного тестирования.

Регрессионное тестирование

Регрессионное тестирование – это неотъемлемая часть процесса автоматизации тестирования. Оно помогает обеспечить то, что новые изменения в коде не привели к поломке существующей функциональности.

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

Автоматизация регрессионного тестирования с помощью Selenium WebDriver 4, Cucumber и JUnit 5 имеет ряд преимуществ:

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

Для эффективного регрессионного тестирования необходимо следовать некоторым рекомендациям:

  • Выбор правильного набора тестов. Необходимо выбрать наиболее важные тесты, которые охватывают критически важную функциональность веб-приложения.
  • Регулярное обновление тестов. Тесты должны регулярно обновляться в соответствии с изменениями в коде.
  • Использование специализированных инструментов. Существуют специализированные инструменты для регрессионного тестирования, которые могут помочь автоматизировать и упростить процесс.

Регрессионное тестирование является важным этапом в процессе автоматизации тестирования, которое помогает обеспечить качество и стабильность веб-приложения.

В следующем разделе мы рассмотрим тестирование производительности.

Тестирование производительности

Тестирование производительности – это неотъемлемая часть разработки веб-приложений. Оно позволяет определить, как веб-приложение работает под нагрузкой и как быстро оно отзывается на запросы пользователей.

Тестирование производительности включает в себя следующие виды тестирования:

  • Тестирование нагрузки. Этот вид тестирования проверяет, как веб-приложение работает при большом количестве одновременных запросов. Это важно для определения максимальной нагрузки, которую может выдержать веб-приложение.
  • Тестирование напряжения. Этот вид тестирования проверяет, как веб-приложение работает при чрезмерной нагрузке, превышающей обычный уровень. Это позволяет определить точки сбоя и уязвимости веб-приложения.
  • Тестирование выносливости. Этот вид тестирования проверяет, как веб-приложение работает в течение длительного периода времени. Это важно для определения надежности и стабильности веб-приложения.

Автоматизация тестирования производительности с помощью Selenium WebDriver 4 и Cucumber может быть сложной задачей, но она может принести значительные преимущества:

  • Увеличение скорости тестирования. Автоматизация тестирования производительности позволяет значительно ускорить процесс тестирования и получить результаты за более короткий срок.
  • Повышение точности тестирования. Автоматизация тестирования производительности позволяет снизить риск ошибок и получить более точные результаты.
  • Создание более надежного веб-приложения. Регулярное проведение тестирования производительности позволяет выявить и устранить проблемы с производительностью на ранних стадиях разработки.

Для автоматизации тестирования производительности можно использовать специализированные инструменты, такие как JMeter, LoadRunner или Gatling.

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

В следующем разделе мы рассмотрим тестирование безопасности.

Тестирование безопасности

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

Тестирование безопасности включает в себя следующие виды тестирования:

  • Тестирование аутентификации и авторизации. Этот вид тестирования проверяет, как веб-приложение аутентифицирует и авторизует пользователей. Цель – убедиться, что только авторизованные пользователи имеют доступ к необходимым ресурсам.
  • Тестирование ввода данных. Этот вид тестирования проверяет, как веб-приложение обрабатывает ввод данных от пользователей. Цель – убедиться, что веб-приложение не уязвимо к инъекциям SQL, скриптингу межсайтового скриптинга (XSS) и другим атакам на ввод данных.
  • Тестирование шифрования. Этот вид тестирования проверяет, как веб-приложение шифрует чувствительные данные. Цель – убедиться, что данные защищены от несанкционированного доступа.
  • Тестирование уязвимостей приложений. Этот вид тестирования проверяет веб-приложение на уязвимости, такие как переполнение буфера, утечка памяти, уязвимости в коде и так далее.

Автоматизация тестирования безопасности с помощью Selenium WebDriver 4 и Cucumber может быть сложной задачей, но она может принести значительные преимущества:

  • Увеличение скорости тестирования. Автоматизация тестирования безопасности позволяет значительно ускорить процесс тестирования и получить результаты за более короткий срок.
  • Повышение точности тестирования. Автоматизация тестирования безопасности позволяет снизить риск ошибок и получить более точные результаты.
  • Создание более безопасного веб-приложения. Регулярное проведение тестирования безопасности позволяет выявить и устранить уязвимости на ранних стадиях разработки.

Для автоматизации тестирования безопасности можно использовать специализированные инструменты, такие как Burp Suite, OWASP ZAP или Nessus.

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

В следующем разделе мы рассмотрим пример реализации автоматизации тестирования логина.

Пример реализации: Автоматизация тестирования логина

Рассмотрим практический пример автоматизации тестирования логина на веб-приложении с использованием Selenium WebDriver 4, Cucumber и JUnit 5.

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

Сначала мы создадим файл Gherkin (например, login.feature) с тестовыми сценариями:

gherkin
Feature: Авторизация пользователя

Scenario: Успешная авторизация
Given Пользователь находится на странице логина
When Пользователь вводит корректный логин и пароль
And Пользователь нажимает кнопку “Войти”
Then Пользователь перенаправляется на главную страницу

Scenario: Неверный логин
Given Пользователь находится на странице логина
When Пользователь вводит некорректный логин и пароль
And Пользователь нажимает кнопку “Войти”
Then Пользователь получает сообщение об ошибке

Далее мы создадим шаги определения (например, LoginSteps.java), которые будут содержать код для взаимодействия с веб-приложением и проверки условий:

java
import io.cucumber.java.en.And;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class LoginSteps {

private WebDriver driver;

@Given(“Пользователь находится на странице логина”)
public void userIsOnLoginPage {
driver = new ChromeDriver;
driver.get(“https://www.example.com/login”);
}

@When(“Пользователь вводит корректный логин и пароль”)
public void userEntersCorrectCredentials {
WebElement usernameField = driver.findElement(By.id(“username”));
usernameField.sendKeys(“valid_username”);
WebElement passwordField = driver.findElement(By.id(“password”));
passwordField.sendKeys(“valid_password”);
}

@And(“Пользователь нажимает кнопку “Войти””)
public void userClicksLoginButton {
WebElement loginButton = driver.findElement(By.id(“login_button”));
loginButton.click;
}

@Then(“Пользователь перенаправляется на главную страницу”)
public void userIsRedirectedToHomePage {
// Проверка, что текущий URL соответствует URL главной страницы
assert driver.getCurrentUrl.equals(“https://www.example.com/”);
}
// … Аналогично реализуются шаги для других сценариев
}

Наконец, мы создадим тестовый раннер (например, TestRunner.java), который будет запускать тесты:

java
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(features = “src/test/resources/features”, glue = “com.example.steps”)
public class TestRunner {
}

Этот пример демонстрирует базовые принципы автоматизации тестирования логина. В реальном проекте могут быть использованы более сложные тестовые сценарии и шаги определения, а также интеграция с другими инструментами, такими как Jenkins или Azure DevOps, для автоматизации запуска тестов.

Инструменты для автоматизации тестирования

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

Мы уже рассмотрели некоторые из них, но сейчас подробнее остановимся на каждом:

Selenium WebDriver 4

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

Selenium WebDriver 4 обладает рядом преимуществ, которые делают его идеальным выбором для автоматизации тестирования веб-приложений:

  • Поддержка множества языков программирования. Selenium WebDriver 4 интегрируется с различными языками программирования, включая Java, Python, JavaScript, C#, Ruby и другими. Это делает его доступным для широкого круга разработчиков.
  • Поддержка многоплатформенности. Selenium WebDriver 4 работает на различных платформах, включая Windows, Mac, Linux, что обеспечивает гибкость при разработке автотестов.
  • Поддержка множества браузеров. Selenium WebDriver 4 поддерживает все популярные веб-браузеры, включая Chrome, Firefox, Safari, Edge и Internet Explorer. Это позволяет проводить тестирование в различных браузерах и убедиться, что веб-приложение работает корректно во всех них.
  • Расширяемость. Selenium WebDriver 4 позволяет использовать дополнительные инструменты и библиотеки, что позволяет расширять возможности автоматизации тестирования. Например, можно использовать библиотеку Selenium Grid для параллельного выполнения тестов на многих машинах или использовать библиотеку Appium для автоматизации тестирования мобильных приложений.
  • Активное сообщество. Selenium WebDriver 4 имеет большое и активное сообщество разработчиков и тестировщиков. Это означает, что вы всегда можете получить помощь и поддержку от других пользователей.

По данным исследования компании Sauce Labs, более 90% тестировщиков используют Selenium WebDriver для автоматизации тестирования. Это подтверждает то, что Selenium WebDriver является одним из самых популярных и наиболее эффективных инструментов для автоматизации тестирования веб-приложений.

Selenium WebDriver 4 является неотъемлемой частью современной системы автоматизации тестирования. Он предоставляет широкие возможности для создания надежных и эффективных автотестов.

В следующем разделе мы рассмотрим Cucumber – фреймворк для BDD-тестирования, который идеально дополняет Selenium WebDriver 4.

Cucumber

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

Cucumber позволяет писать тесты в формате Gherkin, который является простым и читаемым языком, похожим на английский. Это делает тесты более понятными и упрощает сотрудничество между различными сторонами проекта.

Вот некоторые преимущества использования Cucumber для BDD-тестирования:

  • Повышение ясности и четкости. Gherkin-тесты легко читаются и понимаются всеми участниками проекта, что позволяет обеспечить единое видение функциональности системы.
  • Улучшение коммуникации. BDD способствует улучшению коммуникации между разработчиками, тестировщиками, менеджерами и аналитиками.
  • Сокращение времени на тестирование. Тесты, написанные на Gherkin, легко автоматизировать с помощью Cucumber, что позволяет ускорить процесс тестирования.
  • Повышение качества. BDD способствует созданию более качественного программного обеспечения, потому что фокусируется на поведении системы с точки зрения пользователя.
  • Легкая интеграция с Selenium WebDriver. Cucumber легко интегрируется с Selenium WebDriver, что позволяет автоматизировать тесты веб-приложений.

Согласно исследованию компании SmartBear, использование BDD привело к сокращению количества ошибок в программах на 30%.

Cucumber является мощным инструментом для BDD-тестирования, который помогает улучшить качество программного обеспечения, ускорить процесс разработки и повысить уровень сотрудничества в команде.

В следующем разделе мы рассмотрим JUnit 5 – современный фреймворк для написания тестов, который идеально подходит для интеграции с Cucumber и Selenium WebDriver 4.

JUnit 5

JUnit 5 – это современный и мощный фреймворк для написания юнит-тестов в Java. Он предлагает богатый набор функций и возможностей, которые делают его идеальным выбором для автоматизации тестирования в современных проектах. JUnit 5 предоставляет гибкость и удобство при создании тестов, что позволяет разработчикам эффективно проверять код и обеспечивать высокое качество программного обеспечения.

JUnit 5 обладает рядом преимуществ по сравнению с предыдущими версиями JUnit:

  • Улучшенная архитектура. JUnit 5 имеет более гибкую и модульную архитектуру, которая позволяет легко расширять его функциональность с помощью плагинов и расширений. Это делает JUnit 5 более адаптивным к различным проектам и позволяет настроить его под конкретные нужды.
  • Новый синтаксис и аннотации. JUnit 5 вводит новый синтаксис и аннотации, которые делают написание тестов более простым и читабельным. Это упрощает разработку тестов и делает их более понятными для других разработчиков.
  • Поддержка параметризованных тестов. JUnit 5 предоставляет возможность создавать параметризованные тесты, которые позволяют запускать тест с различными входными данными. Это позволяет проверить код на большом количестве входных данных и увеличить покрытие тестами.
  • Поддержка тестов на уровне класса. JUnit 5 позволяет создавать тесты на уровне класса, что делает тестирование более структурированным и организованным. Это упрощает организацию тестов и делает их более легко читаемыми.
  • Возможность создания тестовых свит. JUnit 5 позволяет создавать тестовые свит, которые группируют тесты по функциональности. Это позволяет организовать тесты по логическим блокам и упростить их запуск и обслуживание.
  • Расширенные возможности отладки. JUnit 5 предоставляет расширенные возможности отладки, которые позволяют более эффективно выявлять и исправлять ошибки в тестах. Это упрощает процесс отладки и позволяет быстрее и эффективнее решать проблемы с тестами.

По данным исследования компании JetBrains, более 80% разработчиков используют JUnit 5 для написания юнит-тестов. Это свидетельствует о том, что JUnit 5 является самым популярным и наиболее эффективным фреймворком для написания тестов в Java.

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

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

Другие инструменты для автоматизации тестирования

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

Рассмотрим некоторые из них:

  • TestNG – это еще один популярный фреймворк для написания тестов в Java. Он предоставляет множество функций, подобных JUnit 5, но также имеет некоторые уникальные возможности, такие как поддержка параллельного выполнения тестов. TestNG также предоставляет более гибкий механизм создания групп тестов и более удобный синтаксис для написания тестов с параметрами.
  • Mockito – это мощная библиотека для мокирования объектов в Java. Она позволяет заменять реальные объекты моками, что делает тестирование более изолированным и эффективным. Mockito предоставляет удобный синтаксис для создания моков и установки их поведения.
  • AssertJ – это библиотека для проверки утверждений в тестах. Она предоставляет более читаемый и выразительный синтаксис для проверки утверждений по сравнению с стандартным синтаксисом JUnit 5 или TestNG. AssertJ делает тесты более легко читаемыми и понятными.
  • Selenium Grid – это инструмент, который позволяет запускать тесты Selenium на многих машинах одновременно. Это позволяет ускорить процесс тестирования и провести тесты на большем количестве браузеров и операционных систем.
  • Appium – это инструмент, который позволяет автоматизировать тестирование мобильных приложений. Appium использует Selenium WebDriver для взаимодействия с мобильными приложениями, что делает его идеальным выбором для тестирования гибридных и нативных мобильных приложений.
  • Cypress – это инструмент для фронтального тестирования, который предоставляет удобный интерфейс для написания и выполнения тестов JavaScript-приложений. Cypress имеет множество встроенных функций для проверки элементов DOM, обработки событий и имитации действий пользователя.
  • Playwright – это еще один инструмент для фронтального тестирования, который предоставляет удобный интерфейс для написания и выполнения тестов JavaScript-приложений. Playwright поддерживает множество браузеров и предоставляет широкий набор функций для проверки функциональности веб-приложений.

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

В следующем разделе мы рассмотрим будущее автоматизации тестирования.

Автоматизация тестирования – это неотъемлемая часть современной разработки программного обеспечения. Она позволяет увеличить скорость и качество разработки, а также снизить затраты на тестирование.

В будущем автоматизация тестирования будет продолжать развиваться и становиться еще более мощной и эффективной. Вот несколько тенденций, которые определят будущее автоматизации тестирования:

  • Расширение искусственного интеллекта. Искусственный интеллект (ИИ) будет играть все более важную роль в автоматизации тестирования. ИИ может быть использован для автоматической генерации тестовых сценариев, анализа результатов тестирования и определения причин ошибок.
  • Увеличение роли облачных сервисов. Облачные сервисы будут играть все более важную роль в автоматизации тестирования. Облачные платформы предоставляют доступ к широкому спектру инструментов и ресурсов, что позволяет легко настроить и запустить систему автоматизации тестирования.
  • Развитие low-code и no-code платформ. Low-code и no-code платформы будут делать автоматизацию тестирования более доступной для не-программистов. Это позволит широкому кругу пользователей использовать автоматизацию тестирования и улучшить качество программного обеспечения.
  • Фокус на пользовательском опыте. Автоматизация тестирования будет все больше фокусироваться на пользовательском опыте. Это означает, что тесты будут проверять не только функциональность веб-приложения, но и его удобство и интуитивность в использовании.

Автоматизация тестирования будет продолжать развиваться и становиться еще более интегрированной частью процесса разработки. Она будет играть ключевую роль в создании качественного и надежного программного обеспечения.

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

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

Успешной вам автоматизации!

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

Инструмент Описание Преимущества Недостатки Популярность
Selenium WebDriver 4 Фреймворк с открытым исходным кодом для автоматизации тестирования веб-приложений. Позволяет управлять веб-браузером, имитируя действия пользователя.
  • Поддержка множества языков программирования (Java, Python, JavaScript, C#, Ruby и др.)
  • Поддержка различных веб-браузеров (Chrome, Firefox, Safari, Edge, Internet Explorer)
  • Активное сообщество разработчиков и тестировщиков
  • Расширяемость с помощью дополнительных инструментов и библиотек
  • Сложность написания и поддержки сложных тестов
  • Необходимость ручного обновления драйверов браузеров
  • Требуются знания программирования
90% тестировщиков используют Selenium WebDriver (по данным Sauce Labs)
Cucumber Фреймворк для BDD-тестирования, который использует простой язык Gherkin для описания сценариев тестирования.
  • Легко читаемые и понятные тесты, доступные для всех участников проекта
  • Улучшенная коммуникация между разработчиками, тестировщиками и менеджерами
  • Ускоренный процесс тестирования за счет автоматизации
  • Повышение качества за счет фокуса на поведении системы с точки зрения пользователя
  • Легкая интеграция с Selenium WebDriver
  • Может быть сложным для начинающих пользователей
  • Требуется дополнительное время для написания сценариев на Gherkin
По данным SmartBear, использование BDD привело к сокращению ошибок в программах на 30%
JUnit 5 Современный фреймворк для написания юнит-тестов в Java. Предоставляет богатый набор функций и возможностей для эффективного тестирования.
  • Улучшенная архитектура, позволяющая легко расширять функциональность
  • Новый синтаксис и аннотации для более простого и читаемого кода
  • Поддержка параметризованных тестов, позволяющих проверить код на различных входных данных
  • Расширенные возможности отладки для быстрого и эффективного решения проблем с тестами
  • Поддержка тестов на уровне класса, что делает тестирование более структурированным
  • Возможность создания тестовых свит для группировки тестов по функциональности
  • Может быть сложным для начинающих пользователей
  • Требуется изучение нового синтаксиса и аннотаций
Более 80% разработчиков используют JUnit 5 (по данным JetBrains)
TestNG Еще один популярный фреймворк для написания тестов в Java. Предоставляет множество функций, подобных JUnit 5, но также имеет некоторые уникальные возможности.
  • Поддержка параллельного выполнения тестов
  • Более гибкий механизм создания групп тестов
  • Удобный синтаксис для написания тестов с параметрами
  • Возможность создания зависимостей между тестами
  • Меньшее количество пользователей, чем у JUnit 5
  • Более сложный синтаксис, чем у JUnit 5
Популярность TestNG несколько меньше, чем у JUnit 5
Mockito Мощная библиотека для мокирования объектов в Java. Позволяет заменять реальные объекты моками, что делает тестирование более изолированным и эффективным.
  • Удобный синтаксис для создания моков и установки их поведения
  • Позволяет легко имитировать взаимодействие с внешними зависимостями
  • Упрощает тестирование сложной логики
  • Требует знания основ мокирования
  • Может быть сложным для начинающих пользователей
Широко используется в проектах с Java
AssertJ Библиотека для проверки утверждений в тестах. Предоставляет более читаемый и выразительный синтаксис для проверки утверждений по сравнению со стандартным синтаксисом JUnit 5 или TestNG.
  • Более читаемый и понятный код тестов
  • Упрощает процесс написания и проверки утверждений
  • Позволяет создавать более сложные и точные утверждения
  • Требуется изучение нового синтаксиса
  • Может быть избыточным для простых тестов
Набирает популярность среди тестировщиков Java
Selenium Grid Инструмент, который позволяет запускать тесты Selenium на множестве машин одновременно. Ускоряет процесс тестирования и позволяет проводить тесты на большем количестве браузеров и операционных систем.
  • Позволяет выполнять тесты параллельно на нескольких машинах
  • Ускоряет процесс тестирования
  • Расширяет возможности тестирования на различных браузерах и ОС
  • Требует настройки и управления инфраструктурой
  • Может быть сложным для начинающих пользователей
Популярна среди команд, использующих Selenium для автоматизации тестирования
Appium Инструмент для автоматизации тестирования мобильных приложений. Использует Selenium WebDriver для взаимодействия с мобильными приложениями, что делает его идеальным выбором для тестирования гибридных и нативных мобильных приложений.
  • Позволяет тестировать мобильные приложения на различных платформах (iOS, Android)
  • Использует Selenium WebDriver для удобной интеграции с существующими инструментами
  • Поддерживает различные языки программирования
  • Требует настройки и управления средой тестирования для мобильных устройств
  • Может быть сложным для начинающих пользователей
Широко используется для тестирования мобильных приложений
Cypress Инструмент для фронтального тестирования, который предоставляет удобный интерфейс для написания и выполнения тестов JavaScript-приложений.
  • Простой в использовании, особенно для начинающих тестировщиков
  • Имеет множество встроенных функций для проверки элементов DOM, обработки событий и имитации действий пользователя
  • Предоставляет удобную отладку и визуализацию результатов тестов
  • Поддерживает различные браузеры
  • Не поддерживает кросс-браузерное тестирование без дополнительных настроек
  • Имеет ограниченные возможности для тестирования API
Набирает популярность среди тестировщиков JavaScript-приложений
Playwright Инструмент для фронтального тестирования, который предоставляет удобный интерфейс для написания и выполнения тестов JavaScript-приложений.
  • Поддерживает множество браузеров (Chrome, Firefox, Safari, Chromium, WebKit)
  • Предоставляет широкий набор функций для проверки функциональности веб-приложений
  • Обеспечивает высокую производительность и стабильность тестов
  • Имеет удобную отладку и визуализацию результатов тестов
  • Достаточно новый инструмент, но активно развивается
  • Может быть сложным для начинающих пользователей
Набирает популярность среди тестировщиков JavaScript-приложений

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

В таблице представлено сравнение ключевых особенностей фреймворков JUnit 5 и TestNG, которые широко используются для автоматизации тестирования в Java. Информация основана на данных исследований, отзывах пользователей и экспертных оценках.

Критерий JUnit 5 TestNG
Архитектура Модульная, гибкая, легко расширяемая с помощью плагинов и расширений. Более традиционная, с меньшими возможностями расширения.
Синтаксис и аннотации Новый синтаксис и аннотации, упрощающие написание и чтение тестов. Использует традиционный синтаксис, более знакомый разработчикам, работающим с предыдущими версиями JUnit.
Параметризованные тесты Полная поддержка, позволяющая создавать тесты с различными входными данными. Предоставляет поддержку параметризованных тестов, но с более сложным синтаксисом.
Тесты на уровне класса Поддерживает создание тестов на уровне класса, что повышает структурированность и организацию тестов. Не имеет такой же прямой поддержки тестов на уровне класса, как JUnit 5.
Тестовые свит Позволяет создавать тестовые свит, группирующие тесты по функциональности, что упрощает управление тестами. Предлагает аналогичные возможности для группировки тестов, но с более сложным синтаксисом.
Отладка Предоставляет расширенные возможности отладки, облегчающие выявление и исправление ошибок в тестах. Предлагает базовые возможности отладки.
Параллельное выполнение тестов Не имеет встроенной поддержки параллельного выполнения тестов. Предоставляет расширенные возможности для параллельного выполнения тестов.
Группировка тестов Поддерживает группировку тестов с помощью аннотаций, что упрощает организацию тестов. Предоставляет более гибкие механизмы группировки тестов, позволяющие создавать сложные иерархии тестов.
Зависимости между тестами Поддерживает зависимости между тестами, позволяя выполнять тесты в определенном порядке. Предлагает более развитые механизмы для определения зависимостей между тестами.
Популярность Широко используется в проектах Java, более 80% разработчиков используют JUnit 5 (по данным JetBrains). Используется в проектах Java, но популярность несколько ниже, чем у JUnit 5.

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

Важно учитывать, что Selenium WebDriver 4 интегрируется с JUnit 5 и TestNG. Использование этих фреймворков в комплексе позволяет увеличить эффективность автоматизации тестирования.

FAQ

В этом разделе мы ответим на часто задаваемые вопросы по теме автоматизации тестирования с использованием Selenium WebDriver 4, Cucumber и JUnit 5.

Какие преимущества дает автоматизация тестирования?

Автоматизация тестирования предоставляет множество преимуществ, которые делают ее незаменимым инструментом для современной разработки программного обеспечения:

  • Ускорение тестирования. Автоматизированные тесты выполняются значительно быстрее, чем ручные тесты. Это позволяет выполнять тесты чаще и выявлять ошибки на ранних стадиях разработки.
  • Повышение точности. Автоматические тесты выполняются по строго определенному сценарию, что исключает человеческий фактор и минимизирует ошибки. Это гарантирует более точную и надежную проверку функциональности программного обеспечения.
  • Снижение затрат. Автоматизация тестирования позволяет снизить расходы на ручное тестирование. Это достигается за счет освобождения времени и ресурсов тестировщиков, которые могут сосредоточиться на более сложных задачах, требующих творческого подхода.
  • Улучшение качества. Автоматизированные тесты позволяют проводить тестирование более часто, что позволяет выявлять ошибки на ранних стадиях разработки и улучшить общее качество программного обеспечения.

Как выбрать правильные инструменты для автоматизации тестирования?

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

  • Тип тестирования. Разные инструменты подходят для разных типов тестирования. Например, Selenium WebDriver – это идеальный выбор для автоматизации тестирования веб-приложений, а Appium – для автоматизации тестирования мобильных приложений.
  • Язык программирования. Некоторые инструменты поддерживают только определенные языки программирования. Например, Selenium WebDriver поддерживает множество языков, в то время как Cypress – только JavaScript.
  • Сложность тестов. Для простых тестов можно использовать простые инструменты, а для сложных тестов требуются более мощные инструменты.
  • Стоимость. Некоторые инструменты бесплатные, а другие – платные. Важно выбрать инструмент, который соответствует бюджету проекта.

Какие есть альтернативы Selenium WebDriver 4?

Существуют и другие популярные фреймворки для автоматизации тестирования веб-приложений, например:

  • Cypress – это инструмент для фронтального тестирования, который предоставляет удобный интерфейс для написания и выполнения тестов JavaScript-приложений. Cypress имеет множество встроенных функций для проверки элементов DOM, обработки событий и имитации действий пользователя.
  • Playwright – это еще один инструмент для фронтального тестирования, который предоставляет удобный интерфейс для написания и выполнения тестов JavaScript-приложений. Playwright поддерживает множество браузеров и предоставляет широкий набор функций для проверки функциональности веб-приложений.

Как автоматизировать тестирование логина?

Автоматизация тестирования логина – это одна из самых распространенных задач в автоматизации тестирования веб-приложений. Процесс автоматизации тестирования логина включает в себя следующие шаги:

  1. Определение тестовых сценариев. Необходимо определить все возможные сценарии тестирования логина, включая успешный вход, вход с неверным логином или паролем, вход с заблокированным аккаунтом и так далее.
  2. Написание тестов с использованием Selenium WebDriver и Cucumber. Тесты должны имитировать действия пользователя при логине и проверять, что веб-приложение реагирует корректно на каждый сценарий.
  3. Использование JUnit 5 для организации тестов и проверки утверждений. JUnit 5 позволяет структурировать тесты и обеспечить их надежное выполнение.

Как интегрировать Selenium WebDriver 4 с Cucumber?

Интеграция Selenium WebDriver 4 с Cucumber – это простой процесс, который требует установки необходимых библиотек и настройки конфигурации тестов. В Cucumber тесты описываются с помощью простого и читаемого языков Gherkin. Selenium WebDriver 4 используется для взаимодействия с веб-приложением и проверки условий в тестах.

Какие есть лучшие практики для автоматизации тестирования?

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

  • Четкое определение целей. Прежде чем начинать писать тесты, необходимо четко определить цели тестирования. Что именно вы хотите проверить? Какие функции должны быть охвачены тестами? Ответы на эти вопросы помогут создать более эффективные тесты.
  • Создание структурированных тестовых сценариев. Тесты должны быть структурированы логически и последовательно. Каждый тест должен проверять конкретную функциональность и иметь четко определенный результат.
  • Использование ясных и лаконичных утверждений. Утверждения в тестах должны быть ясными, лаконичными и легко понимаемыми. Используйте библиотеки для проверки утверждений, такие как AssertJ, чтобы сделать код тестов более читаемым и выразительным.
  • Применение принципа DRY. Не повторяйте код. Используйте методы и функции для повторного использования кода, чтобы сделать тесты более компактными и легко поддерживаемыми.
  • Использование мокирования. Мокирование позволяет заменять реальные объекты моками, что делает тестирование более изолированным и эффективным. Используйте библиотеки для мокирования, такие как Mockito.
  • Регулярное обновление тестов. Тесты должны регулярно обновляться в соответствии с изменениями в коде веб-приложения. Это позволит обеспечить актуальность тестов и их эффективность.

Что такое регрессионное тестирование?

Регрессионное тестирование – это важный этап в процессе автоматизации тестирования, которое помогает обеспечить качество и стабильность веб-приложения. Регрессионное тестирование проверяет, что новые изменения в коде не привели к поломке существующей функциональности.

Как проводить тестирование производительности?

Тестирование производительности – это неотъемлемая часть разработки веб-приложений. Оно позволяет определить, как веб-приложение работает под нагрузкой и как быстро оно отзывается на запросы пользователей. Тестирование производительности включает в себя следующие виды тестирования:

  • Тестирование нагрузки. Этот вид тестирования проверяет, как веб-приложение работает при большом количестве одновременных запросов. Это важно для определения максимальной нагрузки, которую может выдержать веб-приложение.
  • Тестирование напряжения. Этот вид тестирования проверяет, как веб-приложение работает при чрезмерной нагрузке, превышающей обычный уровень. Это позволяет определить точки сбоя и уязвимости веб-приложения.
  • Тестирование выносливости. Этот вид тестирования проверяет, как веб-приложение работает в течение длительного периода времени. Это важно для определения надежности и стабильности веб-приложения.

Как проводить тестирование безопасности?

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

Тестирование безопасности включает в себя следующие виды тестирования:

  • Тестирование аутентификации и авторизации. Этот вид тестирования проверяет, как веб-приложение аутентифицирует и авторизует пользователей. Цель – убедиться, что только авторизованные пользователи имеют доступ к необходимым ресурсам.
  • Тестирование ввода данных. Этот вид тестирования проверяет, как веб-приложение обрабатывает ввод данных от пользователей. Цель – убедиться, что веб-приложение не уязвимо к инъекциям SQL, скриптингу межсайтового скриптинга (XSS) и другим атакам на ввод данных.
  • Тестирование шифрования. Этот вид тестирования проверяет, как веб-приложение шифрует чувствительные данные. Цель – убедиться, что данные защищены от несанкционированного доступа.
  • Тестирование уязвимостей приложений. Этот вид тестирования проверяет веб-приложение на уязвимости, такие как переполнение буфера, утечка памяти, уязвимости в коде и так далее.

Как автоматизировать тестирование производительности?

Автоматизация тестирования производительности с помощью Selenium WebDriver 4 и Cucumber может быть сложной задачей, но она может принести значительные преимущества.

Для автоматизации тестирования производительности можно использовать специализированные инструменты, такие как JMeter, LoadRunner или Gatling.

Как автоматизировать тестирование безопасности?

Автоматизация тестирования безопасности с помощью Selenium WebDriver 4 и Cucumber может быть сложной задачей, но она может принести значительные преимущества.

Для автоматизации тестирования безопасности можно использовать специализированные инструменты, такие как Burp Suite, OWASP ZAP или Nessus.

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

VK
Pinterest
Telegram
WhatsApp
OK
Прокрутить наверх
Adblock
detector