Как выполнить откат / разбор / очистку изменений базы данных после запуска системного теста? - PullRequest
1 голос
/ 16 марта 2012

У меня есть метод тестирования, использующий NUnit и Selenium, который открывает браузер на нашем веб-сайте, который находится на производственном сервере, регистрирует пользователя и проверяет, что регистрация прошла успешно.

(я знаю, что в идеале системные тесты должны выполняться на отдельном тестовом сервере, а не на производстве, но здесь они хотят проверить, работает ли система prod!)

Проблема в том, как откатить изменения базы данных в результате этого теста? Например, состояние моей базы данных до и после запуска должно быть одинаковым.

Я подумал о 3 возможных вариантах, но ни один из них не практичен:

1) написание SQL-запросов для удаления из реальных таблиц перед запуском теста (Setup) и после запуска теста (TearDown); это мой нынешний подход, однако Проблема этого подхода заключается в том, что мне нужно точно знать, какие таблицы были задействованы для каждого запускаемого системного теста, и это может быстро стать очень сложным, поскольку тест может повлиять на более чем одну таблицу.

2) Написание транзакционного кода Это не вариант, поскольку изменения кода выполняются веб-сайтом, а не написанным модульным тестом.

3) Получение снимка существующей базы данных (SQL Server 2008 R2) перед началом каждого теста, а затем после его завершения, восстанавливая снимок до исходного. Эта идея звучит хорошо для меня, если бы мы могли запускать тесты только в среде Staging, но проблема в том, что тесты должны запускаться в среде Production и могут занимать около 5 минут, так что откат и восстановление его будет глупой идеей, поскольку изменения, сделанные за эти 5 минут, будут потеряны!

Посоветуйте, пожалуйста, какой подход был бы наилучшим вариантом для решения этой проблемы? может быть 4-й вариант?

Спасибо

Ответы [ 3 ]

5 голосов
/ 16 марта 2012

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

0 голосов
/ 16 марта 2012

Есть опция fith. Если веб-сайт получает регистрацию для пользователя «WeAreTestingOutSite», он делает все, кроме фактического добавления пользователя в базу данных.

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

0 голосов
/ 16 марта 2012

Я бы порекомендовал вам перейти с 4-го варианта: ввести новую функцию, которая позволяет удалить пользователя.Вероятно, не для самого пользователя, а для системных администраторов (пользователей Backoffice).Таким образом, вы можете проверить, может ли пользователь быть зарегистрирован и впоследствии удален, не обращая особого внимания на сценарии SQL.

...