Ich habe die letzte Woche damit verbracht, Selen zu lernen und eine Reihe von Webtests für eine Website zu erstellen, die wir starten werden. Es war großartig zu lernen und ich habe einige Xpath- und CSS-Ortungstechniken gelernt.
Das Problem für mich ist jedoch, dass kleine Änderungen die Tests unterbrechen - jede Änderung an einem Div, einer ID oder einer Autoid-Nummer, mit deren Hilfe Widgets identifiziert werden können, unterbricht eine beliebige Anzahl von Tests - es scheint nur sehr spröde zu sein.
Haben Sie also Selentests (oder ähnliche Tests) geschrieben und wie gehen Sie mit der Sprödigkeit der Tests um (oder wie verhindern Sie, dass sie spröde werden), und für welche Art von Tests verwenden Sie Selen?
Antworten:
Der Zweck von Selenium besteht darin, UI-gesteuerte Integrationstests zu erstellen .
Integrationstests stellen sicher, dass alle Komponenten Ihres Systems bei gemeinsamer Bereitstellung ordnungsgemäß funktionieren. Integrationstests sind keine ausreichende Teststrategie und ergänzen andere Teststrategien mit einem anderen Schwerpunkt, z. B. Unit-Tests und Abnahmetests .
UI-gesteuerte Tests sind von Natur aus spröde, obwohl Selen und Watir gegenüber den Anfängen der Aufnahme- und Wiedergabetools einen Schritt weiter sind . Es gibt verschiedene Möglichkeiten, um mit diesem Problem umzugehen. Hier finden Sie eine Zusammenstellung von Ratschlägen einiger Experten von Weltklasse:
Versuchen Sie nicht, Ihre gesamte Testabdeckung aus dieser Art von Tests zu erhalten . Robert C. Martin argumentiert, dass Ihre Codeabdeckung durch Integrationstests etwa 20% betragen sollte . Es ist einfach unpraktisch, alle Ausführungspfade zu testen, wenn die Eingabe mehrere Anwendungsebenen entfernt ist.
Holen Sie sich den größten Teil der Testabdeckung aus Einheiten- und Abnahmetests . Suchen Sie in FinnNks Antwort nach Links zu den Artikeln von Gojko Adzic . Adzic argumentierte wiederholt über das Testen der Geschäftslogik durch Akzeptanztests und das Umgehen der Benutzeroberfläche.
Es müssen jedoch noch einige UI-gesteuerte Tests geschrieben werden . Hier benötigen Sie einige praktische Ratschläge zusätzlich zu "Testen Sie Ihre Geschäftslogik nicht über die Benutzeroberfläche". Ich würde Patrick Wilson-Welshs Blog als Ausgangspunkt empfehlen .
quelle
Das Wichtigste beim Erstellen solcher Tests, sobald Sie eine triviale Zahl überschritten haben, ist die Idee einer symmetrischen Änderung. Eine kleine Änderung des Codes sollte zu einer kleinen Änderung der Testsuite führen.
Angenommen, Sie erfassen in 100 Tests den Namen einer Person mit zwei Textfeldern. Wenn Sie diese Tests niavely schreiben (oder möglicherweise die Wiedergabe von Aufzeichnungen verwenden), müssen Sie 100 Tests ändern. Wenn Sie stattdessen einen Schritt zum Eingeben des Namens abstrahieren und diesen in Ihren Tests verwenden, anstatt Selen direkt zu verwenden, haben Sie nur einen Platz, um Ihre Änderung vorzunehmen. Es hängt von Ihrem Kontext ab, wie viele Abstraktionsebenen Sie verwenden. Die Verwendung der Abstraktion trägt jedoch wesentlich dazu bei, dass Ihre Tests wartbar sind.
Eine zweite wichtige Sache ist, sicherzustellen, dass Ihre Selektoren auf der Sache basieren, die am wichtigsten ist und sich am wenigsten ändert. Manchmal ist dies eine ID oder eine Klasse oder es kann sich um den Text in oder um ein Element handeln. Bevorzugen Sie immer den einfachsten Selektor (z. B. eine ID), aber manchmal müssen Sie etwas wie xpath verwenden, um dies zu erreichen.
Gojko Adzic hat in seinem Blog viele gute Ratschläge, wenn es um diese Art von Tests geht - lesen Sie seinen Todessinus und wie Sie ihn besonders vermeiden können .
quelle
Durch Testen wird sichergestellt, dass sich der Code wie erwartet verhält. Wenn Ihre Tests regelmäßig unterbrochen werden, testen die Tests entweder nicht das Richtige oder die Entwickler kümmern sich nicht um die Tests.
Persönlich denke ich, dass, wenn das Vorhandensein eines
<div>
Tags einen Test unterbricht, der Test unnötig streng von den umgebenden Tags abhängt und ein milderer Ansatz gewählt werden sollte.quelle