2009-03-19 9 views
5

Sto configurando alcuni test di selenio per un'applicazione Web interna e sto cercando consigli su una "best practice" di test. Uno dei test aggiungerà alcuni dati tramite l'interfaccia utente che non possono essere rimossi tramite l'interfaccia utente (ad esempio, è possibile aggiungere un record tramite l'app Web, ma la rimozione richiede di contattare qualcuno internamente per rimuoverlo a livello di database). Come si tiene conto in genere della pulizia dei dati dopo l'esecuzione del test del selenio?Pulizia dei dati dopo un test di selenio

L'app in questione è scritta in PHP e sto usando PHP per i test (con Selenium RC e SimpleTest), ma sono aperto ad altri strumenti, ecc. Poiché questa è solo una delle domande di massima pratica. L'app in fase di test si trova nel nostro ambiente di sviluppo, quindi non sono particolarmente preoccupato per i dati trasferiti dai test.

Alcune idee:

  1. connettersi manualmente al database nel test Selenium per ripulire i dati
  2. usare qualcosa come DBUnit Per gestire questo?
  3. Basta aggiungere i dati e non preoccuparti di pulirlo (alias, l'approccio pigro)

Grazie!

Modifica: Sembra che la maggior parte delle idee sia incentrata sulla stessa conclusione: elaborare una serie di dati noti e ripristinare al termine dei test. Il meccanismo per questo probabilmente varierà a seconda della lingua, una quantità di dati, ecc. Ma sembra che dovrebbe funzionare per i miei bisogni.

risposta

4

Uso il selenio con un'applicazione Rails e utilizzo il meccanismo di fissaggio per caricare e scaricare i dati dal database di test. È simile all'approccio DbUnit, sebbene non venga scaricato e ricaricato tra i test a causa del volume di dati. (Questo è something I'm working on, tuttavia.)

2

Abbiamo un front-end Web per una routine di ripristino del database. La prima cosa che i nostri test fanno è ripristinare un punto di partenza "ben noto".

0

Puntare la webapp su un'istanza di database diversa che è possibile aggiungere alla pulitura al termine dei test. Poi avrai il database da ispezionare dopo che i test sono stati eseguiti se hai bisogno di eseguire il debug, e quando hai finito puoi semplicemente spazzare via tutti i tavoli. È possibile ottenere un'esportazione del database corrente e ripristinarlo nella nuova istanza prima dei test se sono necessari i dati seme.

0

Evitare l'approccio pigro. Non va bene e alla fine ti mancherà. Vedere la mia risposta precedente su questo argomento in questo separate StackOverflow question.

0

D'accordo con le altre risposte qui. Ho collegato i test Selenium e DBUnit ai 3 progetti precedenti su cui ho lavorato. Nel primo progetto abbiamo provato l'approccio pigro, ma prevedibilmente è caduto in un heap, quindi abbiamo usato DBUnit e non ho guardato indietro.

Mi rendo conto che stai usando PHP, quindi per favore traduci DBUnit/JUnit ai tuoi equivalenti PHP.

Un paio di punti:

  • usare il meno possibile di dati. Con molti test di selenio in esecuzione, si desidera carico DBUnit per essere veloce come possibile. Quindi prova a ridurre al minimo la quantità di dati che stai caricando .
  • Caricare solo i dati che cambiano. Spesso è possibile saltare le tabelle che non sono mai modificate dall'app Web. Dati di riferimento tabelle e così via. Tuttavia, è possibile che voglia creare un file DBUnit xml backup/db separato per caricare questi dati nel caso in caso di perdita accidentale.
  • Lascia che i test di selenio JUnit scelgano se hanno bisogno di una ricarica. Alcuni test di selenio non modificheranno i dati di , quindi non è necessario ricaricare il database dopo l'esecuzione. In ciascuno dei miei test sul selenio I esegue l'override/implementa un metodo per restituire il comportamento DBUnit desiderato.

    @Override protetta DBUnitRunConfig getDBUnitRunConfig() {

    return DBUnitRunConfig.RUN_ONCE_FOR_THIS_TEST_CASE; 
    

    }

(Impossibile ottenere che frammento di formattare correttamente.) Dove è DBUnitRunConfig:

public enum DBUnitRunConfig { 
    NONE, 
    RUN_IF_NOT_YET_RUN_IN_ANY_TEST_CASE, 
    RUN_ONCE_FOR_THIS_TEST_CASE, 
    RUN_FOR_EACH_TEST_IN_TEST_CASE 
}; 

Riduce il tempo necessario per superare i test. La classe super abilitata al selenio (o classe helper) può quindi eseguire, o non eseguire, DBUnit per i test specificati.