У меня есть метод тестирования, использующий NUnit и Selenium, который открывает браузер на нашем веб-сайте, который находится на производственном сервере, регистрирует пользователя и проверяет, что регистрация прошла успешно.
(я знаю, что в идеале системные тесты должны выполняться на отдельном тестовом сервере, а не на производстве, но здесь они хотят проверить, работает ли система prod!)
Проблема в том, как откатить изменения базы данных в результате этого теста? Например, состояние моей базы данных до и после запуска должно быть одинаковым.
Я подумал о 3 возможных вариантах, но ни один из них не практичен:
1) написание SQL-запросов для удаления из реальных таблиц перед запуском теста (Setup) и после запуска теста (TearDown); это мой нынешний подход, однако
Проблема этого подхода заключается в том, что мне нужно точно знать, какие таблицы были задействованы для каждого запускаемого системного теста, и это может быстро стать очень сложным, поскольку тест может повлиять на более чем одну таблицу.
2) Написание транзакционного кода
Это не вариант, поскольку изменения кода выполняются веб-сайтом, а не написанным модульным тестом.
3) Получение снимка существующей базы данных (SQL Server 2008 R2) перед началом каждого теста, а затем после его завершения, восстанавливая снимок до исходного.
Эта идея звучит хорошо для меня, если бы мы могли запускать тесты только в среде Staging, но проблема в том, что тесты должны запускаться в среде Production и могут занимать около 5 минут, так что откат и восстановление его будет глупой идеей, поскольку изменения, сделанные за эти 5 минут, будут потеряны!
Посоветуйте, пожалуйста, какой подход был бы наилучшим вариантом для решения этой проблемы? может быть 4-й вариант?
Спасибо