5. Dredd автотесты для OpenAPI спецификации

REST
Протестируй своё REST API с помощью утилиты Dredd

Протестируй своё REST API с помощью утилиты Dredd

Ссылки на Dredd

  1. Dredd сайт
  2. Dredd установить
  3. OpenApi спецификация
  4. OpenApi Generator

Установка

  1. Установить node.js
  2. Проверить установку выполнив команды c командной строки из под администратора (CMD):
C:\Windows\system32>node -v
v20.17.0

C:\Windows\system32>npm -v
10.8.2

3. Установить Dredd

npm install dredd -g

4. Проверить установку Dredd

C:\Windows\system32>dredd --version
dredd v14.1.0 (Windows_NT 10.0.19045; x64)

Запуск автоматического тестирования через Dredd

  1. Создайте файл со спецификацией OpenApi для вашего RESTfull приложения (например tool.yml)

2. Запустите ваше приложение локально, по умолчанию Spring приложение поднимает Apache Tomcat это комплект серверных программ включая веб-сервер на порту 8080 по умолчанию.

3. Выведите список Endpoints (список адресов, на которые наше приложение принимает сообщения)

C:\Projects\Kosenkov\8_DreddMe\src\main\resources>dredd tool.yml http://127.0.0.1:8080 --names
(node:36736) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
warn: API description parser warning in C:\Projects\Kosenkov\8_DreddMe\src\main\resources\tool.yml:26 (from line 26 column 7 to column 11): 'Operation Object' contains unsupported key 'tags' (2 occurances)
warn: API description parser warning in C:\Projects\Kosenkov\8_DreddMe\src\main\resources\tool.yml:45 (from line 45 column 9 to column 14): 'Parameter Object' contains unsupported key 'style'
warn: API description parser warning in C:\Projects\Kosenkov\8_DreddMe\src\main\resources\tool.yml:89 (from line 89 column 11 to column 17): 'Schema Object' contains unsupported key 'format'
warn: API description parser warning in C:\Projects\Kosenkov\8_DreddMe\src\main\resources\tool.yml:89 (from line 89 column 19 to column 41): Interpreting YAML !!timestamp as string
info: /tools > Метод получения списка инструментов > 200 > application/json
skip: GET (200) /tools
info: /tools > Метод получения списка инструментов > 200 > application/json
skip: GET (200) /tools
info: /tools/{id} > Метод получения списка инструментов > 200 > application/json
skip: GET (200) /tools/77
info: /tools/{id} > Метод получения списка инструментов > 200 > application/json
skip: GET (200) /tools/77
complete: 0 passing, 0 failing, 0 errors, 4 skipped, 4 total
complete: Tests took 3ms

4. Запустите тест

C:\Projects\Kosenkov\8_DreddMe\src\main\resources>dredd tool.yml http://127.0.0.1:8080

Получил такой результат:

Видно что все тесты упали, а значит у нас ошибки в реализации и код не готов к деплою, так как не соответствует спецификации! Запуск этого скрипта можно выполнять в вашем CI/CD и при обнаружении ошибки — останавливать процесс развертывания

Файлы для локального запуска

dredd

Источник

Через Docker

  1. Создадим директорию C:\api
  2. Поместим в неё файл с OpenApi спецификацией: tool.yml
  3. Выполним команду для создания файла конфигураций dredd.yml
C:\Projects\Kosenkov\8_DreddMe\src\main\resources>docker run -it -v C:\api:/api -w /api apiaryio/dredd dredd init
? Location of the API description document (apiary.apib) (node:1) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
? Location of the API description document tool.yml
? Command to start the API server under test npm start
? Host of the API under test http://127.0.0.1:8080
? Do you want to use hooks to customize Dredd's behavior? No
? Do you want to report your tests to the Apiary inspector? No
? Dredd is best served with Continuous Integration. Do you want to create CI configuration? No

Configuration saved to dredd.yml

You can run tests now, with:

  $ dredd

-v, —volume — позволяет монтировать папки хоста в контейнер;
-w — изменяет рабочую директорию контейнера.

Файл dredd.yml будет в папке C:\api\docker

Вместо localhost:8080 используем host.docker.internal:8080 , источник

В docker-compose надо добавить

extra_hosts:
      - "host.docker.internal:host-gateway"

Запуск

docker run -it -v C:\api\docker:/api -w /api apiaryio/dredd dredd

Файлы docker

Оцените автора
Kosenkov.Pro
Добавить комментарий