app9bergamo.com

  

Beste Artikel:

  
Main / So automatisieren Sie das Testen mit den meisten Protokollen

So automatisieren Sie das Testen mit den meisten Protokollen

Die "Testpyramide" ist eine Metapher, die uns sagt, dass wir Softwaretests in Buckets unterschiedlicher Granularität gruppieren sollen. Es gibt auch eine Vorstellung davon, wie viele Tests wir in jeder dieser Gruppen haben sollten. Obwohl es das Konzept der Testpyramide schon seit einiger Zeit gibt, bemühen sich die Teams immer noch, es richtig in die Praxis umzusetzen.

Dieser Artikel greift das ursprüngliche Konzept der Testpyramide auf und zeigt, wie Sie dies in die Praxis umsetzen können. Es zeigt, nach welchen Arten von Tests Sie in den verschiedenen Ebenen der Pyramide suchen sollten, und gibt praktische Beispiele, wie diese implementiert werden können.

Ham ist Softwareentwickler und Berater bei ThoughtWorks in Deutschland. Sie haben es satt, Software um 3 Uhr morgens manuell bereitzustellen. Er gleicht die Zeit aus, die er damit verdient hat, Menschen mit seinen Possen zu ärgern. Produktionsbereite Software muss getestet werden, bevor sie in Produktion geht.

Mit der Reifung der Disziplin der Softwareentwicklung sind auch die Ansätze für Softwaretests gereift. Anstatt unzählige manuelle Softwaretester zu haben, haben Entwicklungsteams den größten Teil ihrer Testbemühungen automatisiert. Durch die Automatisierung ihrer Tests können Teams innerhalb von Sekunden und Minuten anstelle von Tagen und Wochen feststellen, ob ihre Software defekt ist.

Die drastisch verkürzte Rückkopplungsschleife, die durch automatisierte Tests angetrieben wird, geht Hand in Hand mit agilen Entwicklungspraktiken, kontinuierlicher Bereitstellung und DevOps-Kultur. Ein effektiver Ansatz für Softwaretests ermöglicht es Teams, sich schnell und sicher zu bewegen.

In diesem Artikel wird untersucht, wie ein abgerundetes Testportfolio aussehen sollte, um reaktionsschnell, zuverlässig und wartbar zu sein - unabhängig davon, ob Sie eine Microservices-Architektur, mobile Apps oder IoT-Ökosysteme erstellen.

Wir werden uns auch mit den Details der Erstellung effektiver und lesbarer automatisierter Tests befassen. Software ist zu einem wesentlichen Bestandteil der Welt geworden, in der wir leben. Sie ist ihrem frühen alleinigen Ziel, Unternehmen effizienter zu machen, entwachsen. Unternehmen versuchen heute, Wege zu finden, um erstklassige digitale Unternehmen zu werden.

Als Benutzer interagiert jeder von uns jeden Tag mit immer mehr Software. Die Räder der Innovation drehen sich schneller. Wenn Sie Schritt halten möchten, müssen Sie nach Möglichkeiten suchen, Ihre Software schneller bereitzustellen, ohne die Qualität zu beeinträchtigen. Die kontinuierliche Bereitstellung, bei der Sie automatisch sicherstellen, dass Ihre Software jederzeit in die Produktion freigegeben werden kann, kann Ihnen dabei helfen.

Bei kontinuierlicher Bereitstellung verwenden Sie eine Build-Pipeline, um Ihre Software automatisch zu testen und in Ihren Test- und Produktionsumgebungen bereitzustellen. Das manuelle Erstellen, Testen und Bereitstellen einer immer größeren Menge von Software wird bald unmöglich - es sei denn, Sie möchten Ihre ganze Zeit mit manueller, sich wiederholender Arbeit verbringen, anstatt funktionierende Software bereitzustellen. Alles zu automatisieren - vom Build über Tests bis hin zur Bereitstellung und Infrastruktur - ist Ihr einziger Weg nach vorne. Abbildung 1: Verwenden Sie Build-Pipelines, um Ihre Software automatisch und zuverlässig in die Produktion zu bringen.

Traditionell bestand das Testen von Software aus übermäßig manueller Arbeit, indem Ihre Anwendung in einer Testumgebung bereitgestellt und anschließend einige Black-Box-Tests durchgeführt wurden. E. Oft werden diese Tests durch Testskripte spezifiziert, um sicherzustellen, dass die Tester eine konsistente Prüfung durchführen. Es ist offensichtlich, dass das manuelle Testen aller Änderungen zeitaufwändig, sich wiederholend und langwierig ist. Repetitive ist langweilig, langweilig führt zu Fehlern und lässt Sie bis Ende der Woche nach einem anderen Job suchen.

Die Automatisierung Ihrer sich wiederholenden Tests kann Ihr Leben als Softwareentwickler entscheidend verändern. Automatisieren Sie diese Tests und Sie müssen nicht mehr gedankenlos den Klickprotokollen folgen, um zu überprüfen, ob Ihre Software noch ordnungsgemäß funktioniert.

Automatisieren Sie Ihre Tests und Sie können Ihre Codebasis ändern, ohne ein Auge zu schlagen. Wenn Sie jemals versucht haben, ein umfangreiches Refactoring ohne eine geeignete Testsuite durchzuführen, wissen Sie bestimmt, was für eine schreckliche Erfahrung dies sein kann.

Wie würden Sie wissen, wenn Sie versehentlich Sachen auf dem Weg kaputt gemacht haben? Nun, Sie klicken sich durch alle Ihre manuellen Testfälle, so geht das. Aber seien wir ehrlich: Wie wäre es, wenn Sie selbst große Änderungen vornehmen und wissen, ob Sie innerhalb von Sekunden etwas kaputt gemacht haben, während Sie einen guten Schluck Kaffee getrunken haben?

Klingt angenehmer, wenn Sie mich fragen. Wenn Sie sich ernsthaft mit automatisierten Tests für Ihre Software befassen möchten, sollten Sie ein Schlüsselkonzept kennen: Mike Cohn hat dieses Konzept in seinem Buch Succeeding with Agile vorgestellt. Es ist eine großartige visuelle Metapher, die Ihnen sagt, dass Sie über verschiedene Testebenen nachdenken sollen. Außerdem erfahren Sie, wie viele Tests auf jeder Ebene durchgeführt werden müssen. Abbildung 2: Die Testpyramide.

Die ursprüngliche Testpyramide von Mike Cohn besteht aus drei Schichten, aus denen Ihre Testsuite von unten nach oben bestehen sollte: Leider fällt das Konzept der Testpyramide bei näherer Betrachtung etwas zu kurz. Einige argumentieren, dass entweder die Benennung oder einige konzeptionelle Aspekte der Testpyramide von Mike Cohn nicht ideal sind, und ich muss zustimmen. Aus heutiger Sicht erscheint die Testpyramide zu simpel und kann daher irreführend sein.

Aufgrund seiner Einfachheit ist die Essenz der Testpyramide eine gute Faustregel, wenn es darum geht, eine eigene Testsuite zu erstellen.

Am besten erinnern Sie sich an zwei Dinge aus Cohns ursprünglicher Testpyramide: Halten Sie sich an die Pyramidenform, um eine gesunde, schnelle und wartbare Testsuite zu erhalten: Schreiben Sie viele kleine und schnelle Komponententests. Schreiben Sie einige grobkörnigere Tests und nur sehr wenige Tests auf hoher Ebene, die Ihre Anwendung von Ende zu Ende testen.

Achten Sie darauf, dass Sie nicht mit einer Test-Eistüte enden, deren Pflege ein Albtraum ist und deren Ausführung viel zu lange dauert. Lassen Sie sich nicht zu sehr auf die Namen der einzelnen Ebenen in Cohns Testpyramide ein. Tatsächlich können sie ziemlich irreführend sein: In den Tagen von Single-Page-Anwendungs-Frameworks wie React, Angular, Ember. Angesichts der Mängel der ursprünglichen Namen ist es völlig in Ordnung, andere Namen für Ihre Testebenen zu finden, solange Sie diese in Ihrer Codebasis und in den Diskussionen Ihres Teams konsistent halten.

Ich habe einen einfachen Microservice geschrieben, der eine Testsuite mit Tests für die verschiedenen Schichten der Testpyramide enthält. Die Beispielanwendung zeigt Merkmale eines typischen Mikrodienstes. Es ist in Spring Boot implementiert und sollte verständlich sein, auch wenn Sie noch nie mit Spring Boot gearbeitet haben. Überprüfen Sie unbedingt den Code auf Github. Die Readme-Datei enthält Anweisungen, die Sie zum Ausführen der Anwendung und ihrer automatisierten Tests auf Ihrem Computer benötigen. Die Funktionalität der Anwendung ist einfach.

Es bietet eine REST-Schnittstelle mit drei Endpunkten: Bei einigen Endpunkten ruft der Dienst Informationen aus einer Datenbank ab. Erfahrene Spring-Entwickler stellen möglicherweise fest, dass hier eine häufig verwendete Ebene fehlt: Inspiriert von Domain-Driven Design erstellen viele Entwickler eine Service-Schicht, die aus Serviceklassen besteht.

Ich habe beschlossen, keine Serviceschicht in diese Anwendung aufzunehmen. Ein Grund dafür ist, dass unsere Anwendung einfach genug ist. Eine Serviceschicht wäre eine unnötige Indirektionsebene gewesen. Die andere ist, dass ich denke, die Leute übertreiben es mit Service-Schichten. Ich stoße häufig auf Codebasen, in denen die gesamte Geschäftslogik in Serviceklassen erfasst wird. Das Domänenmodell wird lediglich zu einer Datenschicht, nicht zum Verhalten eines anämischen Domänenmodells.

Für jede nicht triviale Anwendung verschwendet dies viel Potenzial, um Ihren Code gut strukturiert und testbar zu halten, und nutzt die Möglichkeiten der Objektorientierung nicht vollständig aus. Unsere Repositorys sind unkompliziert und bieten einfache CRUD-Funktionen. Um den Code einfach zu halten, habe ich Spring Data verwendet. Spring Data bietet uns eine einfache und generische CRUD-Repository-Implementierung, die wir verwenden können, anstatt unsere eigene zu rollen. Es kümmert sich auch darum, eine In-Memory-Datenbank für unsere Tests hochzufahren, anstatt wie in der Produktion eine echte PostgreSQL-Datenbank zu verwenden.

Schauen Sie sich die Codebasis an und machen Sie sich mit der internen Struktur vertraut. Dies ist nützlich für unseren nächsten Schritt: Testen der Anwendung! Die Grundlage Ihrer Testsuite besteht aus Komponententests. Ihre Unit-Tests stellen sicher, dass eine bestimmte Unit, die Ihr Proband Ihrer Codebasis testet, wie vorgesehen funktioniert.

Unit-Tests haben den engsten Umfang aller Tests in Ihrer Testsuite. Die Anzahl der Komponententests in Ihrer Testsuite ist weitaus höher als bei jeder anderen Testart. Abbildung 5: Ein Komponententest ersetzt in der Regel externe Mitarbeiter durch Testdoppel.

Wenn Sie drei verschiedene Personen fragen, was "Einheit" im Rahmen von Einheitentests bedeutet, erhalten Sie wahrscheinlich vier verschiedene, leicht nuancierte Antworten.

Bis zu einem gewissen Grad ist es eine Frage Ihrer eigenen Definition und es ist in Ordnung, keine kanonische Antwort zu haben. Wenn Sie in einer funktionalen Sprache arbeiten, ist eine Einheit höchstwahrscheinlich eine einzelne Funktion. Ihre Komponententests rufen eine Funktion mit unterschiedlichen Parametern auf und stellen sicher, dass die erwarteten Werte zurückgegeben werden. In einer objektorientierten Sprache kann eine Einheit von einer einzelnen Methode bis zu einer ganzen Klasse reichen. Einige argumentieren, dass alle Mitarbeiter e.

Andere argumentieren, dass nur Mitarbeiter, die langsam sind oder größere Nebenwirkungen haben, e. Gelegentlich bezeichnen Leute diese beiden Arten von Tests als Einzel-Unit-Tests für Tests, die alle Mitarbeiter stören, und als gesellige Unit-Tests für Tests, die es ermöglichen, mit echten Mitarbeitern zu sprechen. Wenn Sie etwas Freizeit haben, können Sie in den Kaninchenbau gehen und mehr über die Vor- und Nachteile der verschiedenen Denkschulen lesen.

(с) 2019 app9bergamo.com