Qualcuno ha qualche suggerimento per una procedura ottimale o un modo preferito di eseguire il rollback delle transazioni di database effettuate da un framework di test di integrazione come Selenium?Database di rollback dopo i test di integrazione (selenio)
Ecco la nostra situazione attuale: abbiamo un progetto web .net con un numero di test unitari che funzionano bene nel nostro ambiente di test unitario - ogni test eredita una classe genitore che apre una transazione in [SetUp], e rotola ripristinare la transazione in [TearDown]. Dopo ogni test, il nostro database di test unitario viene riportato allo stato originale.
Tuttavia, le cose cambiano una volta arrivati al nostro ambiente di integrazione. Il nostro server di integrazione continua compila automaticamente i nostri commit e li invia a un server di test, in modo che il server funzioni sempre con il codice più aggiornato. Abbiamo anche installato un'istanza Selenium per automatizzare l'interazione dell'utente con il sito. I test del selenio fondamentalmente comunicano con un server Selenium esistente e dicono al server cose come "Avvia un browser e vai su http://testsite/TestPage.aspx - inserisci il testo" abc "nel campo modulo con id" def "- asserisci che la nuova pagina contiene il testo" xyz ""
Ogni test viene eseguito in modo simile ai nostri test dell'unità di vaniglia, ma con un'eccezione importante: qualsiasi modifica apportata da Selenium viene eseguita in un thread/applicazione completamente diverso, pertanto non è possibile (I * think we non può, almeno) riportarli indietro nel test di demolizione.
Non abbiamo ancora trovato una buona soluzione per questo. In questo momento siamo a un punto in cui stiamo utilizzando un SqlCommand per eseguire un'istruzione sql per il backup del database, quindi alla fine del test, stiamo impostando il database su utente singolo, lasciando cadere il db corrente e ripristinando la vecchia copia - questo non è l'ideale, perché uccide efficacemente l'applicazione che era collegata al DB e ci impone di reinizializzare nuovamente l'app.
Si tratta di un problema risolto in precedenza? Qualsiasi consiglio sarebbe fantastico.
Grazie!
Grazie Stefan, Questa sembra essere la soluzione migliore: abbiamo fatto ricorso al solo troncamento delle tabelle e al ricaricamento i proiettori dopo ogni test, che non è proprio * quello * tassativo, e sembra che stia funzionando bene. Grazie ancora! – matt
Il troncamento su oracle è piuttosto veloce, perché non è possibile eseguire il rollback di questa operazione. Gli script sono facili nella nostra situazione, gli script sono già disponibili, non dobbiamo mantenere qualcos'altro. –
Questo script viene eseguito prima di ogni metodo di prova o caso di test? Assumerei ogni metodo di prova ... Inoltre, come viene eseguito questo script? Hai una API di servizio nel back-end? – HDave