En

JazzTeam Software Development Company

Agile Java Development

Тестирование REST на базе фреймворка Karate

Введение

Karate – это open-source Behavior-driven development (BDD) фреймворк, который позволяет выполнять следующие виды тестирования без написания дополнительного кода:

Behavior-driven development (BDD) – подход к разработке и тестированию, при котором особое внимание уделяется поведению продукта в терминах бизнеса. Такие тесты проверяют различные сценарии, которые интересны непосредственно клиенту.

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

Затем специалисты BDD используют этот словарь для создания предметно-ориентированного языка, который они могут использовать для кодирования системных тестов. Каждый тест основан на пользовательской истории, написанной на языке, которым пользуются все заинтересованные стороны.

Синтаксис Karate сделан на базе популярного фреймворка Cucumber. А благодаря богатой внутренней функциональности, большинство тестов можно писать даже без знания языка программирования.

В этой статье будет описан процесс тестирования REST API запросов на базе фреймворка Karate. Начальной точкой является создание проекта на базе фреймворка Karate с последующей настройкой конфигурации и созданием тестовых сценариев под конкретные пользовательские нужды.

Создание проекта на базе Karate

Для создания нового проекта на базе Karate в Intellij Idea необходимо выполнить следующее:

  1. Выбрать пункт меню File -> New -> Project…
  2. Выбрать пункт Maven.
  3. В правой части окна Выбрать “Create from archetype” и нажать Add archetype…
  4. В появившемся окне добавить новый архетип:
    • GroupId: com.intuit.karate.
    • ArtifactId: karate-archetype.
    • Version: 0.9.6 (Здесь указать актуальную версию).
      Добавление архетипа

      Рисунок – Добавление архетипа.


      Диалоговое окно добавления архетипа

      Рисунок – Диалоговое окно добавления архетипа.

  5. Нажать ОК.
  6. После этого в окне архетипов должен появиться новый архетип karate-archetype.
  7. Выбрать этот архетип в окне и создать проект.

В результате будет создан проект со следующей структурой:

Структура проекта

Рисунок – Структура проекта.

В pom.xml будут добавлены все необходимые зависимости для API тестирования. Также в модуле examples.users будет создан пример, на базе которого можно посмотреть фреймворк в действии. Файлы с расширением *.feature являются файлами с тестами.

Стоит обратить внимание, что файл, с расширением *.feature расположен не в папке ресурсов, а в папке с основным кодом. Это не ошибка, а часть code-convention фреймворка Karate. Когда проект станет большим, намного удобнее будет видеть *.java и *.feature файлы в одном месте, потому что, как было сказано выше, *.feature файлы являются файлами с тестами.

Именно для этого в сгенерированном файле pom.xml присутствуют строки:

Сгенерированный файл pom.xml

Рисунок – Сгенерированный файл pom.xml.

Описание тест-кейса с использованием DDT

Имеется REST сервис, который по запросу /country?name=<название страны> выдает необходимую информацию по данной стране. В тесте необходимо выполнить запрос по нескольким странам и убедиться, что запрос работает корректно.

Например: при выполнении запроса /country?name=USA пользователь должен получить ответ с полями “country”:”USA”, “code”:”US”, а остальные поля должны быть не пустыми и содержать число.

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

Настройка тестового фреймворка

Единственное, что требуется для запуска Karate, это файл karate-config.js в “classpath”. Этот файл должен содержать javascript функцию, которая должна возвращать json объект. Все ключи и значения будут доступны как переменные. В результате можно настроить различные профили и глобальные переменные к ним.

Пример настроенной конфигурации:

Пример настроенной конфигурации

Рисунок – Пример настроенной конфигурации.

karate.env – это переменная-окружения, в зависимости от которой можно менять поведение тестов. По умолчанию значение env будет равно null, но её можно задать, например, из maven команды: mvn test -DargLine=”-Dkarate.env=e2e”

В конфигурации можно задать любое количество глобальных констант. В данном примере заданы константы baseUrl и rapidApiKey.

Также можно менять параметры различных предустановленных конфигураций через метод karate.configure(). Например, в данном примере изменена конфигурация retry. Это значит, что при выполнении тестов с ожиданиями, будет выполнено максимум 2 попытки с интервалом в 2000 мс. Полный набор предустановленных конфигураций можно посмотреть здесь.

Написание сценариев

Как упоминалось ранее, синтаксис Karate использует BDD подход на основе Cucumber. Скрипт с тестовыми сценариями содержит три секции: Feature, Background и Scenario. При этом в одном файле может быть несколько сценариев:

Пример тест-кейса с использованием DDT:

Пример тест-кейса с использованием DDT

Рисунок – Пример тест-кейса с использованием DDT.

В секции Background url и path – это методы, реализованные внутри фреймворка Karate, которые задают url и path для выполнения API запросов в тестах. В данном случае url берется из глобальной константы baseUrl, заданной в karate-config.js. path задано значение country.

Секция Scenario Outline:

Пример написания тест-кейса с использованием специфической конфигурации

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

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

Пример реализации описанного выше тест-кейса:

Пример реализации тест-кейса

Рисунок – Пример реализации описанного выше тест-кейса.

В данном случае в строке * configure retry = {count: 2, interval: 0} переопределена конфигурация повторов и ожиданий. Запрос будет выполняться, пока не получит ответ с кодом 429. Максимальное количество попыток – 2, интервал между попытками – 0 мс.

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

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

Файл Test.java

Рисунок – Файл Test.java.

Теперь при выполнении команды mvn clean test произойдет запуск всех тестов. Отчет о прогоне сохранится в файле target/surefire-reports/karate-summary.html.

Заключение

В данной статье мы рассмотрели как при помощи фреймворка Karate протестировать REST-API. Благодаря множеству встроенных библиотек, авто-тестировщик может закрыть множество задач, не прибегая к написанию java кода. В целом этот фреймворк отлично подойдет для команд, где поддерживать и проводить ревью тестов должны специалисты без знания языков программирования (ручные тестировщики, бизнес-аналитики и др.).

Полезные ссылки

Документация по Karate – https://intuit.github.io/karate/

, , , ,

Comments are currently closed.