Geekflare wird von unserem Publikum unterstützt. Es kann sein, dass wir durch den Kauf von Links auf dieser Seite Affiliate-Provisionen verdienen.
Unter Entwicklung und Test Management Zuletzt aktualisiert: September 24, 2023
Weitergeben:
Invicti Web Application Security Scanner - die einzige Lösung, die eine automatische Überprüfung von Schwachstellen mit Proof-Based Scanning™ ermöglicht.

Kein guter Entwickler setzt seinen Code ohne gründliche Tests ein. Unter Unit-Tests versteht man das Testen der einzelnen Module eines großen Programms

In diesem Artikel erfahren Sie, wie Sie mit dem Python unittest Modul Unit-Tests für Ihren Code durchführen können. Lassen Sie uns zunächst einmal verstehen, welche Arten von Tests es gibt

Bei Testen Sie gibt es das manuelle Testen und das automatische Testen. Manuelles Testen ist eine Testtechnik, bei der Menschen den Test nach Abschluss der Entwicklung manuell durchführen. Automatisiertes Testen ist eine Testtechnik, bei der Programme den Test automatisch durchführen und die Ergebnisse an uns weitergeben.

Sie haben sicher verstanden, dass manuelle Tests zeitaufwändig und schwer durchzuführen sind. Daher schreiben die Entwickler Code für die Durchführung von Tests (automatische Tests). Beim automatischen Testen gibt es verschiedene Arten von Tests. Einige von ihnen sind Unit-Tests, Integrationstests, End-to-End-Tests, Stresstests usw.,

Schauen wir uns den Standardablauf von Tests an

  • Schreiben oder aktualisieren Sie den Code.
  • Schreiben oder aktualisieren Sie Tests für verschiedene Fälle für Ihren Code.
  • Führen Sie die Tests aus (entweder manuell oder mit einem Test-Runner).
  • Sehen Sie sich die Testergebnisse an. Wenn es Fehler gibt, heben Sie diese auf und wiederholen Sie die Schritte.

Hier werden wir die wichtigste und grundlegendste Testart besprechen, die Unit-Tests. Lassen Sie uns ohne weitere Umschweife in das eigentliche Tutorial eintauchen.

Was sind Unit-Tests?

Unit-Tests sind eine Technik zum Testen eines kleinen Blocks von unabhängigem Code. Bei dem kleinen Codeblock handelt es sich in den meisten Fällen um eine Funktion. Das Wort unabhängig bedeutet, dass er nicht von anderen Teilen des Codes im Projekt abhängt.

Nehmen wir an, wir müssen prüfen, ob ein String gleich "Geekflare" ist oder nicht. Zu diesem Zweck haben wir eine Funktion geschrieben, die ein Argument entgegennimmt und zurückgibt, ob es gleich "Geekflare" ist oder nicht

def is_equal_to_geekflare(string):
return string == "Geekflare"

Die obige Funktion hat keine Abhängigkeiten von anderem Code. Wir können sie auch unabhängig testen, indem wir verschiedene Eingaben machen. Der unabhängige Code kann projektübergreifend verwendet werden

Die Bedeutung von Unit-Tests

Im Allgemeinen können die unabhängigen Codeblöcke projektübergreifend verwendet werden. Er muss auch gut geschrieben und getestet werden. Unit-Tests sind die Tests, mit denen diese Arten von unabhängigen Codeblöcken getestet werden. Was passiert, wenn wir keine Unit-Tests für unser Projekt verwenden?

Nehmen wir an, wir haben kleine Codeblöcke, die im gesamten Projekt verwendet werden, nicht getestet. Alle anderen Tests wie Integrationstests, End-to-End-Tests usw., die die anderen kleinen Codeblöcke verwenden, könnten fehlschlagen. Das macht die Anwendung kaputt. Deshalb müssen die Grundbausteine des Codes gut getestet werden

Jetzt wissen wir, wie wichtig Unit-Tests sind und haben Unit-Tests für alle unabhängigen Codeblöcke geschrieben. Da wir Unit-Tests durchgeführt haben, werden andere Tests wie Integrationstests, End-to-End-Tests usw. nicht an den unabhängigen Codeblöcken scheitern

In den nächsten Abschnitten werden wir sehen, was das Python unittest Modul ist und wie wir das unittest Modul verwenden, um Unit-Tests in Python zu schreiben

Hinweis: Wir gehen davon aus, dass Sie mit Python-Klassen, -Modulen usw. vertraut sind. Wenn Sie mit Python-Zwischenkonzepten wie Klassen, Modulen usw. nicht vertraut sind, könnten Sie Schwierigkeiten haben, die folgenden Abschnitte zu verstehen

Was ist Python unittest?

Python unittest ist ein integriertes Test-Framework zum Testen von Python-Code. Es verfügt über einen Test-Runner, mit dem wir die Tests ohne großen Aufwand ausführen können. Wir können auch das eingebaute unittest-Modul zum Testen verwenden, ohne die Module von Drittanbietern einzusetzen. Aber das hängt von Ihren Anforderungen ab. Das eingebaute Unittest-Modul ist gut für den Einstieg in das Testen in Python geeignet

Wir müssen die folgenden Schritte befolgen, um den Python-Code mit dem Unittest-Modul zu testen

#1. Schreiben Sie den Code

#2. Importieren Sie das unittest-Modul

#3. Erstellen Sie eine Datei, die mit dem Schlüsselwort test beginnt. Zum Beispiel test_prime.py. Das Schlüsselwort test wird verwendet, um die Testdateien zu identifizieren

#4. Erstellen Sie eine Klasse, die die Klasse unittest.TestCase erweitert

#5. Schreiben Sie Methoden (Tests) innerhalb der Klasse. Jede Methode enthält verschiedene Testfälle, die auf Ihren Anforderungen basieren. Wir müssen die Methode mit dem Schlüsselwort test beginnen lassen

#6. Führen Sie die Tests aus. Wir können die Tests auf verschiedene Arten durchführen

  • Führen Sie den Befehl python -m unittest test_filename.py aus.
  • Wir führen die Testdateien wie allgemeine Python-Dateien mit dem Befehl python test_filename.py aus. Damit diese Methode funktioniert, müssen wir die Hauptmethode des Unittests in der Testdatei aufrufen.
  • Und schließlich die Verwendung des discover. Wir können die Tests mit dem Befehl python -m unittest discover automatisch starten, ohne den Dateinamen des Tests anzugeben. Der Befehl findet die Tests anhand der Namenskonvention, die wir befolgt haben. Wir müssen auch unsere Testdateien mit dem Schlüsselwort test am Anfang benennen.

Im Allgemeinen vergleichen wir beim Testen die Ausgabe des Codes mit der erwarteten Ausgabe. Um die Ausgaben zu vergleichen, bietet unittest verschiedene Methoden. Die Liste der Vergleichsfunktionen finden Sie hier

Sie können sie ohne Schwierigkeiten verstehen. Sie sind ganz einfach

Das ist eine Menge Theorie. Jetzt müssen wir mit der Codierung beginnen

Hinweis: Wenn Sie Fragen zum Unittest-Modul haben, können Sie in der Dokumentation nachsehen und Ihre Zweifel ausräumen. Lassen Sie uns ohne weitere Verzögerung das unittest-Modul verwenden

Unit-Tests in Python mit unittest

Wir werden zunächst einige Funktionen schreiben und uns dann auf das Schreiben der Tests konzentrieren. Öffnen Sie zunächst einen Ordner in Ihrem bevorzugten Code-Editor. Und erstellen Sie eine Datei namens utils.py. Fügen Sie den folgenden Code in diese Datei ein

import math


def is_prime(n):
 if n < 0:
 return 'Negative Zahlen sind nicht erlaubt'

 if n <= 1:
 return False

 if n == 2:
 return True

 if n % 2 == 0:
 return False

 for i in range(2, int(math.sqrt(n)) 1):
 if n % i == 0:
 return False
 return True


def cubic(a):
 return a * a * a


def say_hello(name):
 return "Hallo, " name

Wir haben drei verschiedene Funktionen in der Datei utils.py. Jetzt müssen wir jede Funktion mit verschiedenen Testfällen testen. Lassen Sie uns die Tests für die erste Funktion durchführen is_prime schreiben.

#1. Erstellen Sie eine Datei namens test_utils.py im Ordner Probe als utils.py

#2. Importieren Sie das Modul utils und unittest

#3. Erstellen Sie eine Klasse mit dem Namen TestUtils, die die Klasse unittest.TestCase erweitert. Der Name der Klasse kann beliebig sein. Versuchen Sie, der Klasse einen aussagekräftigen Namen zu geben

#4. Schreiben Sie innerhalb der Klasse eine Methode namens test_is_prime, sterben self als Argument akzeptiert

#5. Schreiben Sie verschiedene Testfälle mit Argumenten für die Methode is_prime und vergleichen Sie die Ausgabe mit der erwarteten Ausgabe

#6. Beispiel-Testfall self.assertFalse(utils.is_prime(1))

#7. Wir erwarten, dass die Ausgabe von is_prime(1) im obigen Fall falsch ist

#8. Ähnlich wie im obigen Fall werden wir je nach Funktion, die wir testen, verschiedene Tests durchführen

Schauen wir uns die Tests an

import unittest

import utils


class TestUtils(unittest.TestCase):
 def test_is_prime(self):
 self.assertFalse(utils.is_prime(4))
 self.assertTrue(utils.is_prime(2))
 self.assertTrue(utils.is_prime(3))
 self.assertFalse(utils.is_prime(8))
 self.assertFalse(utils.is_prime(10))
 self.assertTrue(utils.is_prime(7))
 self.assertEqual(utils.is_prime(-3),
 "Negative Zahlen sind nicht erlaubt")


if __name__ == '__main__':
 unittest.main()

Wir rufen die Methode main des Moduls unittest auf, um die Tests mit dem Befehl python filename.py auszuführen. Führen Sie nun die Tests aus

Sie werden eine Ausgabe ähnlich der folgenden sehen

$ python test_utils.py
.
----------------------------------------------------------------------

Ausführung von

 1 Test in 0.001s

OK

Versuchen Sie nun, die Testfälle auch für andere Funktionen zu schreiben. Denken Sie sich verschiedene Fälle für die Funktionen aus und schreiben Sie Tests für sie. Schauen Sie sich die folgenden Tests an, die der obigen Klasse hinzugefügt werden

...


class TestUtils(unittest.TestCase):
 def test_is_prime(self):
...

 def test_cubic(self):
 self.assertEqual(utils.kubisch(2), 8)
 self.assertEqual(utils.kubisch(-2), -8)
 self.assertNotEqual(utils.kubisch(2), 4)
 self.assertNotEqual(utils.kubisch(-3), 27)

 def test_say_hello(self):
 self.assertEqual(utils.say_hello("Geekflare"), "Hallo, Geekflare")
 self.assertEqual(utils.say_hello("Chandan"), "Hallo, Chandan")
 self.assertNotEqual(utils.say_hello("Chandan"), "Hallo, Chandan")
 self.assertNotEqual(utils.say_hello("Hafeez"), "Hallo, Hafeez")


..

Wir haben nur einige der Vergleichsfunktionen aus dem Unittest-Modul verwendet. Die vollständige Liste finden Sie hier

Wir haben gelernt, wie man Unit-Tests mit dem unittest-Modul schreibt. Jetzt ist es an der Zeit, verschiedene Möglichkeiten zur Ausführung der Tests kennenzulernen

Wie man Tests mit unittest ausführt

Im obigen Abschnitt haben wir bereits eine Möglichkeit gesehen, die Testfälle auszuführen. Sehen wir uns nun die beiden anderen Möglichkeiten an, die Tests mit Hilfe des unittest-Moduls auszuführen

#1. Verwendung des Dateinamens und des unittest-Moduls

Bei dieser Methode verwenden wir das unittest Modul und den Dateinamen, um die Tests auszuführen. Der Befehl zum Ausführen der Tests lautet python -m unittest filename.py. In unserem Fall lautet der Befehl zum Ausführen der Tests python -m unittest test_utils.py

#2. Verwendung der discover-Methode

Wir verwenden die discover-Methode des unittest-Moduls, um alle Testdateien automatisch zu erkennen und sie auszuführen. Um die Testdateien automatisch zu erkennen, müssen wir sie mit dem Schlüsselwort test beginnen lassen

Der Befehl zum Ausführen der Tests mit der discover-Methode lautet python -m unittest discover. Der Befehl erkennt alle Dateien, deren Namen mit test beginnen, und führt sie aus

Fazit 👩‍💻

Unit-Tests sind grundlegende Tests in der Welt der Programmierung. In der realen Welt gibt es noch viele andere Tests. Versuchen Sie, sie nach und nach zu lernen. Ich hoffe, dieses Tutorial hilft Ihnen, grundlegende Tests in Python mit dem Modul unittest zu schreiben. Es gibt Bibliotheken von Drittanbietern wie pytest, Robot Framework, nose, nose2, slash, usw. Sie können sie je nach den Anforderungen Ihres Projekts erkunden

Viel Spaß beim Testen 😎.

Vielleicht interessieren Sie sich auch für Python Interview Fragen und Antworten.

  • Hafeezul Kareem Shaik
    Autor
Dank an unsere Sponsoren
Weitere gute Lektüre zum Thema Entwicklung
Energie für Ihr Unternehmen
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti nutzt das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu überprüfen und innerhalb weniger Stunden verwertbare Ergebnisse zu erzielen.
    Versuchen Sie Invicti
  • Web Scraping, Residential Proxy, Proxy Manager, Web Unlocker, Search Engine Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie Brightdata
  • Monday.com ist ein All-in-One-Betriebssystem, mit dem Sie Projekte, Aufgaben, Arbeit, Vertrieb, CRM, Arbeitsabläufe und vieles mehr verwalten können.
    Versuch Montag
  • Intruder ist ein Online-Schwachstellen-Scanner, der Schwachstellen in Ihrer Infrastruktur aufspürt, um kostspielige Datenschutzverletzungen zu vermeiden.
    Versuchen Sie Intruder