Всё началось с того, что перед нами поставили задачу покрыть тестами наши сервисы для микросервисной платформы TOT Pyramid, которую мы развиваем последние два года. Мы были вправе выбрать стек технологий самостоятельно. Данные тесты должны запускаться в CI каждый раз при создании мердж‑реквеста и проверять, что изменения ничего не сломали. Выбор пал на Rest‑assured, тем более хотелось писать тесты на модном, молодёжном Kotlin. В данной статье хочу поделиться опытом написания автотестов на Rest‑assured + Kotlin. Статья не претендует на Rocket Science — в ней я приведу простые примеры и основные принципы тестирования API, которые применяются у нас в TOT Systems. Поэтому, если вы ищете инструмент для покрытия API автотестами и при этом хотите писать на Kotlin, то эта статья для вас. REST‑assured — довольно популярная Java‑библиотека для тестирования REST API. У неё подробная документация и много примеров использования. Есть поддержка Kotlin и функции‑обёртки для написания тестов в формате Given‑When‑Then. Если у вас стоит задача автоматизировать тесты для вашего микросервиса, то REST‑assured вполне справится с этой задачей. Для примера написал небольшой сервис котиков  — его можно скачать и запустить через gradle. Все эндпойнты описаны в таблице ниже. Запрос Действие GET /cat/{id} Получить кота по id GET /cats Получить всех котов POST /cat Создать кота DELETE /cat/{id} Удалить кота PUT /cat/{id} Обновить информацию по коту В примере с тестами будем использовать:  Junit 5; Jackson; Assertj; Gradle; а также Allure для генерации отчетов. В примере с тестами на Github представлена структура проекта. Вы можете взять её за основу при проектировании своих тестов либо изменить её под свои задачи. Для начала создадим gradle проект и добавим базовые зависимости в файл build.gradle.kts:  В файле gradle.properties можно указать ip адрес и порт сервиса:  Также стоит создать объект Config для получения системных переменных, которые будут подтягиваться из файла gradle.properties:  Создадим базовый класс, от которого будут наследоваться все тесты — BaseTest:  В этом классе зададим основную конфигурацию, которая будет использована для всех запросов. Также стоит создать объект Specs для различных спецификаций:  Для создания кота нужно указать 2 поля — имя и порода. Поэтому создадим data класс:  Также мы будем десериализовывать наш респонс в объекты, чтобы делать проверки не через синтаксис JsonPath, а сравнивать поля объектов. Для этого можно написать функцию‑расширение для ValidatableResponse, а заодно и для Response:  Ожидаем, что в респонсе помимо указанных полей вернется еще id котика. Объект для десериализации выглядит так:  Мы часто будем использовать одни и те же запросы. Например, добавление котиков будет встречаться в тестах регулярно, поэтому имеет смысл выносить запросы в функции‑шаги. Пример:  Теперь для создания котика достаточно создать экземпляр класса Cat, вызвать функцию и передать нужного кота в нее — addCat(cat). Напишем простой тест на создание котика:  Как видим, тут можно убрать блок Given, а во втором примере полностью отойти от структуры Given‑When‑Then, если вам это нужно. Теперь добавим тест на получение котика:  Как видим, после добавления котика мы десериализуем респонс в объект. В этом примере нам достаточно только id котика. Можно написать еще одну функцию‑расширение для удобства:  Таким образом можно переписать строчку val catId = addCat(cat).extractAs<CatResponse>().id В val catId = addCat(cat).getId() Удаление и обновление информации о котике в статье приводить не буду — они есть в тестовом проекте. Для тех, кто любит смотреть отчеты о прохождении тестов, можно добавить отчёт, который генерирует Allure. Как вы могли заметить, в тестовом примере каждый класс и функции покрываются аннотациями аллюра — они нужны для удобного построения итогового отчёта. Ниже приведу пример того, как выглядит главная страница отчёта в allure. Чтобы сгенерировать отчёт Allure, перед запуском тестов нужно выполнить команду./gradlew downloadAllure в терминале или воспользоваться боковым меню gradle в идее. После прохождения тестов осталось выполнить команду./gradlew allureServe — в результате поднимется сервер с отчётом. Мне было очень комфортно писать автотесты на Kotlin, это позволило довольно просто сериализовать/десериализовать объекты, использовать функции‑расширения. Благодаря сочетанию REST‑assured + Kotlin мы смогли в короткие сроки покрыть наши сервисы автотестами. Тесты очень легко писать, и они имеют хорошо читаемый вид. А после прохождения тестов можно получить Allure‑отчёт. Поэтому рекомендую присмотреться к данному инструменту — скачать тестовый проект и покрыть его тестами для ознакомления;)  QA инженер