Протестируй своё REST API с помощью утилиты Dredd
Ссылки на Dredd
Установка
- Установить node.js
- Проверить установку выполнив команды 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
- Создайте файл со спецификацией 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
- Создадим директорию C:\api
- Поместим в неё файл с OpenApi спецификацией: tool.yml
- Выполним команду для создания файла конфигураций 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