2009-03-19 5 views
5

Ich richte einige Selenium-Tests für eine interne Web-App ein und suche Ratschläge für eine Testmethode. Bei einem der Tests werden einige Daten über die Benutzeroberfläche hinzugefügt, die nicht über die Benutzeroberfläche entfernt werden können (z. B. können Sie einen Datensatz über die Webanwendung hinzufügen, das Entfernen erfordert jedoch die interne Kontaktaufnahme, um sie auf Datenbankebene zu entfernen). Wie berucksichtigen Sie in der Regel das Bereinigen von Daten nach dem Selenium-Test?Daten nach einem Selentest bereinigen

Die betreffende App ist in PHP geschrieben und ich benutze PHP zum Testen (mit Selenium RC und SimpleTest), aber ich bin offen für andere Tools usw., da dies nur eine breite Best-Practice-Frage ist. Die zu testende App befindet sich in unserer Entwicklungsumgebung, daher mache ich mir keine Sorgen, dass Daten aus Tests übertragen werden.

Einige Ideen:

  1. manuell in die Datenbank in der Selenium Test verbinden die Daten
  2. Verwendung so etwas wie DBUnit aufzuräumen diese zu verwalten?
  3. nur Daten hinzufügen und sich keine Sorgen darüber Reinigung (aka, den faulen Ansatz)

Dank!

Bearbeiten: Scheint die meisten Ideen rund um die gleiche Schlussfolgerung zentriert: Arbeiten Sie eine bekannte Reihe von Daten und wiederherstellen, wenn die Tests abgeschlossen sind. Der Mechanismus dafür wird wahrscheinlich je nach Sprache, Datenmenge usw. variieren, aber es sieht so aus, als ob es für meine Bedürfnisse funktionieren sollte.

Antwort

4

Ich verwende Selenium mit einer Rails-Anwendung, und ich benutze den Fixture-Mechanismus zum Laden und Entladen von Daten aus der Testdatenbank. Es ist ähnlich dem DbUnit-Ansatz, obwohl ich aufgrund der Datenmenge nicht zwischen den Tests entladen und neu lade. (Dies ist something I'm working on, obwohl.)

2

Wir haben ein Web-Frontend für eine Datenbankwiederherstellungsroutine. Das erste, was unsere Tests tun, ist die Wiederherstellung eines "bekannten" Ausgangspunkts.

0

Zeigen Sie die Webanwendung auf eine andere Datenbankinstanz, die Sie können löschen, wenn Sie mit den Tests fertig sind. Dann müssen Sie die Datenbank überprüfen, nachdem die Tests ausgeführt wurden, wenn Sie debuggen müssen, und Sie können alle Tabellen einfach wegblasen, wenn Sie fertig sind. Sie können einen Export der aktuellen Datenbank erhalten und ihn vor den Tests in Ihrer neuen Instanz wiederherstellen, wenn Sie Seeddaten benötigen.

0

Vermeiden Sie den faulen Ansatz. Es ist nicht gut und wird dich letztendlich verfehlen. Sehen Sie meine vorherige Antwort zu diesem Thema in diesem separate StackOverflow question.

0

Stimmen Sie mit den anderen Antworten hier überein. Ich habe Selenium- und DBUnit-Tests an die letzten 3 Projekte, an denen ich gearbeitet habe, angeschlossen. Beim ersten Projekt haben wir den faulen Ansatz versucht, aber es ist vorhersehbar, dass es auf einen Haufen fiel, also haben wir DBUnit benutzt und ich habe nicht zurückgeschaut.

Ich weiß, dass Sie PHP verwenden, also übersetzen Sie bitte DBUnit/JUnit in Ihre PHP-Entsprechungen.

Ein paar Punkte:

  • Verwendung so wenig Daten wie möglich. Mit viele Selen-Tests laufen, wollen Sie die DBUnit laden so schnell wie möglich. Versuchen Sie also, die Datenmenge zu minimieren, die Sie laden.
  • Nur die Daten laden, die sich ändern. Oft können Sie Tabellen überspringen, die nie von der Web-App geändert werden. Ref Daten Tabellen und so weiter. Sie könnten jedoch eine separate DBUnit xml Datei/db Sicherung erstellen, um diese Daten in Fall zu laden, die Sie versehentlich verlieren.
  • Lassen Sie die JUnit Selen-Tests wählen, ob sie neu laden müssen. Einige Selenium-Tests werden keine Daten ändern, so dass es keinen Punkt gibt die Datenbank neu zu laden, nachdem sie ausgeführt werden. In jedem meiner Selentests überschreibe/implementiere ich eine Methode, um das gewünschte DBUnit-Verhalten zurückzugeben.

    @Override geschützt DBUnitRunConfig getDBUnitRunConfig() {

    return DBUnitRunConfig.RUN_ONCE_FOR_THIS_TEST_CASE; 
    

    }

(konnte sie nicht Schnipsel erhalten korrekt zu formatieren.) Wo DBUnitRunConfig ist:

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 
}; 

Dies reduziert die Zeit, die benötigt wird, um die Tests zu bestehen. Die Selenium-fähige Superklasse (oder Hilfsklasse) kann dann DBUnit für die gegebenen Tests ausführen oder nicht ausführen.