//SOLVEME_

Developer Tools / Testing · 2022

pycamel

Фреймворк для автоматизованого тестування API на базі pytest

Опубліковано: · Оновлено:

PythonpytestAPI Testing
Роль
Соло-розробка фреймворку автоматизації тестування
Стек
Python, pytest, Pylint, Coverage, codecov
Рік
2022

pycamel — фреймворк для автоматизованого тестування API-сервісів з безшовною інтеграцією в pytest. Він дає структурований спосіб писати тести API, особливо корисний для мікросервісних архітектур.

Задача

Коли команда працює з кількома сервісами й версіями API одночасно, розрізнені ad-hoc pytest-скрипти швидко перетворюються на хаос без спільної структури й перевикористовуваних компонентів.

Рішення

  • ▸CamelConfig — ініціалізація конфігурації з базовим URL сервісу
  • ▸RouterMaker — побудова маршрутів для різних API-ендпоїнтів
  • ▸Параметризоване тестування через pytest.mark.parametrize
  • ▸Методи валідації відповідей, зокрема assert_status_code
  • ▸Підтримка фільтрів запитів та легке розширення для мультисервісних архітектур

Як це працює

Проєкт один раз оголошує базовий хост через CamelConfig у tests/conftest.py. Далі кожен сервіс отримує власний RouterMaker з префіксом шляху, наприклад /data-service/v1, а кожен ендпоінт стає перевикористовуваним роутером, доступним як pytest-фікстура. Тести викликають router.get() чи post() і перевіряють відповідь, тож код тестів повторює структуру самого API.

  • ▸Заголовки за замовчуванням для кожного роутера (одразу Content-Type: application/json), а також set_headers і append_header, що діють лише на наступний запит
  • ▸Query-параметри й фільтри через set_filters() для пагінації та пошуку
  • ▸Валідація відповідей за схемами pydantic v2
  • ▸Окремі router maker'и для кожної версії API (v1, v2) для сервісів, що розвиваються паралельно

Підтримка

pycamel опублікований на PyPI з 2022 року й досі підтримується: поточна мажорна версія розрахована на Python 3.10+ і pydantic v2, юніт-тести запускаються на GitHub Actions, а покриття відстежується в Codecov.

Результат

Фреймворк налаштований на якість коду: Pylint для статичного аналізу та Coverage разом з codecov для контролю покриття тестами.

Згадки та джерела