Форма детальной информации о REST-сервисе и возможности отправки запроса. Мы выбираем первый пункт, указываем пакет, выбираем нужный модуль, если их несколько, и у нас получается тест. Я буду рассматривать контрактные тесты и тесты на сравнение. После настройки этого плагина мы просто указываем пакет, где у нас сгенерированные модели. Метод, который получится в Retrofit, будет выглядеть вот так.
Это оценили наши тестировщики, которые могут, не используя Curl, тестировать релиз. Исходя из этого мы решили, что будем строить наши автотесты на основе кодогенерации, и в качестве основы мы возьмём Swagger/OAS. Аналогично Swagger позволяет описывать параметры и формат ответов для методов POST, PUT и DELETE.
Как Получить Openapi-спецификацию
И потому это не совсем реальные тесты, а шаблоны тестов. Но дописав логики, вы получите вполне реальные тесты. Добавим ещё один параметр к нашей ручке search. У нас есть спецификация, мы добавляем ещё один параметр, происходит генерация, и наш тест, написанный в Retrofit, ломается.
В них мало точек расширения, и они не рассчитаны на то, что наша спецификация будет меняться. Мы решили, что напишем свой API-клиент, который будет обладать всеми необходимыми для нас возможностями. Давайте разберёмся теперь с генерацией клиента. В opensource есть два больших, достаточно популярных проекта.
Какие Тесты Можно Сгенерировать
Нам пришла идея, почему бы не использовать свои темплейты. Тогда мы получим шаблоны тестов, которые можно использовать и писать. Значения в OpenAPI-спецификации второй версии хранятся в поле «x-exаmple». Ещё вариант — поиск с множеством параметров. Этого метода в API api.pet нет — и получаем ошибку компиляции.
И мы можем получить что-то невразумительное. Вместо методов вашего тестового клиента у вас будут route1, route2, route16. Для тестировщиков головная боль — именование тестовых методов и тестовых классов. У нас единое наименование на основе OpenAPI-спецификации.
Tags позволяют разметить, в какой блок должен быть помещен запрос. Например, вы делаете запросы про информацию о магазине. Укажите у них одинаковый тег, и они будут сгруппированы в одном блоке.
Это обеспечивает понятность и консистентность описания API и позволяет разработчикам эффективно использовать API в своих приложениях. Бывает так, что проект автотестов не компилируется https://deveducation.com/ из-за изменений спецификации сервиса. Необходимо понимать, почему это происходит. Для этого нам надо получить разницу в документации, например, используя swagger-diff.
- Для того чтобы настроить генерацию тестов, нам надо прописать template_directory с нужными темплейтами и добавить шаблон для тестов.
- Мы выбираем первый пункт, указываем пакет, выбираем нужный модуль, если их несколько, и у нас получается тест.
- Надо просто запустить нашу генерацию с флагом DebugOperations, и в итоге мы получим переменные для операций, которые будем использовать в шаблонах.
- Опционально описание тегов можно задать в отдельном разделе описания всей документации.
- Чтобы отлавливать такие случаи, мы используем diff-спецификации, о которых чуть позже.
- В REST Assured нетипизированные параметры.
Так как мы будет подключать Swagger к RESTEasy, то добавим соответствующую зависимость. Swagger — это технология, которая позволяет документировать REST-сервисы. Swagger поддерживает множество языков программирования и фреймворков.
Также у нас есть блок с описанием всех возможных операций, в которых мы указываем параметры и все возможные ответы. У нас во всех проектах есть спецификации. В основном это спецификации двух версий — это OpenAPI-спецификации v1.zero и OpenAPI-спецификации v2.zero. В какой-то момент пришёл менеджер и сказал, что мы больше не будем релизить новые REST API-сервисы без спецификаций.
У Retrofit ответ всегда мапится на ответ из спецификации по умолчанию. В REST Assured ответ может мапиться на ответ из спецификации, а может не мапиться. Сама генерация клиента в OpenAPI Generator основана на mustache template (Logic-less Mustache engine). Это круто, потому что генерация не зависит от языка программирования. Вы можете использовать mustache-шаблоны как для C#, так и для С++, так и для любого языка и получить клиент. Ещё один плюс — эти клиенты легко добавлять.