Я сделал это в Java, используя dbunit.
По сути, все, что вы делаете в базе данных:
возвращает набор результатов
или изменяет состояние базы данных.
Состояние базы данных можно описать как все значения во всех строках во всей таблице во всех схемах базы данных; состояние любого подмножества - это состояние всех данных, на которые влияет какой-либо тест.
Итак, начните с базы данных, заполненной достаточным количеством тестовых данных, чтобы вы могли выполнять тесты, назовите это базовым уровнем. Извлеките снимок с помощью dbunit или инструмента по вашему выбору.
Учитывая, что ваша база данных находится на базовом уровне, любой результирующий набор является детерминированным (если ваш sp детерминирован, тем более, если он делает "select random ();").
Получите базовый набор результатов всех ваших SP, сохраните их как снимки с помощью dbunit или любого другого инструмента, который вы используете.
Чтобы проверить операции, которые не меняют состояние, просто проверьте, что набор результатов, который вы получаете, является тем, который вы изначально получили. Чтобы проверить операции, которые изменяют базу данных, протестируйте эту базовую линию + операция = ожидаемое изменение. После каждого теста, который потенциально изменяет базу данных, восстанавливайте его до базового уровня.
По сути, возможность восстановления до базовой линии делает возможным тестирование.