- PVSM.RU - https://www.pvsm.ru -
Реляционная базы данных — зверь сравнительно непознанный, и имеет репутацию генератора проблем. Не то, чтобы проблем не существовало, но как и с другими инструментами, чаще всего сложности возникают от неумения их (РСУБД) готовить.
Готовить с одной статьи не выучиться, но одно блюдо сдюжим.
Я постарался выделить скелет, набор скриптов, на базе которого можно делать свои схемы данных PostgreSQL и тестировать их при помощи pgTAP: github.com/C-Pro/pg_skeleton [1]
И в качестве приятного бонуса я прикрутил это дело к Travis, чтобы у вас ещё и CI было уже на старте :)
Для установки нам понадобятся:
Итак, по порядку:
Если PostgreSQL ещё не установлен — ставим. Если у вас Ubuntu или Debian — рекомендую подключить их репозиторий apt.postgresql.org (инструкцию по подключению см. тут: wiki.postgresql.org/wiki/Apt [2]). Сразу предупреждаю — на Ubuntu 13 у них пакетов нет, они ориентируются на LTS релизы.
Скачиваем и устанавливаем последнюю версию pgTAP — фреймворка для тестирования всего и вся в PostgreSQL: pgtap.org [3]
Архив распаковываем, дальше как обычно:
make && sudo make install
Теперь серверу postgres должно быть доступно расширение pgtap.
Устанавливаем pg_prove — perl утилиту для запуска тестов pgTAP
sudo cpan TAP::Parser::SourceHandler::pgTAP
Всё, можно скачивать и ставить pg_skeleton:
git clone https://github.com/C-Pro/pg_skeleton.git
cd pg_skeleton
cp install.cfg.example install.cfg
./install.sh
Оно попросит ввести желаемый пароль пользователя — владельца создаваемой БД и пользователя postgres.
Теперь запустим тесты:
cd test
./run_tests.sh
Если вы увидели волшебное слово PASS — всё великолепно, можно разбирать скелет по косточкам. То есть по файлам.
Каждая подпапка называется по имени схемы, которая в ней содержится.
В папке test_user содержатся скрипты для создания схемы test_user (это просто пример схемы) с одной таблицей и несколькими примерами функций.
Такое разбиение на отдельные файлы сэкономит нервы в будущем. Разделив в разных файлах создание таблиц, foreign constraints, ф-ии, отображения (views) и т.д., можно включать их в install.sql в правильной очерёдности, не попадая в ловушку взаимозависимостей типа таких:
create table a (x int references b.y);
create table b (y int references a.x);
Папка test тоже создаёт схему, но это особая схема, и живёт она только пока идут тесты.
setup.sql предназначен для загрузки ф-й и тестовых данных во временную схему test перед запуском тестов. (уф, сколько слова тест :)
run_tests.sh с помощью pg_prove по одному выполняет файлы ./tests/run_<имя>.sh
run_<имя>.sh создаются по одному на схему.
Сначала в них подключается файл setup.sql — который загружает определения тестовых функций, вспомогательную ф-ю test.test_scheme_check_func и тестовые данные из файла test_data.sh. Затем выполняются тесты, которые могут находиться в нескольких файлах, которые просто подключаются к run_<имя>.sh. После всех тестов в схеме, выполняется ф-я test.test_scheme_check_func. Эта ф-я сама является тестом pgTAP, который проваливается, если в схеме присутствуют не покрытые тестами ф-ии. Определение происходит по комментарию к тесту. Комментарий должен начинаться с названия тестируемой ф-ии. Конечно могут оказаться непокрытыми перегруженные ф-ии с одинаковыми названиями, но это лучше, чем никакого контроля покрытия тестами. После выполнения тестов происходит rollback — все созданные объекты и загруженные тестовые данные удаляются.
Ну вот наверное и всё пока.
Каюсь, вышло сумбурно — спрашивайте, что непонятно.
Пользуйтесь, разбирайтесь, форкайте!
Автор: CPro
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/testirovanie/53092
Ссылки в тексте:
[1] github.com/C-Pro/pg_skeleton: https://github.com/C-Pro/pg_skeleton
[2] wiki.postgresql.org/wiki/Apt: http://wiki.postgresql.org/wiki/Apt
[3] pgtap.org: http://pgtap.org
[4] travis-ci.org/C-Pro/pg_skeleton#: https://travis-ci.org/C-Pro/pg_skeleton#
[5] Источник: http://habrahabr.ru/post/209584/
Нажмите здесь для печати.