Test framework for Picodata plugin
Описание
Picotest - это фреймворк для тестирования плагинов, созданных в окружении pike.
Для использования Picotest требуется выполнить следующие действия:
- Установить pike:
- Добавить зависимости в
Cargo.tomlплагина:
Совместимость с Picodata
Picotest поддерживает версии Picodata, начиная с 25.1.1 и выше.
Интеграционное тестирование
Макрос #[picotest] используется для написания интеграционных тестов и может применяться как к функциям, так и к модулям.
Использование #[picotest]
При использовании макроса на модуле picotest автоматически пометит все функции модуля, названия которых начинаются с test_, как rstest-функции.
use *;
Совместимость с rstest
Макрос #[picotest] является оберткой над rstest, поэтому поддерживает использование:
fixture.
once
case
use picotest;
Атрибуты макроса #[picotest]
| Attribute | Description | Default |
|---|---|---|
path |
Путь до директории, содержащей файл топологии плагина (topology.toml) | Определяется автоматически |
timeout |
Таймаут перед запуском первого теста (seconds) | 5 |
Управление кластером в Picotest
Жизненный цикл и изоляция кластера
Picotest обеспечивает полную изоляцию тестовых окружений за счет автоматического управления жизненным циклом кластера:
Архитектура тестирования
Ключевые особенности:
Изоляция на уровне файлов:
- Каждый
.rsфайл вtests/компилируется как самостоятельный исполняемый модуль - Для каждого файла создается отдельный экземпляр кластера
Создание кластера вручную
Picotest позволяет создавать и удалять кластер без использования макроса #[picotest].
use rstest;
Модульное тестирование
Макрос #[picotest_unit] используется для написания юнит-тестов для плагинов, созданных с помощью утилиты pike.
Запуск тестов
Тесты запускаются через интерфейс cargo test:
Ограничения
#[picotest_unit]не может использоваться в модуле под#[cfg(test)].
Пример неверного использования макроса:
Пример верного использования макроса:
По скольку каждый юнит-тест компилируется и линкуется в динамическую библиотеку плагина (см. Структура плагина), он не должен быть задан в конфигурации, отличной от debug. В противном случае при сборке тестов они будут проигнорированы компилятором.
#[picotest_unit]не может использоваться совместно с другими атрибутами.
Все атрибуты используемые совместно с макросом будут отброшены.
В примере ниже #[should_panic] будет отброшен в процессе компиляции.
Подключение по Postrges протоколу
Picotest при запуске создаст дополнительного пользователя и назначит права на создание таблиц
User: Picotest
Password: Pic0test
Пример использования pgproto
use *;
use ;
use ;