Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OpenAPI на страже вашего спокойствия

OpenAPI на страже вашего спокойствия

Чтобы end-2-end тесты были максимально полезными, их нужно начинать писать параллельно с разработкой самой задачи. Но как это сделать прозрачно, ведь API может поменяться как во время разработки, так и в процессе доработок по другим задачам. Рассмотрим подход Contract First на базе OpenAPI как средство поддержания актуальности e2e тестов.

Avatar for Romanov Alexey

Romanov Alexey

March 30, 2025
Tweet

More Decks by Romanov Alexey

Other Decks in Programming

Transcript

  1. Романов А.С. OpenAPI на страже вашего спокойствия 2 План доклада

    + Как быстро начать автоматизацию задачи и следить за изменениями в автоматизированном режиме? + Что такое контракт? OpenAPI. + Рассмотрим проект OpenAPI Generator. + Возьмем OpenAPI Generator и по контракту сгенерируем модели клиента RestAssured. + Уберем лишние файлы. + Модифицируем шаблон. + А что делать, если реализация еще недоступна? С помощью Postman и OpenAPI создаем Mock Server и делаем вызовы. + Вместо выводов: как максимально быстро реагировать на изменения в коде?
  2. 3 + 12+ лет Java/Kotlin. + 7+ лет в роли

    TeamLead/Архитектора. + 6 лет опыт DevOps. + Co-founder EdTech стартапа IT-Enduro. + Работаю в роли Software Архитектора в Иннотех. + Мы с вами встречались на других конференциях :) Романов Алексей
  3. Романов А.С. OpenAPI на страже вашего спокойствия 4 + Меняются

    модели и API (но вас постоянно забывают об этом известить). + Хотелось бы знать, что произошли изменения как можно раньше, например, в фантазиях разработчика на этапе компиляции. + Для старта нового API-теста нужно написать много boilerplate кода. Как быстро начать автоматизацию?
  4. Романов А.С. OpenAPI на страже вашего спокойствия 5 Контракт –

    это соглашение о том, как будет выглядеть наше API, и какие параметры оно будет принимать. Спецификация OpenAPI определяет стандарт независимого от языка описания API, который позволяет понимать возможности службы без доступа к исходному коду. По сути, OpenAPI — это описание методов API, для которых описываются заголовки, входные и выходные параметры. Что такое контракт? OpenAPI
  5. 6 1. openapi: 3.0.1 2. info: 3. title: Servers API

    4. version: v1 5. servers: 6. - url: http://localhost:8080 7. paths: 8. /api/v1/servers: 9. get: 10. tags: 11. - server 12. summary: Find all servers 13. operationId: all 14. responses: 15. '200': 16. description: OK 17. content: 18. application/json: 19. schema: 20. $ref: '#/components/schemas/ServersResponse'
  6. 7

  7. Романов А.С. OpenAPI на страже вашего спокойствия 8 Contract First

    – мы сначала согласовываем OpenAPI контракт, а потом по нему пишем или генерируем код. Contract First
  8. Романов А.С. OpenAPI на страже вашего спокойствия 9 Для генерации

    кода возьмем самое распространенное решение – проект OpenAPI Generator. +Генерация клиентского и серверного кода для всех популярных языков и фреймворков (Java, Kotlin, Go, C#, JavaScript и т.п.). +Валидация OpenAPI. +Возможность кастомизации шаблонов. Contract First https://openapi-generator.tech/
  9. Романов А.С. OpenAPI на страже вашего спокойствия 10 OpenAPI на

    страже вашего спокойствия https://github.com/Romanow/openapi-generation Необходимые инструменты: + Java 17 + Docker + OpenAPI generator + Postman Скачать репозиторий: $ git clone -b sqa-days git@.../openapi-generation.git $ docker compose up -d —wait Локальный запуск: http://localhost:8080 Внешний сервер: https://sqadays.romanow-alex.ru
  10. Романов А.С. OpenAPI на страже вашего спокойствия 11 Live Coding!

    + Берем OpenAPI Generator и по контракту генерируем модели клиента RestAssured. + Убираем лишние файлы. + Модифицируем шаблон.
  11. Романов А.С. OpenAPI на страже вашего спокойствия 15 Модифицируем шаблон

    $ openapi-generator author template \ -g java \ --library rest-assured \ -o openapi/templates
  12. Романов А.С. OpenAPI на страже вашего спокойствия 16 Модифицируем шаблон

    + API – клиент или сервер. + APIDocs – markdown описание API. + Model – модели. + ModelDocs – markdown описание моделей. + SupportingFiles – дополнительные файлы.
  13. Романов А.С. OpenAPI на страже вашего спокойствия 17 Модифицируем шаблон

    1. {{>licenseInfo}} 2. 3. package {{package}}; 4. 5. {{#models}} 6. {{#model}} 7. {{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{>pojo}}{{/isEnum}} 8. {{/model}} 9. {{/models}} openapi/templates/model.mustache
  14. Романов А.С. OpenAPI на страже вашего спокойствия 18 Модифицируем шаблон

    + {{>...}} – подключение шаблона. + {{...}} – обращение к значению переменной; + {{#...}} .... {{\...}} – обращение к переменной (так же используется для обхода списка).
  15. Романов А.С. OpenAPI на страже вашего спокойствия 20 + Возможность

    генерировать модели и клиента по OpenAPI позволяет нам быстрее реагировать на изменения в реализации. + OpenAPI generator сгенерирует за вас весь boilerplate, вам останется только описать сценарии. + OpenAPI generator позволяет кастомизировать шаблоны, следовательно, вы можете сгенерировать код, удовлетворяющий Code Style и вашему чувству прекрасного. Как максимально быстро реагировать на изменения в коде?