Как добиться тестовой изоляции тестирование Oracle PL / SQL?

В проектах Java тесты JUnit выполняют настройку, тестирование, разборку. Даже при имитации реальной базы данных с использованием базы данных в памяти вы обычно откатываете транзакцию или удаляете базу данных из памяти и воссоздаете ее между каждым тестом. Это дает вам изоляцию теста, поскольку один тест не оставляет в среде артефактов, которые могут повлиять на следующий тест. Каждый тест начинается в известном состоянии и не может переходить в другой.

Теперь у меня есть сборка базы данных Oracle, которая создает 1100 таблиц и 400 КБ кода - много пакетов pl / sql. Я хотел бы не только протестировать установку базы данных (полная - создать с нуля, частичная - обновить предыдущую базу данных и т. Д.) И убедиться, что все таблицы и другие объекты находятся в состоянии, которое я ожидаю после установки, но ТАКЖЕ запустить тесты на pl / sql (я не уверен, как бы я сделал первое - предложения?).

Я бы хотел, чтобы все это запускалось из Jenkins для CI, чтобы ошибки разработки выявлялись с помощью регрессионного тестирования.

Во-первых, я должен использовать корпоративную версию вместо XE, потому что XE не поддерживает java SP и зависимость от Oracle Web Flow. Даже если я устраню эти зависимости, сборка обычно занимает 1,5 часа только для загрузки (полная сборка).

Итак, как добиться тестовой изоляции в этой среде? Использовать транзакции для каждого теста и откатывать их? Хорошо, а как насчет тех процедур pl / sql, в которых есть коммиты?

Я думал о резервном копировании и восстановлении для сброса базы данных после каждого теста или воссоздания всей базы данных между тестами (слишком радикально). И то, и другое непрактично, так как установка занимает более часа. Выполнять это для каждого теста - это излишнее и безумие.

Есть ли способ провести черту на песке в схемах (схемах) БД, а затем откатить ее к этому моменту времени? Сорта похожа на большую функцию отмены. Что-то помимо expdp / impdp или rman. Возможно, весь подход отключен. Предложения? Как это удалось другим?

Для CI или небольшого окна производственного обновления полный набор тестов должен выполняться за разумное время (30 минут было бы идеально).

Существуют ли продукты, которые могут помочь реализовать эту возможность «отмены»?

20
задан razlebe 30 November 2011 в 00:11
поделиться