Есть ли у кого-нибудь какие-либо предложения относительно оптимальной практики или предпочтительного способа отката транзакций базы данных, выполненных из интегрированной среды тестирования, такой как Selenium?
Вот наша текущая ситуация: у нас есть веб-проект .net с несколькими модульными тестами, которые прекрасно работают в нашей среде модульных тестов - каждый тест наследует родительский класс, который открывает транзакцию в [SetUp] и откатывается транзакция в [TearDown]. После каждого теста наша база данных модульных тестов возвращается в исходное состояние.
Однако, как только мы доберемся до нашей среды интеграции, все изменится. Наш сервер непрерывной интеграции автоматически компилирует наши коммиты и передает их на тестовый сервер, так что сервер всегда работает с самым последним кодом. Мы также настроили экземпляр Selenium для автоматизации взаимодействия пользователя с сайтом. Тесты селена в основном связываются с существующим сервером Selenium и сообщают серверу такие вещи, как: «Запустите браузер и перейдите на http://testsite/TestPage.aspx - введите текст« abc »в поле формы с идентификатором« def »- заявить, что новая страница содержит текст "xyz" "
Каждый тест выполняется аналогично нашим ванильным модульным тестам, но с одним важным исключением: любые изменения, внесенные Selenium, выполняются в совершенно другом потоке / приложении, и поэтому мы не можем (я думаю, мы можем по крайней мере) откатите их в тесте демонтажа.
Мы еще не нашли хорошего решения для этого. Сейчас мы находимся в точке, где мы используем SqlCommand для выполнения оператора sql для резервного копирования базы данных, а затем в конце теста мы устанавливаем базу данных для одного пользователя, отбрасываем текущую базу данных и восстанавливаем старая копия - это далеко не идеально, потому что это эффективно убивает приложение, которое было присоединено к БД, и требует от нас еще раз повторно инициализировать приложение.
Это проблема, которая была решена раньше? Любой совет будет потрясающим.
Спасибо!