Создание и откат тестовых данных с SQL-сервером - PullRequest
6 голосов
/ 28 ноября 2010

Я создаю серию тестов веб-автоматизации, которые требуют, чтобы тестовые данные были в базе данных (SQL Server 2008). Чтобы сгенерировать необходимые данные для каждого теста, я должен вызвать некоторый код C #, который вставит правильные данные в БД (т.е. я не могу просто написать сценарии SQL для вставки данных). Моя проблема в том, что я не хочу загрязнять свою тестовую базу данных большим количеством тестовых данных из этих автоматических тестов. Поэтому хотелось бы откатить все изменения, внесенные в БД во время теста.

Может кто-нибудь предложить разумный способ достижения этого?

Ответы [ 6 ]

5 голосов
/ 28 ноября 2010

Простым способом будет создание резервной копии базы данных перед запуском тестов, а затем просто восстановление в конце.

4 голосов
/ 28 ноября 2010

Два способа сделать это.

Один из них - заключить тест в транзакцию и выполнить откат.Другой способ - использовать сценарий очистки как часть кода завершения теста (мы делаем это для некоторых наших интеграционных тестов, где транзакция не работает).

2 голосов
/ 28 ноября 2010

Мастера из Red Gate только что выпустили SQL Virtual Restore, которая фактически смонтирует файл резервной копии в виде живой, читаемой и доступной для записи базы данных - так что вы можете иметь файл резервной копии, представляющий базовое состояние вашей системы перед тестированием, копию этой резервной копии, подключите ее в качестве тестовой базы данных, запустите тесты, а затем размонтируйте и сотрите копию.

Виртуальное восстановление находится по адресу http://www.red -gate.com / products / sql_virtual_restore / index.htm и есть 14-дневная пробная версия, если вы хотите попробовать его.

У меня нет никакого отношения к Red Gate, кстати, я просто увлеченный пользователь их инструментов.

2 голосов
/ 28 ноября 2010

Когда у меня нет контроля над областями транзакций моих тестов, я обычно каждый раз удаляю и воссоздаю базу данных с нуля.

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

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

Не пытался автоматизировать резервное копирование / откат, как предлагает AdaTheDev, но, похоже, это ваш лучший вариант, если вы не хотите поддерживать потенциально сложные (и глючные) сценарии очистки (зависит от сложности данных снимка / как часто вы можете изменить свой снимок и соответственно изменить очистку).

Рассматривали ли вы макетирование доступа к данным, чтобы ваши веб-тесты работали с хранилищем данных в памяти? Затем выполните внутреннюю проверку процедур доступа к данным, где вы все еще можете откатить области транзакций?

1 голос
/ 28 ноября 2010

Похоже, было бы трудно использовать транзакции, так как вы собираетесь делать несколько веб-запросов в одном тесте - но это будет моим первым предпочтением, потому что это быстрее, чем восстановление базы данных из резервной копии.

Если у вас правильная версия SQL-сервера, вы можете использовать снимки базы данных вместо резервных копий: http://msdn.microsoft.com/en-us/library/ms175876.aspx, просто потому, что они работают быстрее:)

0 голосов
/ 28 ноября 2010

Очевидно, что все зависит от того, как вы вызываете тесты, но будет ли работать атрибут «Откат», который есть в MbUnit?

...