Также у нас есть блок с описанием всех возможных операций, в которых мы указываем параметры и все возможные ответы. У нас во всех проектах есть спецификации. В основном это спецификации двух версий — это OpenAPI-спецификации v1.0 https://deveducation.com/ и OpenAPI-спецификации v2.0. В какой-то момент пришёл менеджер и сказал, что мы больше не будем релизить новые REST API-сервисы без спецификаций.
И мы можем получить что-то невразумительное. Вместо методов вашего тестового клиента у вас будут route1, route2, route16. Для тестировщиков головная боль — именование тестовых методов и тестовых классов. У нас единое наименование на основе OpenAPI-спецификации.
Об Эволюции Автотестов На Rest Api
В них мало точек расширения, и они не рассчитаны на то, что наша спецификация будет меняться. Мы решили, что напишем свой API-клиент, который будет обладать всеми необходимыми для нас возможностями. Давайте разберёмся теперь с генерацией клиента. В opensource есть два больших, достаточно популярных проекта.
- Метод, который получится в Retrofit, будет выглядеть вот так.
- Значения в OpenAPI-спецификации второй версии хранятся в поле «x-exаmple».
- В качестве библиотеки для сравнения я возьму готовую библиотеку Retrofit, которая есть в OpenAPI Generator и Swagger Codegen.
- То есть у нас получается два , для версии v1 и для версии v2.
- Она имеет fluent interface, эта библиотека предназначена для тестирования.
- К тому же есть ещё одна важная проблема — наши REST API активно развиваются.
В стандартном Retrofit-клиенте параметры типизированы, для тестирования это не очень удобно. Нам бы хотелось, чтобы параметры были не типизированы, и мы могли вставить любые параметры, получить ошибку и её валидировать. Также вы получите другие различные проблемы. Например, опечатки, потому что Swagger Annotation пишется руками разработчиков. Опечатки можно поправить — это не проблема. Могут быть различные проблемы с повторением моделей.
Постой, Как Так Получается, Что Продукт Успешно Функционирует Уже Давно, А Api Вы К Нему Пишете Только Сейчас?
И ещё одна причина — это нестабильность релизного цикла. Релизы в Swagger Codegen были довольно редкие, тесты часто падали и комьюнити это не устраивало. Второй способ — использовать специализированные средства для написания спецификаций.
Форма детальной информации о REST-сервисе и возможности отправки запроса. Мы выбираем первый пункт, указываем пакет, выбираем нужный модуль, если их несколько, и у нас получается тест. Я буду рассматривать контрактные тесты и тесты на сравнение. После настройки этого плагина мы просто указываем пакет, где у нас сгенерированные модели. Метод, который получится в Retrofit, будет выглядеть вот так.
Swagger Codegen
Это обеспечивает понятность и консистентность описания API и позволяет разработчикам эффективно использовать API в своих приложениях. Бывает так, что проект автотестов не компилируется из-за изменений спецификации сервиса. Необходимо понимать, почему это происходит. Для этого нам надо получить разницу в документации, например, используя swagger-diff.
У нас генерируются тестовые классы, мы можем поправить их в goal, запустить и использовать. Через IDE нажимаем клавишу F6, и у нас возникает окошко. В том же REST Assured мы использовали builder-паттерн, и у каждого вызова параметра собственный метод. И тест на REST Assured будет выглядеть вот так. Итак, мы получили все переменные, написали все шаблоны и соответственно сделали pull request в Swagger Codegen. Для того чтобы написать шаблоны, нам нужны переменные.
И потому это не совсем реальные тесты, а шаблоны тестов. Но дописав логики, вы получите вполне реальные тесты. Добавим ещё один параметр к нашей ручке search. У нас есть спецификация, мы добавляем ещё один параметр, происходит генерация, и наш тест, написанный в Retrofit, ломается.
Tags позволяют разметить, в какой блок должен быть помещен запрос. Например, вы делаете запросы про информацию о магазине. Укажите у них одинаковый тег, и они будут сгруппированы в одном блоке.
Это оценили наши тестировщики, которые могут, не используя Curl, тестировать релиз. Исходя из этого мы решили, что будем строить наши автотесты на основе кодогенерации, и в качестве основы мы возьмём Swagger/OAS. Аналогично Swagger позволяет описывать параметры и формат ответов для методов POST, PUT и DELETE.