Rollback banco de dados após testes de integração (Selenium)

lguém tem alguma sugestão para uma prática recomendada ou uma maneira preferida de reverter transações de banco de dados feitas a partir de uma estrutura de teste de integração como o Seleniu

Aqui está nossa situação atual: temos um projeto da web .net com vários testes de unidade que funcionam bem em nosso ambiente de testes de unidade - cada teste herda uma classe pai que abre uma transação no [SetUp] e reverte a transação no [TearDown]. Após cada teste, nosso banco de dados de teste de unidade é restaurado para o estado origina

No entanto, as coisas mudam quando chegamos ao nosso ambiente de integração. Nosso servidor de integração contínua compila automaticamente nossas confirmações e as envia para um servidor de teste, para que o servidor sempre execute o código mais atualizado. Também configuramos uma instância do Selenium para automatizar a interação do usuário com o site. Os testes de selênio se comunicam basicamente com um servidor Selenium existente e informam ao servidor coisas como "Inicie um navegador e vá parahttp: //testsite/TestPage.asp - insira o texto 'abc' no campo do formulário com o ID 'def' - afirme que a nova página contém o texto 'xyz' "

ada teste é executado de maneira semelhante aos nossos testes de unidade de baunilha, mas com uma exceção importante: quaisquer alterações feitas pelo Selenium são feitas em um thread / aplicativo completamente diferente e, portanto, não podemos (acho que não podemos). , pelo menos) reverta-as na desmontagem do test

Ainda temos que encontrar uma boa solução para isso. No momento, estamos em um ponto em que estamos usando um SqlCommand para executar uma instrução sql para fazer backup do banco de dados e, no final do teste, definimos o banco de dados como usuário único, eliminando o banco de dados atual e restaurando a cópia antiga - isso é menos que o ideal, porque isso mata efetivamente o aplicativo que foi anexado ao banco de dados e exige que reinicializemos o aplicativo novamente.

Este é um problema que já foi resolvido antes? Qualquer conselho seria fantástico

Obrigado

questionAnswers(3)

yourAnswerToTheQuestion