Компания «Яндекс» разработала фреймворк Testsuite специально для тестирования сервиса «Яндекс.Такси». Теперь доступ к продукту открыли для всех желающих – исходный код Testsuite выложили на GitHub под лицензией MIT.
Зачем нужен Testsuite
Фреймворк создан для тестирования HTTP-сервисов. Он позволяет создавать запросы к API таких сервисов и анализировать ответы, отслеживать цепочки вызовов во внешние системы.
Также фреймворк дает возможность перехватывать HTTP-запросы, которые ваш продукт отправляет во внешние сервисы, и обрабатывать их.
С помощью Testsuite вы можете в тесте взаимодействовать с подключенной базой данных (из коробки поддерживаются PostgreSQL, MongoDB, Redis) – например, чтобы задать предусловие для выполнения теста через проверку результата запроса.
Как устроен тестовый фреймворк
В основу Testsuite лег pytest – самый популярный тестовый фреймфорк для Python. Но использовать его можно для тестирования продуктов, которые не обязательно написаны на Python. Так, «Яндекс.Такси» – это композиция сотен микросервисов, высоконагруженных компонентов на С++ и менее требовательных к ресурсам на Python. Но Testsuite успешно применяется и для тех, и для других.
В начале тестирования фреймворк может запустить реальную или тестовую базу данных, и напрямую обращаться к ее данным для чтения и записи. Например, вы можете перед каждым тестом наполнять базу наборами тестовых данных.
В рамках тестирования каждый микросервис запускается в отдельном процессе. Кроме того, стартует mockserver – веб-сервер, который имитирует работу внешнего окружения. Он подменяет вызовы HTTP API внешних сервисов.
Настраивать обработчики запросов на сервере можно для каждого теста. При этом mockserver будет помнить, какие запросы были обработаны и какие данные передавались.
Непосредственно тесты Testsuite позволяют проверить, правильно ли исследуемый сервис обрабатывает HTTP-запросы. Они помогут отследить внутреннее состояние сервиса, его работу с базой данных и вызовы во внешние сервисы.
Использование Testsuite
Разработчики отметили, что применимость фреймворка как инструмента тестирования зависит от уровня детализации исследуемого продукта. Так, библиотеки, компоненты, а также отдельные классы, методы и функции удобно тестировать не столько с Testsuite, но с применением стандартных unit-тестов, фреймворков Googletest и pytest.
Наиболее эффективная сфера применения Testsuite – это тестирование микросервисов. Кроме этого, фреймворк позволяет создавать и запускать интеграционные тесты для ансамблей микросервисов. Причем, если сервисы написаны на Python, Testsuite подойдет и для тестирования низкоуровневых взаимодействий между ними.
Сейчас Testsuite работает только в операционных системах GNU/Linux и macOS, требуя установки Python и pytest3. Чтобы начать работу, нужно иметь базовое представление о синтаксисе Python. Желательно познакомиться и с pytest – это облегчит создание собственных тестов в Testsuite.
Разработчики предоставили подробную документацию по проекту и примеры тестов с инструкцией по настройке и запуску фреймворка.
Критика
Разработчики в комментариях к статье о Testsuite на Habr отметили, что продукт – скорее не фреймворк, а набор отдельных инструментов и плагинов для pytest. Конечно, он упрощает работу с оригинальным фреймворком, но в целом не является чем-то уникальным и незаменимым.
Впрочем, разработчики Testsuite пообещали развивать проект и избавить его от «духа кровавого энтерпрайза». Декомпозиция на отдельные блоки, которые решают популярные прикладные задачи, сделает его более гибким, универсальным, упростит поддержку и дальнейшее совершенствование.