Freunde, wir haben tolle Neuigkeiten für euch. Erstens scheint endlich die Sonne auf die Straße, was bedeutet, dass der Frühling beginnt, seine Rechte vollständig zu übernehmen. Die zweite Neuigkeit ist spezialisierter - am 20. März beginnt die erste Lektion in einem neuen Thread zum Kurs
"Python Developer" . In diesem Zusammenhang veröffentlichen wir den letzten Teil des Artikels "Einführung in das Testen in Python", dessen vorherige Teile
hier und
hier gelesen
werden können .
Testen in mehreren UmgebungenBisher haben Sie eine Version von Python in einer virtuellen Umgebung mit bestimmten Abhängigkeiten getestet. Möglicherweise muss die Anwendung jedoch immer auf mehreren Versionen von Python oder mehreren Versionen des Pakets getestet werden. Tox ist eine Anwendung, die das Testen in mehreren Umgebungen automatisiert.
Tox InstallationTox ist auf PyPl als Paket verfügbar, das über pip installiert werden kann:
$ pip install tox
Nach der Installation können Sie Tox konfigurieren.
Anpassen von Tox für Ihre AbhängigkeitenTox wird über die Konfigurationsdatei im Projektverzeichnis konfiguriert. Es enthält Folgendes:
- Der Befehl zum Ausführen der Tests.
- Alle zusätzlichen Pakete, die zum Ausführen erforderlich sind;
- Zum Testen ausgewählte Zielversionen von Python.
Anstatt die Syntax zum Konfigurieren von Tox zu lernen, können Sie zunächst eine Schnellstartanwendung starten.
$ tox-quickstart
Das Tox-Konfigurationstool stellt Ihnen Fragen und erstellt eine Datei ähnlich der folgenden in
tox.ini
:
[tox] envlist = py27, py36 [testenv] deps = commands = python -m unittest discover
setup.py
vor dem Starten von Tox sicher, dass sich die
setup.py
mit den Installationsschritten für das Paket im Anwendungsordner befindet. Wenn nicht, verwenden Sie
die Erstellungsanleitung
setup.py
.
Wenn Ihr Projekt nicht für die Verteilung auf PyPl vorgesehen ist, können Sie diese Anforderung überspringen, indem Sie der Datei tox.ini unter der Überschrift
tox
die folgende Zeile hinzufügen:
[tox] envlist = py27, py36 skipsdist=True
Wenn Sie die Datei setup.py nicht erstellen und die Anwendung einige Abhängigkeiten von PyPl aufweist, müssen Sie diese im Abschnitt
testenv
. Zum Beispiel benötigt Django Folgendes:
[testenv] deps = django
Am Ende dieses Schritts können Sie die Tests ausführen.
Jetzt können Sie Tox ausführen und es werden zwei virtuelle Umgebungen erstellt: eine für Python 2.7 und eine für Python 3.6. Das Tox-Verzeichnis heißt
.tox/
. Darin führt Tox
-m unittest discover
für jede virtuelle Umgebung aus.
Sie können diesen Prozess starten, indem Sie Tox über die Befehlszeile aufrufen:
$ tox
Tox liefert Testergebnisse für jede Umgebung. Wenn Sie Tox zum ersten Mal starten, dauert es einige Zeit, virtuelle Umgebungen zu erstellen. Wenn Sie Tox jedoch zum zweiten Mal ausführen, funktioniert alles viel schneller.
Die Ergebnisse von Tox sind ziemlich einfach. Für jede Version werden Umgebungen erstellt, Abhängigkeiten installiert und anschließend Testbefehle ausgeführt.
Es gibt einige zusätzliche Befehlszeilenoptionen, an die Sie sich erinnern sollten.
Ausführen einer einzelnen Umgebung, z. B. Python 3.6:
$ tox -e py36
Neuerstellung der virtuellen Umgebung, wenn sich die Abhängigkeit ändert oder
Seitenpakete beschädigt werden:
$ tox -r
Running Tox mit weniger detaillierten Ergebnissen:
$ tox -q
Ausführen von Tox mit ausführlicherer Ausgabe:
$ tox -v
Weitere Informationen zu Tox finden Sie auf der
Tox-Dokumentationsseite .
TestautomatisierungBisher haben Sie Tests manuell durchgeführt, indem Sie den Befehl ausgeführt haben. Es gibt jedoch Tools zum automatischen Ausführen von Tests, wenn Änderungen vorgenommen werden, und zum Festschreiben in ein Repository mit einem Versionskontrollsystem, z. B. Git. Testautomatisierungstools werden häufig als CI / CD-Tools bezeichnet, was „Kontinuierliche Integration / Kontinuierliche Bereitstellung“ bedeutet. Sie können Tests ausführen, Anwendungen kompilieren, veröffentlichen und sogar für die Produktion bereitstellen.
Travis CI ist einer der vielen verfügbaren CI-Dienste.
Travis CI funktioniert gut mit Python, und jetzt können Sie die Ausführung aller erstellten Tests in der Cloud automatisieren! Travis CI ist für Open Source-Projekte auf GitHub und GitLab kostenlos und für private Projekte gegen eine Gebühr erhältlich.
Melden Sie sich zunächst an und authentifizieren Sie sich mit Ihren GitHub- oder GitLab-Anmeldeinformationen. Erstellen Sie dann eine Datei mit dem Namen
.travis.yml
mit den folgenden Inhalten:
language: python python: - "2.7" - "3.7" install: - pip install -r requirements.txt script: - python -m unittest discover
Diese Konfiguration gibt Travis CI die folgenden Anweisungen:
- Testen auf Python 2.7 und 3.7 (Optional können Sie sie durch andere ersetzen.)
- Installieren aller in den Anforderungen.txt aufgeführten Pakete (Sie können diesen Abschnitt entfernen, wenn Sie keine Abhängigkeiten haben.)
- Ausführen von Python -m unittest entdecken, um Tests auszuführen.
Nach dem Festschreiben und Übertragen dieser Datei führt Travis CI diese Befehle jedes Mal aus, wenn Sie sie in Ihr Remote-Git-Repository übertragen. Die Ergebnisse können auf ihrer Website eingesehen werden.
Was weiterJetzt wissen Sie, wie Sie Tests schreiben, zu Ihrem Projekt hinzufügen, ausführen und sogar automatisch ausführen, damit Sie sich mit erweiterten Methoden vertraut machen können, die sich mit dem Wachstum der Testbibliothek als nützlich erweisen können.
Linter Einführung in die AnwendungTox und Travis CI haben ein Testteam eingerichtet. In diesem Tutorial haben wir Python -m unittest Discover als Testteam verwendet.
Sie können in diesen Tools einen oder mehrere Befehle bereitstellen, mit denen neue Tools hinzugefügt werden, um die Qualität der Anwendung zu verbessern.
Eine solche Anwendung ist der Linter. Er wird sich Ihren Code ansehen und Kommentare hinterlassen. So kann er Ratschläge zu Fehlern geben, Leerzeichen korrigieren und sogar mögliche Fehler antizipieren.
Weitere Informationen zu Lintern finden
Sie im Python Code Quality Tutorial .
Passives Flusen mit Flake8flake8 ist ein beliebter Linter, der Kommentare zum Stil Ihres Codes gemäß der
PEP 8- Spezifikation hinterlässt.
Sie können
flake8
mit pip installieren:
$ pip install flake8
Dann können Sie
flake8
für eine einzelne Datei, einen Ordner oder eine Vorlage
flake8
:
$ flake8 test.py test.py:6:1: E302 expected 2 blank lines, found 1 test.py:23:1: E305 expected 2 blank lines after class or function definition, found 1 test.py:24:20: W292 no newline at end of file
In Ihrem von
flake8
gefundenen Code wird eine Liste mit Fehlern und Warnungen
flake8
.
flake8
kann in der Befehlszeile oder in der Projektkonfigurationsdatei konfiguriert werden. Wenn Sie einige Regeln ignorieren möchten, z. B. E305 (siehe oben), können Sie dies in der Konfiguration festlegen.
flake8
überprüft die
flake8
Datei im Projektordner oder in der Datei
setup.cfg
. Wenn Sie Tox verwenden möchten, können Sie den Konfigurationsabschnitt
tox.ini
zu
tox.ini
.
In diesem Beispiel werden die
Verzeichnisse .git und __pycache__ sowie die E305-Regel ignoriert. Außerdem wird die maximale Zeichenfolgenlänge von 80 Zeichen auf 90 Zeichen erhöht. Sie werden irgendwann feststellen, dass die Standardbeschränkung von 79 Zeichen pro Zeile nicht für Tests geeignet ist, die lange Methodennamen, Zeichenfolgenliterale mit Testwerten und enthalten können andere lange Daten. Erhöhen Sie für Tests normalerweise die Zeichenfolgenlänge auf 120 Zeichen:
[flake8] ignore = E305 exclude = .git,__pycache__ max-line-length = 90
Alternativ können Sie diese Optionen in der Befehlszeile bereitstellen:
$ flake8 --ignore E305 --exclude .git,__pycache__ --max-line-length=90
Eine vollständige Liste der Einstellungen finden Sie auf der
Dokumentationsseite .
Jetzt können
flake8
Ihrem CI-Setup
flake8
hinzufügen. Für Travis CI sieht es folgendermaßen aus:
matrix: include: - python: "2.7" script: "flake8"
Travis liest die Konfiguration in
.flake8
und kann den Build nicht abschließen, wenn
.flake8
.
flake8
Sie sicher, dass Sie die
flake8
Abhängigkeit zur Datei
flake8
hinzufügen.
Aggressives Flusen mit Code-Formatiererflake8
ist ein passiver Linter, der nur Änderungen empfiehlt, die Sie selbst in den Code eingeben müssen. Code-Formatierer ist ein aggressiverer Ansatz. Der Code wird automatisch entsprechend den Stilen und Layouts geändert.
black
ist ein sehr unaufhaltsamer Formatierer. Es hat keine Einstellungen und es ist sehr genau. Das macht es zu einem großartigen Werkzeug, um es in Ihre Testpipeline einzufügen.
Bitte beachten Sie: Schwarz erfordert Python Version 3.6 und höher.
Sie können
black
mit pip installieren:
$ pip install black
Um von der Befehlszeile aus zu beginnen, geben Sie die Datei oder das Verzeichnis an, die Sie formatieren möchten:
$ black test.py
Halten Sie den Testcode sauberMöglicherweise stellen Sie fest, dass Sie beim Schreiben von Tests Codefragmente viel häufiger kopieren und einfügen als beim Erstellen regulärer Anwendungen. Von Zeit zu Zeit können Tests sehr eintönig sein, aber dies ist kein Grund, den Code in einer ungenauen und fragmentierten Form zu löschen.
Im Laufe der Zeit wird sich in Ihrem Testcode eine
technische Verschuldung ansammeln, und es wird sich aufgrund der Struktur als sehr schwierig herausstellen, die Änderungen vorzunehmen, die für wesentliche Änderungen des Anwendungscodes in den Tests erforderlich sind.
Versuchen Sie beim Schreiben von Tests, das DRY-Prinzip zu befolgen: Wiederholen Sie sich nicht.
Testgeräte und -funktionen sind eine großartige Möglichkeit, Code zu schreiben, der einfach zu warten ist. Vergessen Sie auch nicht die Leichtigkeit des Lesens.
flake8
Sie die Bereitstellung von
flake8
wie
flake8
für Ihren
flake8
:
$ flake8 --max-line-length=120 tests/
Tests zur Erkennung von Produktivitätsverlusten zwischen den BearbeitungenEs gibt viele Möglichkeiten, Code in Python zu vergleichen. Die Standardbibliothek verfügt über ein Zeitmodul, das Funktionen mehrmals plant und Ihnen die Verteilung anzeigt. In diesem Beispiel wird test () 100 Mal ausgeführt und anschließend mit print () ausgegeben:
def test():
Wenn Sie sich für die Verwendung von pytest als Testläufer entscheiden, lesen Sie das Pytest-Benchmark-Plugin. Es bietet eine Pytest-Vorrichtung namens Benchmark. Jedes aufgerufene Objekt kann als Benchmark () übergeben werden. Es analysiert die Zeit der aufgerufenen Pytestergebnisse.
Sie können pytest-Benchmark von PyPl mit pip installieren:
$ pip install pytest-benchmark
Anschließend können Sie einen Test mit fixture hinzufügen und das aufgerufene Objekt an die Ausführung übergeben:
def test_my_function(benchmark): result = benchmark(test)
Wenn Sie pytest ausführen, erhalten Sie Benchmark-Ergebnisse:

Weitere Informationen finden Sie auf der
Dokumentationsseite .
Testen auf Identifizieren von SicherheitsfehlernEin weiterer Test, den Sie für Ihre Anwendung ausführen sollten, ist die Überprüfung auf häufige Fehler und Sicherheitslücken.
Installieren Sie
bandit
von PyPl mit pip:
$ pip install bandit
Anschließend können Sie den Namen Ihres Anwendungsmoduls mit dem Flag
-r
und kurze Informationen erhalten:
$ bandit -r my_sum [main] INFO profile include tests: None [main] INFO profile exclude tests: None [main] INFO cli include tests: None [main] INFO cli exclude tests: None [main] INFO running on Python 3.5.2 Run started:2018-10-08 00:35:02.669550 Test results: No issues identified. Code scanned: Total lines of code: 5 Total lines skipped (
Wie bei
flake8
können die
bandit
konfiguriert werden. Wenn Sie einige davon ignorieren möchten, können Sie der Datei
setup.cfg
das folgende Fragment mit Parametern hinzufügen:
[bandit] exclude: /test tests: B101,B102,B301
Weitere Informationen auf
der GitHub-Website .
FazitPython hat Tests dank der integrierten Befehle und Bibliotheken verfügbar gemacht, die zur Überprüfung des korrekten Betriebs von Anwendungen erforderlich sind. Es ist einfach, mit dem Testen in Python zu beginnen: Sie können unittest verwenden und kleine, einfach zu wartende Methoden schreiben, um den Code zu testen.
Wenn Sie mehr über das Testen und Erweitern Ihrer Anwendung erfahren möchten, sollten Sie zu einem der Testframeworks wie pytest wechseln, um erweiterte Funktionen zu verwenden.
Danke fürs Lesen. Haben Sie eine unverwechselbare Zukunft mit Python!
Und für diejenigen, die den Artikel gelesen haben, haben wir noch eine gute Nachricht. Im Moment können Sie den
Python Developer- Kurs mit einem Rabatt von 10.000 Rubel erhalten!
Erster TeilZweiter Teil