Und wieder in unserem Band "Tester Calendar" . Diesen Monat wird Marina Tretyakova, eine Testerin des Kontur- Projekts. Deliveries , über die Optimierung von Tests sprechen. Marina wird spezifische Probleme analysieren und lösen sowie beraten, wie sie ihre Tests optimieren und die Testzeit verkürzen kann.

Lassen Sie uns zunächst alle Tests durch den Automatisierungsgrad teilen, um jeden Typ genauer zu untersuchen.
Je nach Automatisierungsgrad werden die Tests unterteilt in:
- Zahm.
- Automatisiert.
- Automatisch (im Moment ohne menschliches Eingreifen - eher ein Mythos als eine Realität).
Der Ansatz zur Optimierung von Tests hängt direkt vom Automatisierungsgrad ab.
Optimierungen für alle Arten von Tests
Das Testen umfasst die folgenden Schritte:
- Vorbereitung des Testsystems
- Vorbereitung der Eingabedaten
- Testen (manuell oder automatisch, wir werden unten betrachten),
- Sammlung und Analyse der Ergebnisse.
Es wird angenommen, dass die manuelle Regression den Testern die meiste Zeit kostet. In den meisten Fällen ist dies jedoch nicht der Fall. Zumindest sollten Sie dies nicht sagen, bis das Problem gemessen und bewiesen ist.
Überlegen Sie sich Lösungen für häufig auftretende Probleme. Viele Tipps mögen Ihnen sehr offensichtlich erscheinen, aber wie die Erfahrung von Konferenzen und Reden von Kollegen anderer Unternehmen zeigt, sind diese Tipps immer noch relevant und haben ihre Anwendbarkeit und Nützlichkeit bewiesen.
Die Probleme:
1. Lange Vorbereitung des Testsystems
Fragen, die vor der Implementierung von Optimierungen wichtig sind:
- Lange was?
- Wer ist an dieser Schulung beteiligt (Tester, Programmierer ...)?
- Wie oft können Sie ein Testsystem während eines Arbeitstages vorbereiten? Entspricht diese Nummer den Testanforderungen?
- Was ist die längste Vorbereitungsphase und warum?
Um die Ursache für dieses Problem zu finden, ist es wichtig, die richtige Frage zu stellen.
Betrachten Sie die folgenden Beispiele:
Lange Zusammenstellung aller Systemmodule
Die richtige Frage ist : Müssen alle Module kompiliert werden?
Lösung : Kompilieren Sie nicht alle Systemmodule, sondern nur diejenigen, die von der Aufgabe betroffen waren und an der Version teilnehmen.
Der lange manuelle Prozess der Aktualisierung des gesamten Systems für verschiedene "virtuelle Maschinen" auf dem Prüfstand
Die richtige Frage lautet : Zu welchem Zeitpunkt im Update ist eine Beteiligung des Menschen erforderlich und zu welchem Zeitpunkt?
Lösung : Automatisieren Sie den Berechnungsprozess, verwenden Sie spezielle Bereitstellungs- und Service-Rolling-Tools oder debuggte Freigabemechanismen für den „Kampf“, verwenden Sie sie jedoch nur für die Bereitstellung für einen Test.
Der lange Prozess des "Verschüttens" des Quellcodes in "virtuelle Maschinen" auf einem Prüfstand zur weiteren Kompilierung und Weiterführung
Mögliches Problem : Netzwerkverbindung.
Die richtige Frage lautet : lange in Bezug auf was (Sammeln auf dem lokalen Computer, Sammeln im lokalen Netzwerk)?
Lösung : Der Prüfstand und der Ort, an dem sich die Quellen befinden, sollten sich im selben Netzwerk befinden, um die Netzwerkinteraktion zu minimieren.
Dieses Problem trat mir bei meiner Arbeit auf, als ich mich entschied, den Teststandort in Jekaterinburg nach Moskau zu verlegen. Bei dem Versuch, die Website zu „gestalten“, stellten wir schnell fest, dass die Aktualisierung des Standes nicht 15 Minuten, sondern fast 15 Minuten dauerte. Der Grund war, dass sich der Quellcode mit einer großen Anzahl kleiner Dateien in Jekaterinburg und der Stand in Moskau befand. Der Berechnungsprozess "beruhte" auf der Netzwerkübertragung kleiner Dateien zur weiteren Zusammenstellung und "Berechnung" auf dem Stand. Infolgedessen „ging“ der Code auch nach Moskau :)
2. Lange Sammlung und Analyse der Ergebnisse
Fragen, die vor der Implementierung von Optimierungen wichtig sind:
- Lange was?
- In welchen Phasen werden die Ergebnisse gesammelt und analysiert? Welche Etappe ist die längste und warum?
- Wer analysiert die Ergebnisse?
- Wer entscheidet auf welcher Basis über die Veröffentlichung? Wie lange dauert es, eine Entscheidung zu treffen?
Zum Beispiel :
Die Testergebnisse werden gemäß der Vorlage ausgegeben. Die Registrierung gemäß der Vorlage dauert während des Tests die meiste Zeit.
Lösung (danke, Cap!) : Weigern Sie sich, die Ergebnisse der Vorlage einzugeben, oder erstellen Sie eine einfachere Vorlage zum Ausfüllen. Es wird notwendig sein, eine Einigung mit dem Team zu erzielen und von denen herauszufinden, die diese Ergebnisse lesen (und lesen sie sie?). Gibt es wirklich eine Notwendigkeit für eine solche Vorlage (das Risiko besteht darin, Testergebnisse „auf den Tisch“ zu schreiben).
Optimierungen für manuelle Tests
Diese Tests können in zwei große Klassen unterteilt werden:
- regelmäßig durchgeführt, zum Beispiel vor der Veröffentlichung (Regressionstests berücksichtigen),
- selten und nur durchgeführt, um neue Funktionen zu testen.
Wenn die Regression häufig und manuell erfolgt, ist es sinnvoll, über die Automatisierung und die Amortisation der Automatisierung nachzudenken. In diesem Artikel wird jedoch der Automatisierungs-ROI nicht berücksichtigt.
Bei manuellen Tests (keine Regression) sollte man nicht über Testautomatisierung sprechen, sondern über instrumentelle Testunterstützung (wie Alexei Barantsev bei der Schulung in unserem Unternehmen empfohlen hat). In diesem Fall dienen Autotests als Werkzeug. In diesem Zusammenhang werden sich die Logik und die Ansicht von Autotests im Allgemeinen ändern.
Für manuelle Tests müssen Sie zunächst nach Routineaufgaben suchen (Aufgaben, keine Tests!) Und diese bereits optimieren (mithilfe von Automatisierung oder Umverteilung der Humanressourcen).
Beispielsweise besteht die Routine für Tests darin, Testdaten vorzubereiten. Es gibt verschiedene Möglichkeiten, um genau diese Vorbereitung durchzuführen:
- manuell über die Benutzeroberfläche,
- manuell über die API,
- Wenn Sie Autotests ausführen, sind die Daten ein Nebeneffekt dieser Tests.
- Automatisiert durch Skripte / Dienstprogramme / benutzerdefinierte Tools über API oder Benutzeroberfläche.
Wenn Sie nie darüber nachgedacht haben, wie viel Zeit Sie benötigen, um die Testdaten manuell vorzubereiten, ist es vielleicht an der Zeit, sie zu messen? Und es stellt sich heraus, dass es viel effizienter ist, mindestens den zweiten und vorzugsweise den dritten und vierten Ansatz zu verwenden.
Optimierungen für automatisierte Tests
Das Problem der Vorbereitung von Testdaten ist hier akuter als bei manuellen Tests. Die Vorbereitung der Testdaten sollte sein:
- schnell
- Beständig gegen Design- / Layoutänderungen,
- beständig gegen mögliche parallele Testläufe,
- Beständig gegen Änderungen in der internen Architektur des Systems.
Es ist wünschenswert, dass die Aufbereitung der Daten keine zusätzlichen Fähigkeiten und Zeit für die Implementierung der Lösung erfordert.
Testdaten können automatisch aufbereitet werden:
- über die Benutzeroberfläche,
- über API- oder HTTP-Anfragen,
- durch Datenbankabfragen.
Betrachten Sie die Vor- und Nachteile dieser Ansätze in der Tabelle genauer:

Die Aufbereitung von Testdaten über API- oder HTTP-Anfragen für eine Kombination von Vor- und Nachteilen ist am optimalsten.
Es gibt eine Reihe der häufigsten Optimierungen, die für automatisierte Tests gelten:
Parallelität testen
Wenn eines der Probleme der Tests genau der Zeitpunkt ihres Durchlaufs ist, obwohl Rechenressourcen vorhanden sind, können Sie diese in einem von drei parallelen Modi parallelisieren und ausführen:
- Parallelität auf einem Computer, Parallelität auf Prozessorthreads.
- Parallelität auf verschiedenen Computern.
- Die Kombination der ersten und zweiten Methode, dh wenn mehrere Computermaschinen vorhanden sind, werden die Tests parallel entlang der Flüsse auf jeder Maschine und parallel zwischen allen Maschinen durchgeführt.
Alte Tests entfernen
Wenn die Tests geschrieben sind, bestehen sie, aber sie verifizieren nichts wirklich (zum Beispiel gab es früher Geschäftslogik, jetzt existiert sie nicht mehr und die Tests prüfen im Wesentlichen nichts), dann müssen solche Tests rücksichtslos gelöscht werden, da sie tatsächlich keine Bedeutung haben , unnötige Zeit vom Lauf wegnehmen. Es lohnt sich auch, die Tests zu entfernen, das Ergebnis des Bestehens, das die Entscheidung über die Möglichkeit der Freigabe nicht beeinflusst.
Verwenden von Testdesign-Techniken zur Optimierung von Testfall-Sets
Für manuelle Tests zur Optimierung von Testfallsätzen müssen verschiedene Testdesign-Techniken angewendet werden. Bei Autotests sollten auch Methoden zur Aufteilung in Äquivalenzklassen, paarweise, Grenzanalyse und viele andere Techniken verwendet werden, um den Satz von Autotests zu optimieren.
Übertragen vorhandener Tests und Überprüfungen auf eine andere Ebene
Beispielsweise gibt es einen Browsertest, der die Suchleiste öffnet, "Apfel", "Äpfel", "Apfel", "Äpfel" (usw.) eingibt und nach Abschluss der Suche eine Benachrichtigung über den Kauf von Äpfeln im Geschäft erhält (Test) schaut auf die Tatsache, dass die Benachrichtigung angezeigt wird und nicht mehr). Daher überprüft ein langer UI-Test nicht im Wesentlichen die UI, sondern die Logik, die ein Unit-Test testen kann. Daher sollte dieser Test gelöscht und stattdessen ein Unit-Test geschrieben werden.
Korrekte Zerlegung von Tests auf den Ebenen „Modular - Integration - System“
Ich werde ein Beispiel geben. Es gibt ein manuelles Szenario: Wählen Sie das Produkt im Online-Shop aus, legen Sie es in den Warenkorb und fahren Sie mit der Kaufabwicklung fort. Was kann getan werden (und es wird falsch sein): Erstellen Sie genau einen Test, der nach dem Produkt sucht, legen Sie es in den Warenkorb und fahren Sie mit dem Design fort.
In diesem Fall ist es richtig, den Test zunächst in drei Unterszenarien zu unterteilen: Auswahl eines Produkts, Hinzufügen eines Produkts zum Warenkorb und Bestellung. Wir werden jedes Szenario in mehr Atomprüfungen unterteilen.
Zum Beispiel: „Eröffnung eines Geschäfts - Anzeige verschiedener Warengruppen zur Auswahl“ - ein Test; Ein weiterer Test ist die Auswahl einer Kategorie aus verschiedenen Produktkategorien. Wir untersuchen jeden Test genauer und bestimmen, welche Teststufe dafür erforderlich ist. Das vorherige Beispiel zeigt, welche Art von Tests es besser ist, sofort als Komponententests zu entwerfen.
Ein beliebtes Verbindungsschema der getesteten und testenden Systeme zum automatisierten Testen von Webanwendungen:
Um das automatisierte Testen einer Webanwendung zu optimieren, ist es ratsam, die Optimierung jeder Interaktion in dem beschriebenen Schema zu berücksichtigen.

Erwägen Sie der Einfachheit halber die Optimierung einiger Interaktionen:
1) Interaktion "Testfälle - Browser - Datenbank"
Verwenden der API nicht nur zum Vorbereiten von Daten für den Test, sondern auch zum Ausführen einer Reihe von Testschritten.
Wenn das Ziel beispielsweise darin besteht, die Benutzeroberfläche am Ende einer langen Kette von Aktionen zu überprüfen, müssen nicht alle Aktionen über die Benutzeroberfläche ausgeführt werden. Wenn in der Mitte der Kette in der Benutzeroberfläche etwas kaputt gegangen ist, erreicht der Test schließlich nie das Ende und die Zielprüfung. Der Tester wird raten, und wenn sie dieses kaputte Glied in der Kette reparieren, dann alles, was danach funktioniert? Wenn in diesem Fall in der gesamten Kette zusätzlich zur letzten Aktion eine API verwendet wird, weiß der Tester bei einer Aufschlüsselung der Benutzeroberfläche eines Links, ob das System wie beabsichtigt funktioniert, wenn die Entwickler das defekte Link reparieren.
2) Interaktion "Testfälle - SeleniumWebDriver - Browser".
- Schließen zusätzlicher Registerkarten nach Abschluss des Tests, anstatt den Browser zu schließen.
Bei meinem Projekt hat diese Optimierung dazu beigetragen, 10 Minuten beim Ausführen von UI-Tests einzusparen (statt 1 Stunde und 10 Minuten begannen die Tests innerhalb von 1 Stunde zu bestehen). Diese Optimierung hängt mit der Logik von SeleniumWebDriver zusammen, die für das Projekt verwendet wird. Das Öffnen eines Browsers ist sehr lange vorbereitet, das Schließen von Registerkarten erfolgt jedoch fast sofort. - Optimierung des Anwendungscaches des zu testenden Systems, damit die Tests schneller bestehen.
- Verwenden von Headless-Browsern, damit das Rendern von Webseitenelementen keine Kosten verursacht.
Abschließend
Für jede Optimierung müssen Sie die aktuellen Probleme im Testprozess klar identifizieren, die Punkte, in denen sie sich befinden, erweitern und mögliche Optionen (besser mehrere!) Darstellen, um sie zu lösen. Danach ist es erforderlich, sie in einem Team zu äußern, ihre Ideen und Lösungsvorschläge zu „verkaufen“ und erst nach allgemeiner Genehmigung die Anstrengungen zu verteilen und die Aufgaben zu lösen. Eine vorläufige Bewertung von „Vorher“ und eine Bewertung von „Nachher“ helfen dabei, alle Vorteile aus der Optimierung von Prozessen zu berücksichtigen.
Und noch einmal möchte ich wiederholen: Suchen Sie nicht nach Routinetests, suchen Sie nach Routineaufgaben und automatisieren Sie sie!
Liste der Kalenderartikel:
Versuchen Sie einen anderen Ansatz
Angemessene Paartests
Feedback: wie es passiert
Tests optimieren
Lies ein Buch
Analytics-Tests
Der Tester muss den Fehler erkennen, Caner lesen und den Umzug organisieren.
Dienst laden
QA-Service-Metriken
Testen Sie die Sicherheit
Lernen Sie Ihren Kunden kennen
Rückstand nehmen