Система управления производством
Система управления производством
Produktionsmanagementsystem
Produktionsmanagementsystem

Wer sind wir?

Wie Sie nach dem Titel des Beitrags leicht erraten können, waren wir Auszubildende in Syneo. Zu unseren Aufgaben zählten das Schreiben automatischer Tests für die Webanwendung. Jeden Tag studieren wir an der Universität für Technologie und Lebenswissenschaften in Bydgoszcz auf dem Gebiet der angewandten IT.

Womit haben wir Tests erstellt?

  • Sprache: C #,
  • IDE: Visual Studio 2015,
  • Framework testing: NUnit 3.4.1,
  • Browserservice-Tool: Selenium Web Driver,
  • Browser: Mozilla Firefox (früher Google Chrome),
  • Versionskontrollsystem: Git + Visual Studio Team Services

Worüber werden wir schreiben?

Wir möchten Ihnen einige unserer Erkenntnisse zum automatischen Testen aus Sicht eines unerfahrenen Programmierers vorstellen und die Vor- und Nachteile der Werkzeuge beschreiben, mit denen wir sie geschrieben haben. Wir werden auch versuchen zu ermitteln, ob automatisierte Tests für das Projekt, für das sie geschrieben werden, einen großen Wert haben. Wir laden Sie zum Lesen ein.

Ein paar Tipps für Anfänger

Die automatischen Tests waren für uns eine absolute Neuheit, wir lernten während des Schreibens regelmäßig. Natürlich sind wir während dieses Prozesses auf einige Probleme gestoßen, deren Lösung oft nicht so offensichtlich war. Deshalb möchten wir Ihnen einige Tipps für Menschen geben, die dieses Thema noch nie zuvor gesehen haben.

  1. Überprüfen Sie die Anwendung

Vielleicht ist dies eine triviale Aussage, die für viele offensichtlich erscheint. Bevor Sie jedoch mit dem Schreiben von Tests beginnen, sollten Sie sich ein paar Stunden damit beschäftigen, sich mit der Anwendung vertraut zu machen. Testen Sie es manuell. Wenn wir die Mechanismen kennen, nach denen sich das zu testende Programm richtet, werden wir das Schreiben automatisierter Tests erheblich beschleunigen und vereinfachen.

Aufräumen nach dir

Stellen Sie sich ein Beispielszenario vor:

  • logging an den Administrator,
  • Einrichten eines neuen Benutzers
  • Testen der Edition.

Was fehlt hier?

Lassen Sie uns diesen Test jetzt 150 Mal durchführen.
Ja, Tester müssen (!) Sich selbst reinigen. Das Beispiel des Benutzers ist ziemlich unschuldig, aber in der Anwendung haben wir oft die Möglichkeit, Bilder oder Videos hinzuzufügen. Wir haben persönlich den kritischen Punkt erreicht, an dem der Server bei unseren Tests fast ein paar Dutzend GB hatte.

Erstellen Sie Tests, die „denken“

Wenn Sie vorab davon ausgehen, dass bestimmte Elemente in der Anwendung vorhanden sind, wenn die Tests ausgeführt werden, ist dies eine gute Lösung. Aber nur am Anfang, wenn wir mehr daran interessiert sind, eine bestimmte Funktionalität zu testen, als an der Intelligenz unserer Skripte. Sollten wir es jedoch in dieser Form belassen?

Nehmen wir an, dass das Konto des Testbenutzers erforderlich ist. Sollte dies der Fall sein, werden wir den Fehler der Tests, in denen wir uns in dieses Konto einloggen, zurückgeben. Das einzige, was wir tun können, ist zu fragen, ob es der Fehler ist, keinen Account zu haben, oder vielleicht ist ein Fehler in der Anwendung aufgetreten. Die richtige Antwort wird erst angezeigt, wenn Sie den Benutzer registriert und die Tests erneut eingeschaltet haben. Wo ist das problem

Wir müssen die Anwendung selbst handhaben, ein Benutzerkonto manuell erstellen und die Testskripts erneut ausführen. Immerhin handelt es sich um automatische Tests, die sie für uns tun sollten. Eigentlich sind sie dafür geschaffen. Es ist in unserem Interesse, Tests zu entwickeln, die auf solche Situationen reagieren können.

In unserem Antrag mussten zwei Kriterien erfüllt sein, damit der Benutzer korrekt angemeldet werden konnte: Es musste ein angemessenes Budget eingerichtet und ein Konto vorhanden sein, für das wir uns anmelden möchten. Ein Beispiel für eine Hilfsmethode, die selbst auf das Fehlen eines angemessenen Budgets und das Fehlen eines Testbenutzers reagiert hat, ist in der Abbildung unten zu sehen.

 

blog1

 

 

 

 

 

 

 

 

 

 

 

 

 

Bewegen Sie den Cursor

Bei der Arbeit mit Selenium sind wir auf ein Problem gestoßen, dessen Lösung viel Zeit in Anspruch nahm. Bei einem Test klickte dieses Tool nämlich nicht immer an der Stelle, auf die wir gezeigt haben. Der Code selbst wurde ein gutes Dutzend Mal auf die Überarbeitung überprüft, ganz zu schweigen davon.

Es stellte sich heraus, dass der Mauszeiger der Täter ist. Wenn es sich im Browserfenster befand, wurde der Test unterbrochen. Selen verhält sich wie wir, bevor es auf einen Gegenstand wirkt. Es findet ein Element, so wie ein Mensch es mit einer Maus „eindringt“, was beispielsweise durch Ändern des Stils einer Schaltfläche beobachtet werden kann. Daher konnte Selenium nicht auf dieses Element klicken, wenn sich unser Cursor im Browserfenster befand.

Um dieses Problem zu lösen, mussten wir die Cursor-Klasse aus dem System.Windows.Forms-Bereich verwenden. Bei jedem Start des Browsers wurde der Mauszeiger an den oberen Rand des Bildschirms verschoben, wo ihn niemand stören konnte.

Ein Beispiel für den Code, mit dem der Mauszeiger bewegt wird, finden Sie in der Abbildung unten.

blog2

 

 

 

 

 

 

Sie müssen nicht immer Dateien herunterladen

In vielen Anwendungen können Dateien auf die Festplatte heruntergeladen werden. Dies können Bilder, Filme, Musik und dergleichen sein. Wenn Sie jedoch Tests schreiben, die die Möglichkeit des Herunterladens einer bestimmten Datei prüfen, müssen Sie sie jedes Mal auf die Festplatte herunterladen.

Es hängt davon ab, ob wir Aktionen ausführen möchten, sobald es sich auf unserem Computer befindet. Wenn wir es dann tun, müssen wir es unbedingt herunterladen. Wenn wir nur die Möglichkeit testen möchten, eine Datei herunterzuladen, können Sie dies tun, ohne die Datei physisch auf die Festplatte herunterzuladen.

Durchsuchen Sie dazu die Site nach dem Link zu der Datei, die Sie herunterladen möchten, senden Sie eine HTTP-Abfrage an die Site und lesen Sie den Code, den Sie als Antwort erhalten. Wenn es 200 ist (OK), bedeutet das, dass die Datei heruntergeladen werden kann. Wenn Sie zum Herunterladen der Datei eine aktive Benutzersitzung benötigen, müssen Sie eine „Cookie“ – oder „Token“ -Sitzung zeichnen und eine HTTP-Abfrage damit durchführen.

Beispielcode zum Überprüfen, ob Dateien in der folgenden Liste heruntergeladen werden können.

blog3

 

 

 

 

 

 

 

 

 

Einführung in … Seitenobjektmuster

Tests sind an sich eine Anwendung. Ein Code, der scheinbar unabhängig vom getesteten Programm ist. Anscheinend muss auch jede Änderung der getesteten Anwendung in die Tests einbezogen werden. Wie sieht es aus? Schauen wir uns ein Stück Code an.

blog4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Aber wo sind Tests in diesem Code? Schließlich können Sie auf einen Blick erkennen, dass diese Klasse nur zum Suchen von Elementen auf der Seite verwendet wird und eine Methode zum Anmelden beim Administratorkonto darstellt.

Dies ist, was im Titel des Page Object Pattern erwähnt wird. Mit diesem Muster können Sie den Code, der für die Suche nach HTML-Elementen auf der Seite und für die Interaktion mit diesen verantwortlich ist, von dem Code trennen, dessen Aufgabe darin besteht, die Anwendung zu testen. Betrachten wir nun den Testcode, der die AdminLoginPage-Klasse verwendet.

 

blog5

 

 

 

 

 

 

 

Sie können der Tatsache nicht widersprechen, dass Sie mit diesem Muster wirklich lesbare Tests erstellen können. Was sind die Vorteile?

Zu Beginn des Kapitels haben wir erwähnt, dass jede Änderung in der Anwendung sich in den Tests widerspiegeln muss. Stellen Sie sich jetzt vor, dass wir das Page Object Pattern nicht verwenden.

  • In jedem Test, der ein bestimmtes Element verwendet, müssen wir auf der Seite danach suchen.
  • Die Elemente können auf jeder Seite bis zu einem Dutzend sein.
  • Nehmen wir an, der Entwickler der Anwendung hat die Klasse oder ID mehrerer Elemente geändert.

Bei komplexeren Projekten, bei denen wir arbeiten konnten, können wir uns nicht vorstellen, ohne ein beschriebenes Muster zu arbeiten. Es hat uns sehr leicht gemacht, Korrekturen für Tests einzuführen, die aufgrund von Änderungen in der Anwendung nicht mehr funktionieren. Der damit erzeugte Code ist viel klarer geworden. Bei kleineren Projekten muss jedoch berücksichtigt werden, ob es sich lohnt, zusätzliche Zeit für die Implementierung zu investieren.

Firefox vs Chrome

Zu Beginn des Beitrags haben wir erwähnt, dass wir beide im Titel aufgeführten Browser verwendet haben. Am Ende mussten wir Firefox verwenden, aber wenn die Entscheidung zu uns gehörte, würden wir bei Chromie bleiben.

Mozilla ist langsamer. Als wir unsere Tests mit dem Google-Browser starteten, betrug die Zeit, in der sie durchgeführt wurden, etwa 11-13 Minuten. Nach dem Wechseln des Browsers ca. 20-23 Minuten. Also hat es sich verdoppelt.

Zum Zeitpunkt des Tests können Sie ein Auge zudrücken, wenn der Browser dem Tester freundlicher wäre. Leider nicht. Chrome hat jedes Mal gewartet, bis die Seite vollständig geladen ist, und nur dann wurden Aktionen ausgeführt. Leider kann das nicht über Mozilla gesagt werden. Dies führte dazu, dass wir WebDriverWait nach jedem Neuladen der Seite zu den Testszenarien hinzufügen mussten. Erzwingen Sie einfach, dass der Browser wartet, bis die Seite vollständig geladen ist. Andernfalls wurden die im Test enthaltenen Aktionen an nicht vorhandenen Elementen durchgeführt, was dazu führte, dass die Hälfte der Tests fehlgeschlagen ist, die Chromie einwandfrei bestanden haben.

Die Aktion „Ziehen und Ablegen“ ist eine der Funktionen von Selenium. Wir haben es in mehreren Tests unter dem Google-Browser verwendet und es hat gut funktioniert. Nach der Umstellung auf Firefox funktionierten diese Tests plötzlich nicht mehr. Es stellte sich heraus, dass die einzige Möglichkeit, diese Funktionalität unter Mozilla zu testen, die Verwendung von JavaScript ist.

Das einzige, was sich für den Mozilla-Browser aussprach, ist der integrierte WebDriver, der mit dem Browser aktualisiert wurde. Auf diese Weise können Sie Probleme (die möglicherweise nie vorkommen) im Zusammenhang mit der Tatsache vermeiden, dass der ältere WebDriver in einem neueren Browser verwendet wird.

Es sei nur daran erinnert, dass Browser und ihre Unterstützung für Selenium sich recht dynamisch ändern. Wenn Sie diesen Text lesen, kann es sich herausstellen, dass Selenium am besten von einem völlig anderen Browser unterstützt wird. Derzeit ist dies jedoch Chrome.

Lohnt es sich, automatische Tests zu schreiben?

Dies ist eine sehr schwierige Frage, die leider keine einfache und eindeutige Antwort hat. Allgemein gesagt: „es kommt darauf an.“

Aus unserer Sicht als Lehrlinge lohnt es sich. Das Schreiben von Tests ist eine interessante Erfahrung, die definitiv Programmierkenntnisse entwickelt und Ihnen ermöglicht, an einem echten Projekt zu arbeiten. Gleichzeitig arbeiten wir mit anderen Personen zusammen, die für die Bewerbung verantwortlich sind. Andererseits spiegeln unsere Wissens- und Fertigkeitsdefizite das Projekt nicht so sehr wider wie das Arbeiten mit dem Quellcode des entsprechenden Programms.

Automatisierte Tests haben jedoch ihre Schattenseiten. Um sie zu schaffen, müssen Sie zunächst Personen anweisen, die sich damals mit der Entwicklung oder Erstellung eines Produkts für den Kunden beschäftigen könnten (es sei denn, wir können uns Menschen leisten, die nur Tests durchführen würden). Dies ist jedoch nicht das Ende. Einmal geschriebene Tests können Sie sich leider nach dem Erstellen nicht mehr verlassen. Sie müssen sie weiterhin unterstützen, während sich die App entwickelt. Deshalb haben wir gleich zwei Produkte entwickelt, die gleichzeitig entwickelt wurden.

Wir wissen bereits, dass Tests zusammen mit der Entwicklung der Anwendung ständig verbessert werden müssen, was manchmal zusätzlichen Zeit- und Kostenaufwand erfordert. Es wäre jedoch ungerecht, es zu beenden.

Der Wert des Testerstellungsprozesses selbst sollte berücksichtigt werden. Während unserer Praxis mit dem Programmierer, der für die Entwicklung der richtigen Anwendung verantwortlich war, saßen wir „in den Rücken“, so dass wir ihn zum Zeitpunkt der Erstellung des Testszenarios über Fehler auf der Website informieren konnten.

Insgesamt haben wir alle unbezahlten Tests über 90 geschrieben. Jeder prüft eine andere Funktionalität der Website. Wie lange hat der richtige Test gedauert?

blog6

 

 

 

 

 

 

 

Es dauerte insgesamt etwa 21 Minuten. Mit der Geschwindigkeit des Computers, der nicht auf der Seite nach dem Element suchen muss, oder bewegen Sie den Cursor, um darauf zu klicken. Er muss auch nicht darauf achten, falsche Daten einzugeben, da wir als Testentwickler auf eine solche Eventualität gerechnet haben.

Bitte stellen Sie sich vor, wie viel ein oder zwei Personen nötig wären. Es sollte hinzugefügt werden, dass die Tests in etwa 2,5 Wochen von uns abgeschlossen wurden. Es kann daher davon ausgegangen werden, dass dies eine schnelle und genaue Möglichkeit ist, die Richtigkeit des Produkts zu überprüfen.

Was würden wir ändern, wenn wir zum zweiten Mal Tests schreiben?

Betrachten wir es aus der Zeit (Post schreiben wir über einen Monat nach dem Erstellen von Tests), würden wir wirklich wenig ändern. Wir glauben, dass der Code, den wir schreiben, lesbar ist und dass es keine Probleme mit der Wartung geben sollte. Natürlich werden die Tests zusammen mit den in der Anwendung eingeführten Neuerungen regelmäßig aktualisiert. Andernfalls ist selbst der bestgeschriebene Code schwer zu verstehen.

Die Änderungen, die wir im Moment einführen würden, betreffen eher eine größere Reihenfolge des Projekts und umfassen Erweiterungsmethoden, die eine natürlichere Prüfung der Testergebnisse ermöglichen.

Um die erste der oben genannten Annahmen zu erreichen, würden wir eine Aufschlüsselung der grundlegenden Tests einführen, bei denen nur die Gesamtreaktion des Standorts getestet wird. Zum Beispiel, ob der Link an den richtigen Ort weiterleitet oder ob das Senden eines Formulars zu einer Meldung über (keinen) Erfolg führt. Und für diejenigen, die den logischen Aspekt testen oder welche Ergebnisse durch bestimmte Aktionen ausgelöst werden sollen, zum Beispiel, wenn das Entfernen eines Benutzers zu einer Änderung der Anzahl der auf der entsprechenden Registerkarte angezeigten Benutzer und dergleichen führt.

Die Erweiterungsmethoden, die wir erwähnt haben, werden als fließende Assertionen bezeichnet. Wir haben darüber gesprochen, dass sie eine natürlichere Prüfung der Testergebnisse ermöglichen. Vielleicht sind sie für Unit- / Integrationstests nützlicher, bei denen die Ergebnisse komplizierter sein können als bei den automatischen Tests. Dennoch empfehlen wir Ihnen, sich mit ihnen vertraut zu machen. Sie sind viel intuitiver und klarer als die in NUnit integrierten. Nachfolgend ein einfaches Beispiel, das das Ergebnis eines Komponententests mit seiner Verwendung überprüft.

 

blog7

 

 

 

 

Aufsummierung

Wir hoffen, dass unser Posting kleinen Leuten geholfen hat, die wie wir noch nie mit automatisierten Tests in Kontakt gekommen sind. Wenn wir diese Art von Post am Anfang finden, würde uns das sicherlich viel Zeit sparen. Gleichzeitig entschuldigen wir uns bei allen, die sich mit diesem Thema auskennen, für all die Fehler, die wir leider nicht auf unserer Ebene sehen.

Wir haben versucht, unsere (bescheidenen) Erfahrungen bestmöglich weiterzugeben. Dies ist jedoch unser erster veröffentlichter Text und wir sind uns dessen bewusst, dass er möglicherweise nicht perfekt ist. Wir laden Sie daher ein, unseren Eintrag (sowohl inhaltlich als auch in Bezug auf die Verwendung der Muttersprache) zu prüfen und die Ergebnisse in den Kommentaren zu teilen. Vielleicht finden Sie einen Fehler, den wir korrigieren müssen?🙂

Haben Sie noch Fragen?
Haben Sie noch Fragen?

Ein Team von OptiMES-Spezialisten verfügt bereits über mehr als 14 Jahre Erfahrung in der Implementierung von IT-Lösungen in produzierenden Unternehmen.

Wenn Sie Fragen haben, schreiben Sie uns! Wir sind telefonisch erreichbar
0048 535 455 855 und E-Mail-Adresse biuro@syneo.pl.

Probieren Sie OptiMES aus durch
14 Tage kostenlos und sparen Sie als Hunderte unserer zufriedenen Kunden an der Produktion.
Überprüft den Namen
Der Name ist frei
Ihre E-Mail-Adresse hat bereits eine Testanwendung
Geben Sie die richtige E-Mail-Adresse ein
Der Name muss mindestens 4 Zeichen lang sein
Überprüft den Namen
Der Name ist frei
Der Name ist beschäftigt
Der Name muss mindestens 4 Zeichen lang sein
Bitte geben Sie einen gültigen Anwendungsnamen ein. Nur Buchstaben und Zahlen

Letzte Einträge

Probieren Sie OptiMES aus za kostenlos!

14 Tage unverbindlich! Eine Kreditkarte ist nicht erforderlich.