PyTest: Python-Testframework für Backend-Entwickler
Einführung
Als Backend-Entwickler oder QA/Test-Ingenieur ist es wichtig, die Qualität und Zuverlässigkeit Ihres Codes sicherzustellen. Eine Möglichkeit, dies zu erreichen, ist die Verwendung von Python-Testframeworks, um den Testprozess zu automatisieren und Fehler oder Probleme in Ihrem Code zu identifizieren, bevor die Software veröffentlicht oder bereitgestellt wird.
Sie bieten folgende Vorteile an:
Testframeworks verbessern die Codequalität.
Automatisierte Tests sparen Zeit und Mühe.
-
Code-Wiederverwendbarkeit optimiert Testaufwände und reduziert Duplikate.
Python-Testframeworks integrieren sich nahtlos mit anderen Tools, Modulen und Bibliotheken.
In diesem Schritt-für-Schritt-Leitfaden lernen Sie, wie Sie PyTest implementieren - eines der beliebtesten Testframeworks für Python.
Voraussetzungen
Bevor wir in die Einzelheiten der Python-Testframeworks eintauchen, konzentrieren wir uns zunächst auf die Voraussetzungen für die Implementierung von PyTest.
Python-Installation: Bitte stellen Sie sicher, dass Sie Python auf Ihrem System installiert haben. Die neueste Version von Python kann von der offiziellen Python-Website heruntergeladen werden.
Pip-Installation: Pip (Paketmanager für Python) ist ein Werkzeug zur Verwaltung von Paketen, Bibliotheken und Abhängigkeiten in Python. Es ermöglicht uns, Python-Pakete zu installieren und zu verwalten. Stellen Sie sicher, dass Sie pip auf Ihrem System installiert haben.
Sie können überprüfen, ob pip installiert ist, indem Sie den folgenden Befehl in Ihrer Eingabeaufforderung/Ihrem Terminal ausführen:
- python -m pip --version
oder
- python3 -m pip --version
Sie können diese offizielle Python-Website besuchen, um Pakete zu installieren.
Was ist ein Python-Testframework
Das Python-Testframework ist eine Sammlung von Werkzeugen und Bibliotheken, die eine Struktur und Richtlinien bereitstellt, um Tests in Python für die Testautomatisierung zu schreiben und auszuführen. Es stellt sicher, dass der Code die gewünschten Qualitätsstandards erfüllt. Es ist für jeden Backend-Entwickler, Software-Ingenieur, DevOps- und QA/Test-Ingenieur wesentlich und nützlich. Einige bekannte und weit verbreitete Python-Testframeworks sind Pytest, PyUnit, DocTest, Testify, Robot und viele mehr.
Implementierung von PyTest
PyTest installieren
Um mit PyTest zu beginnen, müssen Sie es auf Ihrem System installieren. Öffnen Sie Ihr Terminal und führen Sie den folgenden Befehl aus:
- pip install pytest
Dieser Befehl wird die neueste Version von PyTest und deren Abhängigkeiten herunterladen und installieren.
Testfälle schreiben
Jetzt, da PyTest installiert ist, lassen Sie uns mit dem Schreiben grundlegender Unittests beginnen.
Bitte erstellen Sie eine neue Python-Datei und benennen Sie sie test_backend.py. Diese Datei wird unsere Testfälle mit der Syntax von PyTest definieren.
Hinweis: Standardmäßig wird PyTest alle Testfälle in Dateien entdecken und ausführen, deren Namen mit “test_” beginnen oder mit “_test” enden. Der Entdeckungsprozess von pytest durchsucht rekursiv den aktuellen Ordner und dessen Unterordner nach Dateien, deren Namen entweder mit “test_” beginnen oder mit “_test” enden. Die in diesen Dateien enthaltenen Tests werden dann ausgeführt.
- import pytest
-
- def test_addition():
-
- assert 3 + 3 == 6
-
- def test_subtraction():
-
- assert 5 - 4 == 1
-
- def test_multiplication():
-
- assert 4 * 4 == 16
-
- def test_division():
-
- assert 10 / 2 == 5
-
Im obigen Beispiel haben wir vier grundlegende Unit-Testfälle als Funktionen definiert: test_addition, test_subtraction, test_multiplication und test_division. Das assert-Schlüsselwort wird beim Debuggen von Code verwendet und ermöglicht es Ihnen zu testen, ob eine bestimmte Bedingung in Ihrem Code den Wert Wahr zurückgibt; andernfalls wird ein AssertionError zurückgegeben.
Testfälle ausführen, spezifische Tests ausführen
Um die Tests auszuführen, gehen Sie zu dem Ordner, in dem Sie die test_backend.py-Datei gespeichert haben, und führen Sie dann den folgenden Befehl in Ihrem Terminal oder der Eingabeaufforderung aus:
- pytest
Oder,
- python -m pytest
Ausgabe :
test session starts
==================================================
platform darwin -- Python 3.9.6, pytest-7.4.3, pluggy-1.3.0
rootdir: ~/Python Testing Frameworks
collected 4 items
test_backend.py ....
==================================================
4 passed in 0.01s [100%]
Beim Verwenden von PyTest müssen Sie nicht manuell jeden Testfall in Ihrer Datei ausführen. Das Tool findet und führt automatisch alle definierten Testfälle aus. Wenn alles gut läuft und alle Assertions wahr sind, erhalten Sie eine schöne Zusammenfassung der Testergebnisse zusammen mit der Anzahl der bestandenen Tests, wie oben gezeigt.
Angenommen, einer der Tests schlägt fehl, dann würden wir die folgende Ausgabe bemerken:
test session starts
==================================================
platform darwin -- Python 3.9.6, pytest-7.4.3, pluggy-1.3.0
rootdir: ~/Python Testing Frameworks
collected 4 items
test_backend.py ...F
================================================== [100%]
FAILURES
==================================================
test_division
def test_division():
> assert 10 / 2 == 6
E assert (10 / 2) == 6
test_backend.py:13: AssertionError
short test summary info
==================================================
FAILED test_backend.py::**test_division** - assert (10 / 2) == 6
1 failed, 3 passed in 0.01s
Testentdeckung
PyTest bietet leistungsstarke Testentdeckungsfunktionen, die es Ihnen ermöglichen, Ihre Testfälle strukturiert zu organisieren. Standardmäßig entdeckt und führt PyTest alle Testfälle in Dateien aus, deren Namen mit „test_“ beginnen oder mit „_test“ enden. Sie können jedoch den Testentdeckungsprozess anpassen, indem Sie verschiedene Befehlszeilenoptionen verwenden oder eine pytest.ini-Datei konfigurieren.
Zum Beispiel kann man ein bestimmtes Verzeichnis angeben, um nach Testmodulen zu suchen, indem man den folgenden Befehl ausführt:
- pytest tests/
Dieser Befehl führt nur die Testfälle im “tests ” Verzeichnis aus.
Testfixture
Test Fixtures in Pytest sind erstaunliche Komponenten, die wiederverwendet werden können, um eine feste Grundlage für Ihre Testfälle festzulegen. Sie sind nützlich, wenn Sie Vorbedingungen für Ihre Tests schaffen müssen und wenn Sie nach Abschluss Ihrer Tests Ressourcen bereinigen möchten. PyTest macht es einfach, Test Fixtures elegant zu definieren und zu verwenden.
Um ein Test-Setup zu definieren, müssen Sie den @pytest.fixture Dekorator verwenden. Ein Beispiel, ein Setup namens db, das unten definiert ist, stellt eine Datenbankverbindung her und schließt die Verbindung nach der Benutzung. Wir können dieses Setup wie folgt definieren:
-
- import pytest
-
- @pytest.fixture
-
- def db():
-
- # Set up the database connection
-
- db = create_db()
-
- yield db
-
- # Clean up the database connection
-
- db.close()
-
In diesem Beispiel definiert die yield-Anweisung den Code, der nach dem Ausführen der Testfälle ausgeführt wird. Das Schlüsselwort yield wird verwendet, um den Fluss einer Generatorfunktion zu steuern, was ähnlich wie eine Rückgabewerte-Anweisung in Python ist.
Um ein Fixture in einem Testfall zu verwenden, müssen Sie es als Argument in der Testfunktion einfügen.
Zum Beispiel:
- def query_test(db):
- results = db.query("SELECT * FROM users")
- assert len(result) == 12
In diesem Testfall wird das db-Fixture automatisch in die Funktion query_test() injiziert, sodass Sie es verwenden können, um Datenbankoperationen durchzuführen. Fixtures sind für Entwickler praktisch, um eine spezifische Testumgebung vorzubereiten, wie z.B. Datenbankverbindungen, API-Clients oder Mock-Objekte. Durch die Verwendung von Fixtures können Entwickler sicherstellen, dass Tests isoliert und wiederholbar sind.
Testingenieure können auch Fixtures verwenden, um das zu testende System vorzubereiten, Testdaten zu verwalten oder komplexe Szenarien zu simulieren.
Darüber hinaus können Fixtures verwendet werden, um die Ressourcenbereinigung nach Testdurchführungen zu handhaben, was die Zuverlässigkeit und Wartbarkeit des Test-Suites verbessert.
Schlussfolgerung
In diesem Tutorial haben wir gelernt, PyTest zu implementieren und zu verwenden, eines der beliebtesten und funktionsreichsten Python-Testframeworks, und eine Schritt-für-Schritt-Anleitung zur Implementierung in Python bereitgestellt.
Es ist wichtig, kontinuierlich Testfälle zu schreiben und zu aktualisieren, während sich Ihr Code weiterentwickelt. Indem Sie Zeit und Mühe in Tests investieren, können Sie Bugs frühzeitig erkennen, die Codequalität verbessern und robustere und zuverlässigere Software bereitstellen.
