Table Of ContentXpert.press
Weitere Bände in dieser Reihe
http://www.springer.com/series/4393
Die Reihe Xpert.press vermittelt Professionals in den Bereichen Soft wareentwick-
lung, Internettechnologie und IT-Management aktuell und kompetent relevantes Fach-
wissen über Technologien und Produkte zur Entwicklung und Anwendung moderner
Informationstechnologien.
Johannes Hubertz
Softwaretests mit Python
Johannes Hubertz
Köln, Deutschland
ISSN 1439-5428
Xpert.press
ISBN 978-3-662-48602-3 ISBN 978-3-662-48603-0 (eBook)
DOI 10.1007/978-3-662-48603-0
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliogra(cid:191) e; detail-
lierte bibliogra(cid:191) sche Daten sind im Internet über http://dnb.d-nb.de abrufbar.
Springer Vieweg
© Springer-Verlag Berlin Heidelberg 2016
Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung, die nicht ausdrücklich
vom Urheberrechtsgesetz zugelassen ist, bedarf der vorherigen Zustimmung des Verlags. Das gilt insbeson-
dere für Vervielfältigungen, Bearbeitungen, Übersetzungen, Mikrover(cid:191) lmungen und die Einspeicherung und
Verarbeitung in elektronischen Systemen.
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt
auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen-
und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.
Der Verlag, die Autoren und die Herausgeber gehen davon aus, dass die Angaben und Informationen in diesem
Werk zum Zeitpunkt der Veröffentlichung vollständig und korrekt sind. Weder der Verlag noch die Autoren oder
die Herausgeber übernehmen, ausdrücklich oder implizit, Gewähr für den Inhalt des Werkes, etwaige Fehler
oder Äußerungen.
Satz: Johannes Hubertz mit LaTeXe
Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier
Springer Berlin Heidelberg ist Teil der Fachverlagsgruppe Springer Science+Business Media
(www.springer.com)
Vorwort
Die Idee zu diesem Buch entstand in einem Gespräch mit einem Freund.
Nach erfolgreichem Abschluss einer umfangreichen, mehrmonatigen Pro-
grammiertätigkeit mit Python in der Qualitätssicherung eines Datenbank-
herstellers sollten die dabei gewonnenen Erfahrungen dokumentiert wer-
den.ZielwardieErweiterungdesvorhandenenTestframeworks.EinNose-
Plugin mit mehreren zehntausend Zeilen, welches das Produkt des Hauses
auf Herz und Nieren automatisiert und kontinuierlich prüfen sollte, benö-
tigte weitere Funktionalität. Zwei Jahre zuvor entstand ein Tutorial für die
deutschePythonKonferenz2013mitdemThema„UnittestsfürEinsteiger“.
Eigene Entwicklungen mit Python und dem Ziel, Paketfilter für Linux per-
formanterzugenerierenundLatenzenzuminimieren,warenfertigundauf
demWegindieDebianGNU/LinuxDistribution.
Da das Thema IT-Sicherheit in vielen Facetten seit über 20 Jahren Beruf
und Berufung meines Arbeitslebens ist, bildet verlässliche Software dabei
die wichtigste Grundlage des Erfolges. Zuverlässige Software benötigt im
gesamten Lebenszyklus vom Entstehen über den Betrieb bis zum Tag der
Außerbetriebnahme auf Verlässlichkeit ausgerichtete Kenntnisse und Kon-
zepte. Softwaretests, als kontinuierlicher Qualitätssicherungs- und gleich-
wohl IT-Sicherheits-Prozess, gewinnen dabei zunehmend an Bedeutung im
Tagesgeschäft.
Die gesammelten Erfahrungen kommen dem Buch zugute. Es soll gestan-
denen Programmieren wie auch Anfängern Freude und Begeisterung fürs
Testen von Software vermitteln, so dass sie auch Überzeugungstäter wer-
den. Testgetriebene Entwicklung kann manche Fallstricke herkömmlicher
Entwicklungsmodelle vermeiden. Zuverlässigkeit spielt in kritischen Infra-
strukturen und hochverfügbaren Rechenzentren eine entscheidende Rolle
und stiftet ganz automatisch auch anderweitig vielfachen Mehrwert. Nicht
nur Entwickler, Systemadministratoren und Qualitätsmanager können von
Softwaretests profitieren, sondern alle, die sich mit der Entstehung und
dem Betrieb von Software beschäftigen, selbst wenn sie nur gelegentlich
programmieren.
JohannesHubertz Köln,imOktober2015
v
Inhalt
1 Einleitung 1
1.1 DieSoftwarekrise . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 MotivationfürSoftwaretests . . . . . . . . . . . . . . . . . . . 5
1.2.1 Vor-undNachteile . . . . . . . . . . . . . . . . . . . . . . 6
1.2.2 VarianteninderNamensgebungfürTests . . . . . . . . 7
1.2.3 Methodik:WiekommendieTestszustande? . . . . . . . 9
1.2.4 Mathematik . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3.1 Schreibstil . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.2 Verzeichnisstruktur . . . . . . . . . . . . . . . . . . . . . 16
1.3.3 Versionierung . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.4 Versionskontrollsysteme . . . . . . . . . . . . . . . . . . 18
1.3.5 KlinischreineUmgebung . . . . . . . . . . . . . . . . . . 19
1.3.6 Dokumentation. . . . . . . . . . . . . . . . . . . . . . . . 20
1.3.7 Projektschnellstart . . . . . . . . . . . . . . . . . . . . . 25
1.4 Interview:Dr.MikeMüller . . . . . . . . . . . . . . . . . . . . . 26
2 Doctest 31
2.1 Definition:Docstring . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2 EinfachesBeispiel . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3 DerInterpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.4 EinePython-Datei . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.5 DokumentiertePython-Datei. . . . . . . . . . . . . . . . . . . . 37
2.6 TricksundKniffe . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.6.1 LeerzeichenverbesserndieLesbarkeit . . . . . . . . . . 42
2.6.2 VariableErgebnisse . . . . . . . . . . . . . . . . . . . . . 43
2.6.3 EineleereZeile . . . . . . . . . . . . . . . . . . . . . . . 44
2.6.4 Ausnahmebehandlung. . . . . . . . . . . . . . . . . . . . 46
2.6.5 AusnahmebehandlungmitDetails . . . . . . . . . . . . . 48
vi
Inhalt
2.6.6 DirekterAufruf. . . . . . . . . . . . . . . . . . . . . . . . 49
2.6.7 EinenTestauslassen . . . . . . . . . . . . . . . . . . . . 51
2.7 AutomatischeDokumentation . . . . . . . . . . . . . . . . . . . 51
2.8 Interview:Dr.StefanSchwarzer . . . . . . . . . . . . . . . . . 52
3 Unittests machen Freude 57
3.1 Begriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.1.1 Testfall . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.1.2 Testvorrichtung,test fixture . . . . . . . . . . . . . . 59
3.1.3 Testgruppe . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.1.4 Teststarter . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.1.5 TeststarterimPython-Modul . . . . . . . . . . . . . . . . 61
3.2 unittestModulaufderKommandozeile . . . . . . . . . . . . . 62
3.2.1 OptionaleArgumente . . . . . . . . . . . . . . . . . . . . 62
3.2.2 unittestinderKommandozeile . . . . . . . . . . . . . . . 63
3.2.3 Ablaufvereinfachungmitnosetests . . . . . . . . . . . . 63
3.2.4 Akzeptanzerwünscht . . . . . . . . . . . . . . . . . . . . 65
3.2.5 Fallunterscheidung . . . . . . . . . . . . . . . . . . . . . 67
3.2.6 Ausnahmebehandlung. . . . . . . . . . . . . . . . . . . . 69
3.2.7 VergleichsmöglichkeitenimTestfall . . . . . . . . . . . . 73
3.2.8 Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . 73
3.2.9 Testsauslassen . . . . . . . . . . . . . . . . . . . . . . . 75
3.3 Erweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.3.1 Fixtures . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.3.2 Testabdeckung . . . . . . . . . . . . . . . . . . . . . . . . 78
3.3.3 TestabdeckungalsHTML-Ausgabe . . . . . . . . . . . . 80
3.4 VortäuschenfalscherTatsachen . . . . . . . . . . . . . . . . . . 82
3.4.1 MockalsDekorator . . . . . . . . . . . . . . . . . . . . . 82
3.4.2 MockimZusammenhangmitKontextmanagern . . . . . 82
3.4.3 MockunddieNutzungimTestfall . . . . . . . . . . . . . 84
3.4.4 Lern-undSpielwiese . . . . . . . . . . . . . . . . . . . . 85
3.5 FingerübungI:TestgetriebeneEntwicklung . . . . . . . . . . . 86
3.5.1 ErsterTestcode . . . . . . . . . . . . . . . . . . . . . . . 87
3.5.2 GültigeEingaben . . . . . . . . . . . . . . . . . . . . . . 89
3.5.3 UngültigeEingaben . . . . . . . . . . . . . . . . . . . . . 92
3.5.4 Testserfolgreich? . . . . . . . . . . . . . . . . . . . . . . 95
3.5.5 VollständigeTestabdeckung? . . . . . . . . . . . . . . . . 97
3.6 Interview:ChristianTheune . . . . . . . . . . . . . . . . . . . . 98
vii
Inhalt
4 Nose 101
4.1 Hilfestellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.2 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
4.3 Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.3.1 PluginBeispiel:Test-Laufzeitenermitteln . . . . . . . . 103
4.3.2 PluginIntegrationinnosetests . . . . . . . . . . . . . . 112
4.3.3 NureingetestetesPluginisteingutesPlugin . . . . . . 114
4.4 Interview:StefanHagen . . . . . . . . . . . . . . . . . . . . . . 115
5 pytest 117
5.1 Hilfestellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
5.2 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
5.2.1 Markierungen . . . . . . . . . . . . . . . . . . . . . . . . 121
5.2.2 Testvorrichtungen . . . . . . . . . . . . . . . . . . . . . . 128
5.3 Testbeispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
5.3.1 AussagekräftigeFehlermeldungen . . . . . . . . . . . . 134
5.3.2 Ausnahmebehandlung. . . . . . . . . . . . . . . . . . . . 136
5.3.3 py.testmitunittests . . . . . . . . . . . . . . . . . . . . . 140
5.4 Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
5.4.1 PluginBeispiel:Berichtalscsv-Dateierzeugen . . . . . 142
5.4.2 PluginIntegrationinpy.test . . . . . . . . . . . . . . . 146
5.4.3 NureingetestetesPluginisteingutesPlugin . . . . . . 148
5.4.4 DieBenutzungdesneuenPlugins . . . . . . . . . . . . . 156
5.5 FingerübungII:sign(x), csign(z) . . . . . . . . . . . . . . . 159
5.5.1 TeilungvorderErweiterung . . . . . . . . . . . . . . . . 160
5.5.2 SignumfürkomplexeZahlen . . . . . . . . . . . . . . . . 161
5.5.3 DerersteTestfall . . . . . . . . . . . . . . . . . . . . . . 163
5.5.4 UngültigeEingabewerte . . . . . . . . . . . . . . . . . . 164
5.5.5 Doctestsmitpy.test . . . . . . . . . . . . . . . . . . . . 166
5.6 Interview:HolgerKrekel . . . . . . . . . . . . . . . . . . . . . . 168
6 tox 171
6.1 Einstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
6.2 EinBeispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
6.3 EinTestlauf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
6.4 Interview:BastianBallmann . . . . . . . . . . . . . . . . . . . . 179
7 GUI Tests 183
7.1 PyQt4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
7.1.1 BeispielGUI . . . . . . . . . . . . . . . . . . . . . . . . . 183
viii
Inhalt
7.1.2 GUIAnsicht . . . . . . . . . . . . . . . . . . . . . . . . . 186
7.1.3 GUITest . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
7.1.4 Testabdeckung . . . . . . . . . . . . . . . . . . . . . . . . 187
7.2 Django:TestgetriebeneWebentwicklung . . . . . . . . . . . . . 188
7.2.1 UnittestsundFunktionaleTests . . . . . . . . . . . . . . 189
7.2.2 DjangoStart . . . . . . . . . . . . . . . . . . . . . . . . . 192
7.2.3 DjangoEntwicklungsserver . . . . . . . . . . . . . . . . 194
7.2.4 EineKurzgeschichte. . . . . . . . . . . . . . . . . . . . . 196
7.2.5 DjangoUnittests . . . . . . . . . . . . . . . . . . . . . . . 199
7.2.6 UnittestfüreineView . . . . . . . . . . . . . . . . . . . . 203
7.2.7 ViewausderVorlage . . . . . . . . . . . . . . . . . . . . 206
7.2.8 WobleibendieDaten? . . . . . . . . . . . . . . . . . . . 213
7.2.9 ORMundPersistenz . . . . . . . . . . . . . . . . . . . . . 214
7.3 Interview:GuidoGünther . . . . . . . . . . . . . . . . . . . . . 221
8 Großes Python-Kino 223
8.1 SaltStack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
8.1.1 QuellenundUnittests . . . . . . . . . . . . . . . . . . . . 224
8.1.2 Integrationstests . . . . . . . . . . . . . . . . . . . . . . . 226
8.1.3 Dokumentation. . . . . . . . . . . . . . . . . . . . . . . . 228
8.2 OpenStack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
8.2.1 Dokumentation,derSchlüsselzurWolke . . . . . . . . . 229
8.2.2 KeystoneTests . . . . . . . . . . . . . . . . . . . . . . . . 231
8.3 Interview:JulienDanjou . . . . . . . . . . . . . . . . . . . . . . 233
Anhang 237
A Abbildungsverzeichnis 237
B Literaturhinweise 247
C Stichwortverzeichnis 249
ix