test — Regressionstestsammlung für Python¶
Hinweis
Das Paket test ist nur für die interne Verwendung durch Python bestimmt. Es wird zur Information der Kernentwickler von Python dokumentiert. Jede Verwendung dieses Pakets außerhalb der Standardbibliothek von Python wird nicht empfohlen, da der hier erwähnte Code zwischen den Python-Versionen ohne Vorankündigung geändert oder entfernt werden kann.
Das Paket test enthält alle Regressionstests für Python sowie die Module test.support und test.regrtest. test.support wird verwendet, um Ihre Tests zu erweitern, während test.regrtest die Testsuite steuert.
Jedes Modul im Paket test, dessen Name mit test_ beginnt, ist eine Testsuite für ein bestimmtes Modul oder Feature. Alle neuen Tests sollten mit dem Modul unittest oder doctest geschrieben werden. Einige ältere Tests sind im "traditionellen" Teststil geschrieben, der die an sys.stdout ausgegebene Ausgabe vergleicht; dieser Teststil gilt als veraltet.
Siehe auch
Schreiben von Unit-Tests für das Paket test¶
Es wird bevorzugt, dass Tests, die das Modul unittest verwenden, einige Richtlinien befolgen. Eine davon ist, das Testmodul durch Voranstellen von test_ und Anhängen des zu testenden Modulnamens zu benennen. Die Testmethoden im Testmodul sollten mit test_ beginnen und mit einer Beschreibung dessen, was die Methode testet, enden. Dies ist notwendig, damit die Methoden vom Testtreiber als Testmethoden erkannt werden. Außerdem sollten keine Docstrings für die Methode enthalten sein. Ein Kommentar (wie z. B. # Tests funktion gibt nur True oder False zurück) sollte zur Dokumentation von Testmethoden verwendet werden. Dies geschieht, weil Docstrings ausgegeben werden, wenn sie vorhanden sind, und somit nicht angegeben wird, welcher Test gerade ausgeführt wird.
Eine grundlegende Boilerplate wird oft verwendet
import unittest
from test import support
class MyTestCase1(unittest.TestCase):
# Only use setUp() and tearDown() if necessary
def setUp(self):
... code to execute in preparation for tests ...
def tearDown(self):
... code to execute to clean up after tests ...
def test_feature_one(self):
# Test feature one.
... testing code ...
def test_feature_two(self):
# Test feature two.
... testing code ...
... more test methods ...
class MyTestCase2(unittest.TestCase):
... same structure as MyTestCase1 ...
... more test classes ...
if __name__ == '__main__':
unittest.main()
Dieses Code-Muster ermöglicht es, die Testsuite von test.regrtest auszuführen, eigenständig als Skript, das die unittest CLI unterstützt, oder über die python -m unittest CLI.
Das Ziel von Regressionstests ist es, zu versuchen, Code zu brechen. Dies führt zu einigen Richtlinien, die befolgt werden müssen
Die Testsuite sollte alle Klassen, Funktionen und Konstanten durchlaufen. Dies umfasst nicht nur die externe API, die der Außenwelt präsentiert werden soll, sondern auch den "privaten" Code.
Whitebox-Testing (Untersuchung des zu testenden Codes während des Schreibens der Tests) wird bevorzugt. Blackbox-Testing (nur Testen der veröffentlichten Benutzeroberfläche) ist nicht ausreichend, um sicherzustellen, dass alle Grenz- und Randfälle getestet werden.
Stellen Sie sicher, dass alle möglichen Werte getestet werden, einschließlich ungültiger. Dies stellt sicher, dass nicht nur alle gültigen Werte akzeptiert werden, sondern auch, dass fehlerhafte Werte korrekt behandelt werden.
Schöpfen Sie so viele Code-Pfade wie möglich aus. Testen Sie Verzweigungen und passen Sie die Eingaben so an, dass möglichst viele verschiedene Pfade durch den Code genommen werden.
Fügen Sie einen expliziten Test für alle gefundenen Fehler im getesteten Code hinzu. Dies stellt sicher, dass der Fehler in Zukunft nicht wieder auftritt, wenn der Code geändert wird.
Stellen Sie sicher, dass Sie Ihre Tests aufräumen (z. B. alle temporären Dateien schließen und löschen).
Wenn ein Test von einer bestimmten Bedingung des Betriebssystems abhängt, verifizieren Sie, dass die Bedingung bereits besteht, bevor Sie den Test versuchen.
Importieren Sie so wenige Module wie möglich und tun Sie dies so früh wie möglich. Dies minimiert externe Abhängigkeiten von Tests und minimiert auch mögliche anomale Verhaltensweisen durch Nebeneffekte beim Importieren eines Moduls.
Versuchen Sie, die Code-Wiederverwendung zu maximieren. Gelegentlich variieren Tests um Kleinigkeiten wie die Art der verwendeten Eingabe. Minimieren Sie Code-Duplizierung durch Unterklassifizierung einer grundlegenden Testklasse mit einer Klasse, die die Eingabe spezifiziert.
class TestFuncAcceptsSequencesMixin: func = mySuperWhammyFunction def test_func(self): self.func(self.arg) class AcceptLists(TestFuncAcceptsSequencesMixin, unittest.TestCase): arg = [1, 2, 3] class AcceptStrings(TestFuncAcceptsSequencesMixin, unittest.TestCase): arg = 'abc' class AcceptTuples(TestFuncAcceptsSequencesMixin, unittest.TestCase): arg = (1, 2, 3)
Wenn Sie dieses Muster verwenden, denken Sie daran, dass alle Klassen, die von
unittest.TestCaseerben, als Tests ausgeführt werden. Die KlasseTestFuncAcceptsSequencesMixinim obigen Beispiel enthält keine Daten und kann daher nicht eigenständig ausgeführt werden, daher erbt sie nicht vonunittest.TestCase.
Siehe auch
- Testgetriebene Entwicklung
Ein Buch von Kent Beck über das Schreiben von Tests vor dem Code.
Ausführen von Tests über die Befehlszeilenschnittstelle¶
Das Paket test kann als Skript zur Steuerung der Python-Regressionstestsammlung ausgeführt werden, dank der Option -m: python -m test. Intern wird test.regrtest verwendet; der Aufruf python -m test.regrtest, der in früheren Python-Versionen verwendet wurde, funktioniert immer noch. Das Skript eigenständig auszuführen, beginnt automatisch mit der Ausführung aller Regressionstests im Paket test. Dies geschieht durch Auffinden aller Module im Paket, deren Name mit test_ beginnt, Importieren dieser und Ausführen der Funktion test_main(), falls vorhanden, oder Laden der Tests über unittest.TestLoader.loadTestsFromModule, falls test_main nicht existiert. Die Namen der auszuführenden Tests können auch an das Skript übergeben werden. Die Angabe eines einzelnen Regressionstests (python -m test test_spam) minimiert die Ausgabe und gibt nur aus, ob der Test bestanden oder fehlgeschlagen ist.
Das direkte Ausführen von test ermöglicht es, die für Tests verfügbaren Ressourcen festzulegen. Dies geschieht über die Befehlszeilenoption -u. Die Angabe von all als Wert für die Option -u aktiviert alle möglichen Ressourcen: python -m test -uall. Wenn alle bis auf eine Ressource gewünscht sind (ein häufigerer Fall), kann eine durch Kommas getrennte Liste der nicht gewünschten Ressourcen nach all aufgeführt werden. Der Befehl python -m test -uall,-audio,-largefile führt test mit allen Ressourcen außer den Ressourcen audio und largefile aus. Eine Liste aller Ressourcen und weitere Befehlszeilenoptionen erhalten Sie mit python -m test -h.
Einige andere Möglichkeiten, die Regressionstests auszuführen, hängen von der Plattform ab, auf der die Tests ausgeführt werden. Unter Unix können Sie make test im obersten Verzeichnis ausführen, in dem Python erstellt wurde. Unter Windows führt die Ausführung von rt.bat aus Ihrem PCbuild-Verzeichnis alle Regressionstests aus.
Hinzugefügt in Version 3.14: Die Ausgabe wird standardmäßig farblich hervorgehoben und kann über Umgebungsvariablen gesteuert werden.
test.support — Hilfsprogramme für die Python-Testsuite¶
Das Modul test.support bietet Unterstützung für die Regressionstestsammlung von Python.
Hinweis
test.support ist kein öffentliches Modul. Es wird hier dokumentiert, um Python-Entwicklern beim Schreiben von Tests zu helfen. Die API dieses Moduls kann sich zwischen den Versionen ohne Rückwärtskompatibilität ändern.
Dieses Modul definiert die folgenden Ausnahmen
- exception test.support.TestFailed¶
Ausnahme, die ausgelöst wird, wenn ein Test fehlschlägt. Dies ist zugunsten von
unittest-basierten Tests und den Assertionsmethoden vonunittest.TestCaseveraltet.
- exception test.support.ResourceDenied¶
Unterklasse von
unittest.SkipTest. Wird ausgelöst, wenn eine Ressource (wie eine Netzwerkverbindung) nicht verfügbar ist. Wird von der Funktionrequires()ausgelöst.
Das Modul test.support definiert die folgenden Konstanten
- test.support.verbose¶
True, wenn eine ausführliche Ausgabe aktiviert ist. Sollte geprüft werden, wenn detailliertere Informationen zu einem laufenden Test gewünscht sind. *verbose* wird vontest.regrtestgesetzt.
- test.support.is_jython¶
True, wenn der laufende Interpreter Jython ist.
- test.support.is_android¶
True, wennsys.platformandroidist.
- test.support.is_emscripten¶
True, wennsys.platformemscriptenist.
- test.support.is_wasi¶
True, wennsys.platformwasiist.
- test.support.is_apple_mobile¶
True, wennsys.platformios,tvosoderwatchosist.
- test.support.is_apple¶
True, wennsys.platformdarwinist oderis_apple_mobileTrueist.
- test.support.unix_shell¶
Pfad zur Shell, wenn nicht unter Windows; sonst
None.
- test.support.LOOPBACK_TIMEOUT¶
Timeout in Sekunden für Tests, die einen Netzwerkserver verwenden, der auf der lokalen Loopback-Schnittstelle des Netzwerks lauscht, wie z. B.
127.0.0.1.Der Timeout ist lang genug, um Testfehler zu verhindern: Er berücksichtigt, dass der Client und der Server in verschiedenen Threads oder sogar verschiedenen Prozessen laufen können.
Der Timeout sollte lang genug für die Methoden
connect(),recv()undsend()vonsocket.socketsein.Sein Standardwert ist 5 Sekunden.
Siehe auch
INTERNET_TIMEOUT.
- test.support.INTERNET_TIMEOUT¶
Timeout in Sekunden für Netzwerkanfragen, die ins Internet gehen.
Der Timeout ist kurz genug, um zu verhindern, dass ein Test zu lange wartet, wenn die Internetanfrage aus irgendeinem Grund blockiert wird.
Normalerweise sollte ein Timeout mit
INTERNET_TIMEOUTeinen Test nicht als fehlgeschlagen markieren, sondern den Test stattdessen überspringen: siehetransient_internet().Sein Standardwert ist 1 Minute.
Siehe auch
LOOPBACK_TIMEOUT.
- test.support.SHORT_TIMEOUT¶
Timeout in Sekunden, um einen Test als fehlgeschlagen zu markieren, wenn er "zu lange" dauert.
Der Timeout-Wert hängt von der Option
--timeoutder regrtest-Befehlszeile ab.Wenn ein Test, der
SHORT_TIMEOUTverwendet, auf langsamen Buildbots zufällig fehlschlägt, verwenden Sie stattdessenLONG_TIMEOUT.Sein Standardwert ist 30 Sekunden.
- test.support.LONG_TIMEOUT¶
Timeout in Sekunden, um zu erkennen, wann ein Test hängt.
Er ist lang genug, um das Risiko von Testfehlern auf den langsamsten Python-Buildbots zu reduzieren. Er sollte nicht verwendet werden, um einen Test als fehlgeschlagen zu markieren, wenn er "zu lange" dauert. Der Timeout-Wert hängt von der Option
--timeoutder regrtest-Befehlszeile ab.Sein Standardwert ist 5 Minuten.
Siehe auch
LOOPBACK_TIMEOUT,INTERNET_TIMEOUTundSHORT_TIMEOUT.
- test.support.PGO¶
Gesetzt, wenn Tests übersprungen werden können, wenn sie für PGO nicht nützlich sind.
- test.support.PIPE_MAX_SIZE¶
Eine Konstante, die wahrscheinlich größer ist als die zugrundeliegende Pipe-Puffergröße des Betriebssystems, um Schreibvorgänge blockierend zu machen.
- test.support.Py_DEBUG¶
True, wenn Python mit der definierten MakroPy_DEBUGerstellt wurde, d.h. wenn Python im Debug-Modus erstellt wurde. Siehe die Option configure --enable-debug.Hinzugefügt in Version 3.12.
- test.support.SOCK_MAX_SIZE¶
Eine Konstante, die wahrscheinlich größer ist als die zugrundeliegende Socket-Puffergröße des Betriebssystems, um Schreibvorgänge blockierend zu machen.
- test.support.TEST_SUPPORT_DIR¶
Auf das Stammverzeichnis gesetzt, das
test.supportenthält.
- test.support.TEST_HOME_DIR¶
Auf das Stammverzeichnis für das Testpaket gesetzt.
- test.support.TEST_DATA_DIR¶
Auf das
data-Verzeichnis innerhalb des Testpakets gesetzt.
- test.support.MAX_Py_ssize_t¶
Auf
sys.maxsizefür Tests mit großem Speicher gesetzt.
- test.support.max_memuse¶
Von
set_memlimit()als Speichergrenze für Tests mit großem Speicher gesetzt. Begrenzt durchMAX_Py_ssize_t.
- test.support.real_max_memuse¶
Von
set_memlimit()als Speichergrenze für Tests mit großem Speicher gesetzt. Nicht begrenzt durchMAX_Py_ssize_t.
- test.support.MISSING_C_DOCSTRINGS¶
Auf
Truegesetzt, wenn Python ohne Docstrings erstellt wurde (das MakroWITH_DOC_STRINGSist nicht definiert). Siehe die Optionconfigure --without-doc-strings.Siehe auch die Variable
HAVE_DOCSTRINGS.
- test.support.HAVE_DOCSTRINGS¶
Auf
Truegesetzt, wenn Funktions-Docstrings verfügbar sind. Siehe die Optionpython -OO, die Docstrings von in Python implementierten Funktionen entfernt.Siehe auch die Variable
MISSING_C_DOCSTRINGS.
- test.support.TEST_HTTP_URL¶
Definiert die URL eines dedizierten HTTP-Servers für die Netzwerktests.
- test.support.ALWAYS_EQ¶
Objekt, das mit allem gleich ist. Wird zum Testen von Vergleichen unterschiedlicher Typen verwendet.
- test.support.NEVER_EQ¶
Objekt, das mit nichts ungleich ist (nicht einmal mit
ALWAYS_EQ). Wird zum Testen von Vergleichen unterschiedlicher Typen verwendet.
- test.support.LARGEST¶
Objekt, das größer ist als alles andere (außer sich selbst). Wird zum Testen von Vergleichen unterschiedlicher Typen verwendet.
- test.support.SMALLEST¶
Objekt, das kleiner ist als alles andere (außer sich selbst). Wird zum Testen von Vergleichen unterschiedlicher Typen verwendet.
Das Modul test.support definiert die folgenden Funktionen
- test.support.busy_retry(timeout, err_msg=None, /, *, error=True)¶
Führt die Schleifenkörper aus, bis
breakdie Schleife beendet.Nach *timeout* Sekunden wird eine
AssertionErrorausgelöst, wenn *error* true ist, oder die Schleife wird einfach beendet, wenn *error* false ist.Beispiel
for _ in support.busy_retry(support.SHORT_TIMEOUT): if check(): break
Beispiel für error=False-Nutzung
for _ in support.busy_retry(support.SHORT_TIMEOUT, error=False): if check(): break else: raise RuntimeError('my custom error')
- test.support.sleeping_retry(timeout, err_msg=None, /, *, init_delay=0.010, max_delay=1.0, error=True)¶
Warte-Strategie, die exponentielle Rückschaltung anwendet.
Führt den Schleifenkörper aus, bis
breakdie Schleife beendet. Schläft bei jeder Schleifeniteration, aber nicht bei der ersten Iteration. Die Schlafverzögerung verdoppelt sich bei jeder Iteration (bis zu *max_delay* Sekunden).Siehe die Dokumentation von
busy_retry()für die Parameternutzung.Beispiel für Auslösen einer Ausnahme nach SHORT_TIMEOUT Sekunden
for _ in support.sleeping_retry(support.SHORT_TIMEOUT): if check(): break
Beispiel für error=False-Nutzung
for _ in support.sleeping_retry(support.SHORT_TIMEOUT, error=False): if check(): break else: raise RuntimeError('my custom error')
- test.support.is_resource_enabled(resource)¶
Gibt
Truezurück, wenn *resource* aktiviert und verfügbar ist. Die Liste der verfügbaren Ressourcen wird nur gesetzt, wenntest.regrtestdie Tests ausführt.
- test.support.python_is_optimized()¶
Gibt
Truezurück, wenn Python nicht mit-O0oder-Ogerstellt wurde.
- test.support.with_pymalloc()¶
Gibt
_testcapi.WITH_PYMALLOCzurück.
- test.support.requires(resource, msg=None)¶
Löst
ResourceDeniedaus, wenn resource nicht verfügbar ist. msg ist das Argument fürResourceDenied, wenn es ausgelöst wird. Gibt immerTruezurück, wenn es von einer Funktion aufgerufen wird, deren__name__'__main__'ist. Wird verwendet, wenn Tests vontest.regrtestausgeführt werden.
- test.support.sortdict(dict)¶
Gibt eine Darstellung von dict mit sortierten Schlüsseln zurück.
- test.support.findfile(filename, subdir=None)¶
Gibt den Pfad zur Datei mit dem Namen filename zurück. Wenn keine Übereinstimmung gefunden wird, wird filename zurückgegeben. Dies entspricht keinem Fehler, da es der Pfad zur Datei sein könnte.
Das Setzen von subdir gibt einen relativen Pfad an, der zum Suchen der Datei verwendet werden soll, anstatt direkt in den Pfadverzeichnissen zu suchen.
- test.support.get_pagesize()¶
Ermittelt die Seitengröße in Bytes.
Hinzugefügt in Version 3.12.
- test.support.setswitchinterval(interval)¶
Setzt
sys.setswitchinterval()auf das gegebene interval. Definiert ein minimales Intervall für Android-Systeme, um zu verhindern, dass das System einfriert.
- test.support.check_impl_detail(**guards)¶
Verwenden Sie diese Prüfung, um CPythons implementierungsspezifische Tests zu schützen oder sie nur auf den durch die Argumente geschützten Implementierungen auszuführen. Diese Funktion gibt
TrueoderFalsezurück, abhängig von der Host-Plattform. Beispielverwendungcheck_impl_detail() # Only on CPython (default). check_impl_detail(jython=True) # Only on Jython. check_impl_detail(cpython=False) # Everywhere except CPython.
- test.support.set_memlimit(limit)¶
Setzt die Werte für
max_memuseundreal_max_memusefür große Speichertests.
- test.support.record_original_stdout(stdout)¶
Speichert den Wert von stdout. Er ist dazu gedacht, stdout zum Zeitpunkt des Beginns des regrtest zu speichern.
- test.support.get_original_stdout()¶
Gibt das ursprüngliche stdout zurück, das von
record_original_stdout()gesetzt wurde, odersys.stdout, wenn es nicht gesetzt ist.
- test.support.args_from_interpreter_flags()¶
Gibt eine Liste von Kommandozeilenargumenten zurück, die die aktuellen Einstellungen in
sys.flagsundsys.warnoptionsreproduzieren.
- test.support.optim_args_from_interpreter_flags()¶
Gibt eine Liste von Kommandozeilenargumenten zurück, die die aktuellen Optimierungseinstellungen in
sys.flagsreproduzieren.
- test.support.captured_stdin()¶
- test.support.captured_stdout()¶
- test.support.captured_stderr()¶
Ein Kontextmanager, der den benannten Stream vorübergehend durch ein
io.StringIO-Objekt ersetzt.Beispiel für die Verwendung mit Ausgabestreams
with captured_stdout() as stdout, captured_stderr() as stderr: print("hello") print("error", file=sys.stderr) assert stdout.getvalue() == "hello\n" assert stderr.getvalue() == "error\n"
Beispiel für die Verwendung mit Eingabestrom
with captured_stdin() as stdin: stdin.write('hello\n') stdin.seek(0) # call test code that consumes from sys.stdin captured = input() self.assertEqual(captured, "hello")
- test.support.disable_faulthandler()¶
Ein Kontextmanager, der
faulthandlervorübergehend deaktiviert.
- test.support.gc_collect()¶
Erzwingt das Sammeln so vieler Objekte wie möglich. Dies ist notwendig, da die rechtzeitige Deallokation vom Garbage Collector nicht garantiert wird. Das bedeutet, dass `__del__`-Methoden später als erwartet aufgerufen werden können und WeakRefs länger als erwartet lebendig bleiben können.
- test.support.disable_gc()¶
Ein Kontextmanager, der den Garbage Collector beim Eintritt deaktiviert. Beim Austritt wird der Garbage Collector in seinen vorherigen Zustand zurückversetzt.
- test.support.swap_attr(obj, attr, new_val)¶
Kontextmanager zum Austauschen eines Attributs mit einem neuen Objekt.
Verwendung
with swap_attr(obj, "attr", 5): ...
Dies setzt
obj.attrwährend deswith-Blocks auf 5 und stellt den alten Wert am Ende des Blocks wieder her. Wennattraufobjnicht existiert, wird es erstellt und am Ende des Blocks gelöscht.Der alte Wert (oder
None, wenn er nicht existiert) wird der Zielvariable der `as`-Klausel zugewiesen, falls eine vorhanden ist.
- test.support.swap_item(obj, attr, new_val)¶
Kontextmanager zum Austauschen eines Elements mit einem neuen Objekt.
Verwendung
with swap_item(obj, "item", 5): ...
Dies setzt
obj["item"]während deswith-Blocks auf 5 und stellt den alten Wert am Ende des Blocks wieder her. Wennitemaufobjnicht existiert, wird es erstellt und am Ende des Blocks gelöscht.Der alte Wert (oder
None, wenn er nicht existiert) wird der Zielvariable der `as`-Klausel zugewiesen, falls eine vorhanden ist.
- test.support.flush_std_streams()¶
Ruft die Methode
flush()zuerst fürsys.stdoutund dann fürsys.stderrauf. Sie kann verwendet werden, um sicherzustellen, dass die Protokollreihenfolge konsistent ist, bevor in stderr geschrieben wird.Hinzugefügt in Version 3.11.
- test.support.print_warning(msg)¶
Gibt eine Warnung in
sys.__stderr__aus. Formatiert die Nachricht als:f"Warning -- {msg}". Wenn msg aus mehreren Zeilen besteht, wird jeder Zeile das Präfix"Warning -- "vorangestellt.Hinzugefügt in Version 3.9.
- test.support.wait_process(pid, *, exitcode, timeout=None)¶
Wartet, bis der Prozess pid abgeschlossen ist, und prüft, ob der Prozessexitcode exitcode ist.
Löst einen
AssertionErroraus, wenn der Prozessexitcode nicht gleich exitcode ist.Wenn der Prozess länger als timeout Sekunden läuft (
SHORT_TIMEOUTstandardmäßig), wird der Prozess beendet und einAssertionErrorausgelöst. Die Timeout-Funktion ist unter Windows nicht verfügbar.Hinzugefügt in Version 3.9.
- test.support.calcobjsize(fmt)¶
Gibt die Größe des
PyObjectzurück, dessen Strukturmember durch fmt definiert sind. Der zurückgegebene Wert enthält die Größe des Python-Objektheaders und die Ausrichtung.
- test.support.calcvobjsize(fmt)¶
Gibt die Größe des
PyVarObjectzurück, dessen Strukturmember durch fmt definiert sind. Der zurückgegebene Wert enthält die Größe des Python-Objektheaders und die Ausrichtung.
- test.support.checksizeof(test, o, size)¶
Stellt für den Testfall test sicher, dass die
sys.getsizeoffür o plus die GC-Headergröße gleich size ist.
- @test.support.anticipate_failure(condition)¶
Ein Dekorator, um Tests bedingt mit
unittest.expectedFailure()zu kennzeichnen. Jede Verwendung dieses Dekorators sollte einen zugehörigen Kommentar mit der entsprechenden Tracker-Ausgabe haben.
- test.support.system_must_validate_cert(f)¶
Ein Dekorator, der den dekorierten Test bei TLS-Zertifikatsvalidierungsfehlern überspringt.
- @test.support.run_with_locale(catstr, *locales)¶
Ein Dekorator zum Ausführen einer Funktion in einer anderen Locale, wobei sie nach Beendigung korrekt zurückgesetzt wird. catstr ist die Locale-Kategorie als String (z. B.
"LC_ALL"). Die übergebenen locales werden sequenziell versucht, und die erste gültige Locale wird verwendet.
- @test.support.run_with_tz(tz)¶
Ein Dekorator zum Ausführen einer Funktion in einer bestimmten Zeitzone, die nach Beendigung korrekt zurückgesetzt wird.
- @test.support.requires_freebsd_version(*min_version)¶
Dekorator für die Mindestversion beim Ausführen von Tests unter FreeBSD. Wenn die FreeBSD-Version kleiner als das Minimum ist, wird der Test übersprungen.
- @test.support.requires_linux_version(*min_version)¶
Dekorator für die Mindestversion beim Ausführen von Tests unter Linux. Wenn die Linux-Version kleiner als das Minimum ist, wird der Test übersprungen.
- @test.support.requires_mac_version(*min_version)¶
Dekorator für die Mindestversion beim Ausführen von Tests unter macOS. Wenn die macOS-Version kleiner als das Minimum ist, wird der Test übersprungen.
- @test.support.requires_gil_enabled¶
Dekorator zum Überspringen von Tests im Free-Threaded Build. Wenn die GIL deaktiviert ist, wird der Test übersprungen.
- @test.support.requires_IEEE_754¶
Dekorator zum Überspringen von Tests auf Nicht-IEEE-754-Plattformen.
- @test.support.requires_resource(resource)¶
Dekorator zum Überspringen von Tests, wenn resource nicht verfügbar ist.
- @test.support.requires_docstrings¶
Dekorator zum nur Ausführen des Tests, wenn
HAVE_DOCSTRINGSwahr ist.
- @test.support.requires_limited_api¶
Dekorator zum nur Ausführen des Tests, wenn die Limited C API verfügbar ist.
- @test.support.cpython_only¶
Dekorator für Tests, die nur für CPython gelten.
- @test.support.impl_detail(msg=None, **guards)¶
Dekorator zum Aufrufen von
check_impl_detail()auf guards. Wenn diesFalsezurückgibt, wird msg als Grund für das Überspringen des Tests verwendet.
- @test.support.thread_unsafe(reason=None)¶
Dekorator zum Kennzeichnen von Tests als Thread-unsicher. Dieser Test wird immer in einem Thread ausgeführt, auch wenn er mit
--parallel-threadsaufgerufen wird.
- @test.support.no_tracing¶
Dekorator zum vorübergehenden Deaktivieren des Tracings für die Dauer des Tests.
- @test.support.refcount_test¶
Dekorator für Tests, die die Referenzzählung betreffen. Der Dekorator führt den Test nicht aus, wenn er nicht von CPython ausgeführt wird. Jede Trace-Funktion wird für die Dauer des Tests deaktiviert, um unerwartete Referenzzählungen, die durch die Trace-Funktion verursacht werden, zu vermeiden.
- @test.support.bigmemtest(size, memuse, dry_run=True)¶
Dekorator für Bigmem-Tests.
size ist eine angeforderte Größe für den Test (in beliebigen, vom Test interpretierten Einheiten). memuse ist die Anzahl der Bytes pro Einheit für den Test oder eine gute Schätzung davon. Ein Test, der beispielsweise zwei Byte-Puffer von jeweils 4 GiB benötigt, könnte mit
@bigmemtest(size=_4G, memuse=2)dekoriert werden.Das Argument size wird normalerweise als zusätzliches Argument an die dekorierte Testmethode übergeben. Wenn dry_run
Trueist, kann der an die Testmethode übergebene Wert kleiner als der angeforderte Wert sein. Wenn dry_runFalseist, bedeutet dies, dass der Test keine Dummy-Läufe unterstützt, wenn-Mnicht angegeben ist.
- @test.support.bigaddrspacetest¶
Dekorator für Tests, die den Adressraum füllen.
- test.support.linked_to_musl()¶
Gibt
Falsezurück, wenn keine Hinweise darauf vorliegen, dass der Interpreter mitmuslkompiliert wurde, andernfalls gibt er ein Versionstupel zurück, entweder(0, 0, 0), wenn die Version unbekannt ist, oder die tatsächliche Version, wenn sie bekannt ist. Gedacht für die Verwendung inskip-Dekoratoren.emscriptenundwasiwerden als mitmuslkompiliert angenommen; andernfalls wirdplatform.libc_verüberprüft.
- test.support.check_syntax_error(testcase, statement, errtext='', *, lineno=None, offset=None)¶
Prüft auf Syntaxfehler in statement, indem versucht wird, statement zu kompilieren. testcase ist die Instanz von
unittestfür den Test. errtext ist der reguläre Ausdruck, der die Zeichenfolgendarstellung des ausgelöstenSyntaxErrorabgleichen soll. Wenn lineno nichtNoneist, wird mit der Zeile der Ausnahme verglichen. Wenn offset nichtNoneist, wird mit dem Offset der Ausnahme verglichen.
- test.support.open_urlresource(url, *args, **kw)¶
Öffnet url. Wenn das Öffnen fehlschlägt, wird
TestFailedausgelöst.
- test.support.reap_children()¶
Verwenden Sie dies am Ende von
test_main, wann immer Unterprozesse gestartet werden. Dies hilft sicherzustellen, dass keine zusätzlichen Kinder (Zombies) zurückbleiben, die Ressourcen verbrauchen und Probleme bei der Suche nach Refleaks verursachen.
- test.support.get_attribute(obj, name)¶
Ruft ein Attribut ab und löst
unittest.SkipTestaus, wenn einAttributeErrorausgelöst wird.
- test.support.catch_unraisable_exception()¶
Kontextmanager zum Abfangen nicht behandelbarer Ausnahmen mittels
sys.unraisablehook().Das Speichern des Ausnahmewerts (
cm.unraisable.exc_value) erzeugt einen Referenzzyklus. Der Referenzzyklus wird explizit beim Beenden des Kontextmanagers unterbrochen.Das Speichern des Objekts (
cm.unraisable.object) kann es wiederbeleben, wenn es auf ein Objekt gesetzt wird, das gerade finalisiert wird. Das Beenden des Kontextmanagers löscht das gespeicherte Objekt.Verwendung
with support.catch_unraisable_exception() as cm: # code creating an "unraisable exception" ... # check the unraisable exception: use cm.unraisable ... # cm.unraisable attribute no longer exists at this point # (to break a reference cycle)
Hinzugefügt in Version 3.8.
- test.support.load_package_tests(pkg_dir, loader, standard_tests, pattern)¶
Generische Implementierung des
unittestload_testsProtokolls zur Verwendung in Testpaketen. pkg_dir ist das Stammverzeichnis des Pakets; loader, standard_tests und pattern sind die Argumente, die vonload_testserwartet werden. In einfachen Fällen kann die__init__.pydes Testpakets wie folgt aussehen:import os from test.support import load_package_tests def load_tests(*args): return load_package_tests(os.path.dirname(__file__), *args)
- test.support.detect_api_mismatch(ref_api, other_api, *, ignore=())¶
Gibt die Menge der Attribute, Funktionen oder Methoden von ref_api zurück, die nicht in other_api gefunden werden, mit Ausnahme einer definierten Liste von Elementen, die bei dieser Prüfung ignoriert werden sollen und in ignore angegeben sind.
Standardmäßig werden private Attribute, die mit ‘_’ beginnen, übersprungen, aber alle magischen Methoden, d. h. diejenigen, die mit ‘__’ beginnen und enden, werden eingeschlossen.
Hinzugefügt in Version 3.5.
- test.support.patch(test_instance, object_to_patch, attr_name, new_value)¶
Überschreibt object_to_patch.attr_name mit new_value. Fügt auch ein Bereinigungsverfahren zu test_instance hinzu, um object_to_patch für attr_name wiederherzustellen. Der attr_name sollte ein gültiges Attribut für object_to_patch sein.
- test.support.run_in_subinterp(code)¶
Führt code in einem Unterinterpreter aus. Löst
unittest.SkipTestaus, wenntracemallocaktiviert ist.
- test.support.check_free_after_iterating(test, iter, cls, args=())¶
Stellt sicher, dass Instanzen von cls nach der Iteration deallokiert werden.
- test.support.missing_compiler_executable(cmd_names=[])¶
Prüft auf die Existenz der Compiler-Executable-Dateien, deren Namen in cmd_names aufgeführt sind, oder aller Compiler-Executable-Dateien, wenn cmd_names leer ist, und gibt die erste fehlende Executable oder
Nonezurück, wenn keine fehlt.
- test.support.check__all__(test_case, module, name_of_module=None, extra=(), not_exported=())¶
Stellt sicher, dass die Variable
__all__von module alle öffentlichen Namen enthält.Die öffentlichen Namen des Moduls (seine API) werden automatisch ermittelt, basierend darauf, ob sie der Konvention für öffentliche Namen entsprechen und im module definiert wurden.
Das Argument name_of_module kann angeben (als String oder Tupel davon), in welchem Modul/welchen Modulen eine API definiert sein könnte, um als öffentliche API erkannt zu werden. Ein Fall dafür ist, wenn module einen Teil seiner öffentlichen API aus anderen Modulen importiert, möglicherweise ein C-Backend (wie
csvund sein_csv).Das Argument extra kann eine Menge von Namen sein, die nicht automatisch als „öffentlich“ erkannt würden, wie z. B. Objekte ohne ein korrektes
__module__-Attribut. Falls angegeben, wird es zu den automatisch erkannten hinzugefügt.Das Argument not_exported kann eine Menge von Namen sein, die nicht als Teil der öffentlichen API behandelt werden dürfen, auch wenn ihre Namen darauf hindeuten.
Beispiel für die Verwendung
import bar import foo import unittest from test import support class MiscTestCase(unittest.TestCase): def test__all__(self): support.check__all__(self, foo) class OtherTestCase(unittest.TestCase): def test__all__(self): extra = {'BAR_CONST', 'FOO_CONST'} not_exported = {'baz'} # Undocumented name. # bar imports part of its API from _bar. support.check__all__(self, bar, ('bar', '_bar'), extra=extra, not_exported=not_exported)
Hinzugefügt in Version 3.6.
- test.support.skip_if_broken_multiprocessing_synchronize()¶
Überspringt Tests, wenn das Modul
multiprocessing.synchronizefehlt, wenn keine Semaphore-Implementierung verfügbar ist oder wenn das Erstellen eines Locks einenOSErrorauslöst.Hinzugefügt in Version 3.10.
- test.support.check_disallow_instantiation(test_case, tp, *args, **kwds)¶
Stellt sicher, dass der Typ tp nicht mit args und kwds instanziiert werden kann.
Hinzugefügt in Version 3.10.
- test.support.adjust_int_max_str_digits(max_digits)¶
Diese Funktion gibt einen Kontextmanager zurück, der die globale Einstellung von
sys.set_int_max_str_digits()für die Dauer des Kontexts ändert, um die Ausführung von Testcode zu ermöglichen, der ein anderes Limit für die Anzahl der Ziffern bei der Konvertierung zwischen Ganzzahl und Zeichenkette benötigt.Hinzugefügt in Version 3.11.
Das Modul test.support definiert die folgenden Klassen
- class test.support.SuppressCrashReport¶
Ein Kontextmanager, der verwendet wird, um zu versuchen, Fehlermeldungen bei Abstürzen von Unterprozessen bei Tests zu verhindern, bei denen ein Absturz erwartet wird.
Unter Windows deaktiviert er Windows-Fehlerberichts-Dialoge mithilfe von SetErrorMode.
Unter UNIX wird
resource.setrlimit()verwendet, um das Soft-Limit vonresource.RLIMIT_COREauf 0 zu setzen, um die Erstellung von Core-Dump-Dateien zu verhindern.Auf beiden Plattformen wird der alte Wert durch
__exit__()wiederhergestellt.
test.support.socket_helper — Hilfsprogramme für Socket-Tests¶
Das Modul test.support.socket_helper bietet Unterstützung für Socket-Tests.
Hinzugefügt in Version 3.9.
- test.support.socket_helper.IPV6_ENABLED¶
Auf
Truegesetzt, wenn IPv6 auf diesem Host aktiviert ist, andernfallsFalse.
- test.support.socket_helper.find_unused_port(family=socket.AF_INET, socktype=socket.SOCK_STREAM)¶
Gibt einen ungenutzten Port zurück, der zum Binden geeignet sein sollte. Dies wird erreicht, indem ein temporärer Socket mit der gleichen Familie und demselben Typ wie der
sock-Parameter (Standard istAF_INET,SOCK_STREAM) erstellt und an die angegebene Host-Adresse (Standard ist0.0.0.0) mit Port 0 gebunden wird, um vom Betriebssystem einen ungenutzten, flüchtigen Port zu erhalten. Der temporäre Socket wird dann geschlossen und gelöscht, und der flüchtige Port wird zurückgegeben.Entweder diese Methode oder
bind_port()sollte für alle Tests verwendet werden, bei denen ein Server-Socket für die Dauer des Tests an einen bestimmten Port gebunden werden muss. Welche Methode verwendet werden soll, hängt davon ab, ob der aufrufende Code einen Python-Socket erstellt oder ob ein ungenutzter Port in einem Konstruktor bereitgestellt oder an ein externes Programm übergeben werden muss (d. h. das Argument-acceptfür den s_server-Modus von openssl). Bevorzugen Sie immerbind_port()gegenüberfind_unused_port(), wo immer möglich. Die Verwendung eines hartkodierten Ports wird nicht empfohlen, da dies die gleichzeitige Ausführung mehrerer Testinstanzen unmöglich machen kann, was ein Problem für Buildbots darstellt.
- test.support.socket_helper.bind_port(sock, host=HOST)¶
Bindet den Socket an einen freien Port und gibt die Portnummer zurück. Nutzt flüchtige Ports, um sicherzustellen, dass ein ungebundener Port verwendet wird. Dies ist wichtig, da viele Tests gleichzeitig laufen können, insbesondere in einer Buildbot-Umgebung. Diese Methode löst eine Ausnahme aus, wenn
sock.familyAF_INETist undsock.typeSOCK_STREAMist und der Socket die OptionenSO_REUSEADDRoderSO_REUSEPORTgesetzt hat. Tests sollten diese Socket-Optionen für TCP/IP-Sockets niemals setzen. Der einzige Fall, in dem diese Optionen gesetzt werden sollten, ist das Testen von Multicasting über mehrere UDP-Sockets.Zusätzlich wird, wenn die Socket-Option
SO_EXCLUSIVEADDRUSEverfügbar ist (d. h. unter Windows), diese auf dem Socket gesetzt. Dies verhindert, dass jemand anderes während der Laufzeit des Tests an unseren Host/Port bindet.
- test.support.socket_helper.bind_unix_socket(sock, addr)¶
Bindet einen Unix-Socket und löst
unittest.SkipTestaus, wenn einPermissionErrorausgelöst wird.
- @test.support.socket_helper.skip_unless_bind_unix_socket¶
Ein Dekorator zum Ausführen von Tests, die ein funktionierendes
bind()für Unix-Sockets erfordern.
- test.support.socket_helper.transient_internet(resource_name, *, timeout=30.0, errnos=())¶
Ein Kontextmanager, der
ResourceDeniedauslöst, wenn verschiedene Probleme mit der Internetverbindung als Ausnahmen auftreten.
test.support.script_helper — Hilfsprogramme für die Tests zur Ausführung von Python-Skripten¶
Das Modul test.support.script_helper bietet Unterstützung für die Tests zur Ausführung von Python-Skripten.
- test.support.script_helper.interpreter_requires_environment()¶
Gibt
Truezurück, wenn dersys.executable InterpreterUmgebungsvariablen benötigt, um überhaupt ausgeführt werden zu können.Dies ist zur Verwendung mit
@unittest.skipIf()vorgesehen, um Tests zu annotieren, die eineassert_python*()Funktion verwenden müssen, um einen isolierten Modus (-I) oder einen Modus ohne Umgebung (-E) Unterinterpreterprozess zu starten.Ein normaler Build & Test stößt nicht auf diese Situation, aber es kann passieren, wenn versucht wird, die Testsuite der Standardbibliothek von einem Interpreter auszuführen, der keine offensichtliche Heimat mit der aktuellen Python-Logik zur Ermittlung der Heimat hat.
Das Setzen von
PYTHONHOMEist eine Möglichkeit, die meisten Tests in dieser Situation auszuführen.PYTHONPATHoderPYTHONUSERSITEsind andere gängige Umgebungsvariablen, die beeinflussen können, ob der Interpreter gestartet werden kann.
- test.support.script_helper.run_python_until_end(*args, **env_vars)¶
Richtet die Umgebung basierend auf env_vars für die Ausführung des Interpreters in einem Unterprozess ein. Die Werte können
__isolated,__cleanenv,__cwdundTERMenthalten.Geändert in Version 3.9: Die Funktion entfernt keine Leerzeichen mehr aus stderr.
- test.support.script_helper.assert_python_ok(*args, **env_vars)¶
Stellt sicher, dass die Ausführung des Interpreters mit args und optionalen Umgebungsvariablen env_vars erfolgreich ist (
rc == 0) und gibt ein Tupel(return code, stdout, stderr)zurück.Wenn der schlüsselwortbasierte Parameter __cleanenv gesetzt ist, wird env_vars als frische Umgebung verwendet.
Python wird im isolierten Modus gestartet (Befehlszeilenoption
-I), es sei denn, der schlüsselwortbasierte Parameter __isolated ist aufFalsegesetzt.Geändert in Version 3.9: Die Funktion entfernt keine Leerzeichen mehr aus stderr.
- test.support.script_helper.assert_python_failure(*args, **env_vars)¶
Stellt sicher, dass die Ausführung des Interpreters mit args und optionalen Umgebungsvariablen env_vars fehlschlägt (
rc != 0) und gibt ein Tupel(return code, stdout, stderr)zurück.Weitere Optionen finden Sie unter
assert_python_ok().Geändert in Version 3.9: Die Funktion entfernt keine Leerzeichen mehr aus stderr.
- test.support.script_helper.spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw)¶
Führt einen Python-Unterprozess mit den angegebenen Argumenten aus.
kw sind zusätzliche Schlüsselwortargumente, die an
subprocess.Popen()übergeben werden. Gibt einsubprocess.Popen-Objekt zurück.
- test.support.script_helper.kill_python(p)¶
Führt den gegebenen
subprocess.Popen-Prozess bis zum Ende aus und gibt stdout zurück.
- test.support.script_helper.make_script(script_dir, script_basename, source, omit_suffix=False)¶
Erstellt ein Skript, das source im Pfad script_dir und script_basename enthält. Wenn omit_suffix
Falseist, wird.pyan den Namen angehängt. Gibt den vollständigen Skriptpfad zurück.
- test.support.script_helper.make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None)¶
Erstellt eine Zip-Datei unter zip_dir und zip_basename mit der Erweiterung
zip, die die Dateien in script_name enthält. name_in_zip ist der Archivname. Gibt ein Tupel zurück, das(vollständiger Pfad, vollständiger Pfad des Archivnamens)enthält.
- test.support.script_helper.make_pkg(pkg_dir, init_source='')¶
Erstellt ein Verzeichnis namens pkg_dir, das eine
__init__-Datei mit init_source als Inhalt enthält.
- test.support.script_helper.make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename, source, depth=1, compiled=False)¶
Erstellt ein Zip-Paketverzeichnis mit dem Pfad zip_dir und zip_basename, das eine leere Datei
__init__und eine Datei script_basename enthält, welche den source enthält. Wenn compiledTrueist, werden beide Quelldateien kompiliert und dem Zip-Paket hinzugefügt. Gibt ein Tupel des vollständigen Zip-Pfads und des Archivnamens der Zip-Datei zurück.
test.support.bytecode_helper — Unterstützungswerkzeuge zur Überprüfung der korrekten Bytecode-Generierung¶
Das Modul test.support.bytecode_helper bietet Unterstützung für Tests und die Inspektion der Bytecode-Generierung.
Hinzugefügt in Version 3.9.
Das Modul definiert die folgende Klasse
- class test.support.bytecode_helper.BytecodeTestCase(unittest.TestCase)¶
Diese Klasse verfügt über benutzerdefinierte Assertionsmethoden zur Inspektion von Bytecode.
- BytecodeTestCase.get_disassembly_as_string(co)¶
Gibt die Disassemblierung von co als String zurück.
- BytecodeTestCase.assertInBytecode(x, opname, argval=_UNSPECIFIED)¶
Gibt instr zurück, wenn opname gefunden wird, andernfalls wird eine
AssertionErrorausgelöst.
- BytecodeTestCase.assertNotInBytecode(x, opname, argval=_UNSPECIFIED)¶
Löst eine
AssertionErroraus, wenn opname gefunden wird.
test.support.threading_helper — Hilfsprogramme für Threading-Tests¶
Das Modul test.support.threading_helper bietet Unterstützung für Threading-Tests.
Hinzugefügt in Version 3.10.
- test.support.threading_helper.join_thread(thread, timeout=None)¶
Verbindet einen thread innerhalb von timeout. Löst eine
AssertionErroraus, wenn der Thread nach timeout Sekunden noch aktiv ist.
- @test.support.threading_helper.reap_threads¶
Dekorator, der sicherstellt, dass die Threads auch dann bereinigt werden, wenn der Test fehlschlägt.
- test.support.threading_helper.start_threads(threads, unlock=None)¶
Kontextmanager zum Starten von threads, einer Sequenz von Threads. unlock ist eine Funktion, die nach dem Start der Threads aufgerufen wird, auch wenn eine Ausnahme ausgelöst wurde; ein Beispiel wäre
threading.Event.set().start_threadsversucht, die gestarteten Threads beim Beenden zu verbinden.
- test.support.threading_helper.threading_cleanup(*original_values)¶
Bereinigt Threads, die nicht in original_values angegeben sind. Konzipiert, um eine Warnung auszugeben, wenn ein Test laufende Threads im Hintergrund hinterlässt.
- test.support.threading_helper.threading_setup()¶
Gibt die aktuelle Thread-Anzahl und eine Kopie der hängenden Threads zurück.
- test.support.threading_helper.wait_threads_exit(timeout=None)¶
Kontextmanager, der wartet, bis alle Threads, die innerhalb der
with-Anweisung erstellt wurden, beendet sind.
- test.support.threading_helper.catch_threading_exception()¶
Kontextmanager, der Ausnahmen von
threading.Threadmithilfe vonthreading.excepthook()abfängt.Attribute, die bei Erfassung einer Ausnahme gesetzt werden
exc_typeexc_valueexc_tracebackthread
Siehe Dokumentation zu
threading.excepthook().Diese Attribute werden beim Beenden des Kontextmanagers gelöscht.
Verwendung
with threading_helper.catch_threading_exception() as cm: # code spawning a thread which raises an exception ... # check the thread exception, use cm attributes: # exc_type, exc_value, exc_traceback, thread ... # exc_type, exc_value, exc_traceback, thread attributes of cm no longer # exists at this point # (to avoid reference cycles)
Hinzugefügt in Version 3.8.
- test.support.threading_helper.run_concurrently(worker_func, nthreads, args=(), kwargs={})¶
Führt die Worker-Funktion parallel in mehreren Threads aus. Löst eine Ausnahme erneut aus, wenn ein Thread eine auslöst, nachdem alle Threads beendet sind.
test.support.os_helper — Hilfsprogramme für os-Tests¶
Das Modul test.support.os_helper bietet Unterstützung für os-Tests.
Hinzugefügt in Version 3.10.
- test.support.os_helper.FS_NONASCII¶
Ein Nicht-ASCII-Zeichen, das von
os.fsencode()kodiert werden kann.
- test.support.os_helper.SAVEDCWD¶
Auf
os.getcwd()gesetzt.
- test.support.os_helper.TESTFN¶
Auf einen Namen gesetzt, der sicher als Name einer temporären Datei verwendet werden kann. Jede erstellte temporäre Datei sollte geschlossen und entlinkt (gelöscht) werden.
- test.support.os_helper.TESTFN_NONASCII¶
Auf einen Dateinamen gesetzt, der das Zeichen
FS_NONASCIIenthält, falls vorhanden. Dies garantiert, dass der Dateiname, wenn er existiert, mit der Standard-Dateisystemkodierung kodiert und dekodiert werden kann. Dies ermöglicht das einfache Überspringen von Tests, die einen Nicht-ASCII-Dateinamen erfordern, auf Plattformen, auf denen sie nicht funktionieren.
- test.support.os_helper.TESTFN_UNENCODABLE¶
Auf einen Dateinamen (Typ str) gesetzt, der im strikten Modus nicht von der Dateisystemkodierung kodiert werden kann. Dies kann
Nonesein, wenn ein solcher Dateiname nicht generiert werden kann.
- test.support.os_helper.TESTFN_UNDECODABLE¶
Auf einen Dateinamen (Typ bytes) gesetzt, der im strikten Modus nicht von der Dateisystemkodierung dekodiert werden kann. Dies kann
Nonesein, wenn ein solcher Dateiname nicht generiert werden kann.
- test.support.os_helper.TESTFN_UNICODE¶
Auf einen Nicht-ASCII-Namen für eine temporäre Datei gesetzt.
- class test.support.os_helper.EnvironmentVarGuard¶
Klasse zum vorübergehenden Setzen oder Aufheben von Umgebungsvariablen. Instanzen können als Kontextmanager verwendet werden und verfügen über eine vollständige Wörterbuchschnittstelle zum Abfragen/Ändern des zugrunde liegenden
os.environ. Nach dem Verlassen des Kontextmanagers werden alle Änderungen an Umgebungsvariablen, die über diese Instanz vorgenommen wurden, rückgängig gemacht.Geändert in Version 3.1: Wörterbuchschnittstelle hinzugefügt.
- class test.support.os_helper.FakePath(path)¶
Einfaches pfadähnliches Objekt. Es implementiert die Methode
__fspath__(), die einfach das Argument path zurückgibt. Wenn path eine Ausnahme ist, wird diese in__fspath__()ausgelöst.
- EnvironmentVarGuard.set(envvar, value)¶
Setzt die Umgebungsvariable
envvarvorübergehend auf den Wert vonvalue.
- EnvironmentVarGuard.unset(envvar, *others)¶
Hebt vorübergehend eine oder mehrere Umgebungsvariablen auf.
Geändert in Version 3.14: Mehrere Umgebungsvariablen können aufgehoben werden.
- test.support.os_helper.can_symlink()¶
Gibt
Truezurück, wenn das Betriebssystem symbolische Links unterstützt, andernfallsFalse.
- test.support.os_helper.can_xattr()¶
Gibt
Truezurück, wenn das Betriebssystem xattr unterstützt, andernfallsFalse.
- test.support.os_helper.change_cwd(path, quiet=False)¶
Ein Kontextmanager, der vorübergehend das aktuelle Arbeitsverzeichnis zu path ändert und das Verzeichnis liefert.
Wenn quiet
Falseist, löst der Kontextmanager bei einem Fehler eine Ausnahme aus. Andernfalls gibt er nur eine Warnung aus und behält das aktuelle Arbeitsverzeichnis bei.
- test.support.os_helper.create_empty_file(filename)¶
Erstellt eine leere Datei mit filename. Wenn sie bereits existiert, wird sie gekürzt.
- test.support.os_helper.fd_count()¶
Zählt die Anzahl der offenen Dateideskriptoren.
- test.support.os_helper.fs_is_case_insensitive(directory)¶
Gibt
Truezurück, wenn das Dateisystem für directory nicht zwischen Groß- und Kleinschreibung unterscheidet.
- test.support.os_helper.make_bad_fd()¶
Erstellt einen ungültigen Dateideskriptor, indem eine temporäre Datei geöffnet und geschlossen wird, und gibt deren Deskriptor zurück.
- test.support.os_helper.rmdir(filename)¶
Ruft
os.rmdir()für filename auf. Auf Windows-Plattformen wird dies mit einer Warteschleife umschlossen, die die Existenz der Datei prüft, was aufgrund von Antivirenprogrammen erforderlich ist, die Dateien offen halten und die Löschung verhindern können.
- test.support.os_helper.rmtree(path)¶
Ruft
shutil.rmtree()für path auf oder ruftos.lstat()undos.rmdir()auf, um einen Pfad und dessen Inhalt zu entfernen. Wie beirmdir()wird auf Windows-Plattformen dies mit einer Warteschleife umschlossen, die die Existenz der Dateien prüft.
- @test.support.os_helper.skip_unless_symlink¶
Ein Dekorator zum Ausführen von Tests, die Unterstützung für symbolische Links erfordern.
- @test.support.os_helper.skip_unless_xattr¶
Ein Dekorator zum Ausführen von Tests, die Unterstützung für xattr erfordern.
- test.support.os_helper.temp_cwd(name='tempcwd', quiet=False)¶
Ein Kontextmanager, der vorübergehend ein neues Verzeichnis erstellt und das aktuelle Arbeitsverzeichnis (CWD) ändert.
Der Kontextmanager erstellt vor dem vorübergehenden Ändern des aktuellen Arbeitsverzeichnisses ein temporäres Verzeichnis im aktuellen Verzeichnis mit dem Namen name. Wenn name
Noneist, wird das temporäre Verzeichnis mithilfe vontempfile.mkdtemp()erstellt.Wenn quiet
Falseist und es nicht möglich ist, das CWD zu erstellen oder zu ändern, wird ein Fehler ausgelöst. Andernfalls wird nur eine Warnung ausgegeben und das ursprüngliche CWD wird verwendet.
- test.support.os_helper.temp_dir(path=None, quiet=False)¶
Ein Kontextmanager, der ein temporäres Verzeichnis an path erstellt und das Verzeichnis liefert.
Wenn path
Noneist, wird das temporäre Verzeichnis mithilfe vontempfile.mkdtemp()erstellt. Wenn quietFalseist, löst der Kontextmanager bei einem Fehler eine Ausnahme aus. Andernfalls wird, wenn path angegeben ist und nicht erstellt werden kann, nur eine Warnung ausgegeben.
- test.support.os_helper.temp_umask(umask)¶
Ein Kontextmanager, der vorübergehend die Prozess-Umask setzt.
- test.support.os_helper.unlink(filename)¶
Ruft
os.unlink()für filename auf. Wie beirmdir()wird auf Windows-Plattformen dies mit einer Warteschleife umschlossen, die die Existenz der Datei prüft.
test.support.import_helper — Hilfsprogramme für Import-Tests¶
Das Modul test.support.import_helper bietet Unterstützung für Import-Tests.
Hinzugefügt in Version 3.10.
- test.support.import_helper.forget(module_name)¶
Entfernt das Modul mit dem Namen module_name aus
sys.modulesund löscht alle Bytecode-kompilierten Dateien des Moduls.
- test.support.import_helper.import_fresh_module(name, fresh=(), blocked=(), deprecated=False)¶
Diese Funktion importiert und gibt eine frische Kopie des benannten Python-Moduls zurück, indem das benannte Modul vor dem Import aus
sys.modulesentfernt wird. Beachten Sie, dass im Gegensatz zureload()das ursprüngliche Modul von dieser Operation nicht betroffen ist.fresh ist ein iterierbares Objekt mit zusätzlichen Modulnamen, die ebenfalls aus dem Cache
sys.modulesentfernt werden, bevor der Import durchgeführt wird.blocked ist ein iterierbares Objekt mit Modulnamen, die während des Imports durch
Noneim Modul-Cache ersetzt werden, um sicherzustellen, dass Versuche, sie zu importieren, einenImportErrorauslösen.Das benannte Modul und alle in den Parametern fresh und blocked benannten Module werden vor Beginn des Imports gespeichert und nach Abschluss des frischen Imports wieder in
sys.moduleseingefügt.Modul- und Paket-Deprecation-Meldungen werden während dieses Imports unterdrückt, wenn deprecated
Trueist.Diese Funktion löst einen
ImportErroraus, wenn das benannte Modul nicht importiert werden kann.Beispiel für die Verwendung
# Get copies of the warnings module for testing without affecting the # version being used by the rest of the test suite. One copy uses the # C implementation, the other is forced to use the pure Python fallback # implementation py_warnings = import_fresh_module('warnings', blocked=['_warnings']) c_warnings = import_fresh_module('warnings', fresh=['_warnings'])
Hinzugefügt in Version 3.1.
- test.support.import_helper.import_module(name, deprecated=False, *, required_on=())¶
Diese Funktion importiert und gibt das benannte Modul zurück. Im Gegensatz zu einem normalen Import löst diese Funktion
unittest.SkipTestaus, wenn das Modul nicht importiert werden kann.Modul- und Paket-Deprecation-Meldungen werden während dieses Imports unterdrückt, wenn deprecated
Trueist. Wenn ein Modul auf einer Plattform erforderlich, für andere aber optional ist, setzen Sie required_on auf ein iterierbares Objekt mit Plattformpräfixen, die mitsys.platformverglichen werden.Hinzugefügt in Version 3.1.
- test.support.import_helper.modules_setup()¶
Gibt eine Kopie von
sys.moduleszurück.
- test.support.import_helper.modules_cleanup(oldmodules)¶
Entfernt Module mit Ausnahme von oldmodules und
encodings, um den internen Cache zu erhalten.
- test.support.import_helper.unload(name)¶
Löscht name aus
sys.modules.
- test.support.import_helper.make_legacy_pyc(source)¶
Verschiebt eine PEP 3147/PEP 488 pyc-Datei an ihren Legacy-pyc-Speicherort und gibt den Dateisystempfad zur Legacy-pyc-Datei zurück. Der Wert source ist der Dateisystempfad zur Quelldatei. Sie muss nicht existieren, aber die PEP 3147/488 pyc-Datei muss existieren.
- class test.support.import_helper.CleanImport(*module_names)¶
Ein Kontextmanager, um den Import zu erzwingen, eine neue Modulreferenz zurückzugeben. Dies ist nützlich zum Testen von Modul-Level-Verhaltensweisen, wie z. B. das Ausgeben einer
DeprecationWarningbeim Import. Beispielverwendungwith CleanImport('foo'): importlib.import_module('foo') # New reference.
- class test.support.import_helper.DirsOnSysPath(*paths)¶
Ein Kontextmanager zum vorübergehenden Hinzufügen von Verzeichnissen zu
sys.path.Dies erstellt eine Kopie von
sys.path, fügt alle als Positionsargumente übergebenen Verzeichnisse hinzu und stellt dannsys.pathbeim Beenden des Kontexts wieder auf die kopierten Einstellungen zurück.Beachten Sie, dass *alle* Modifikationen von
sys.pathim Körper des Kontextmanagers, einschließlich des Ersetzens des Objekts, am Ende des Blocks rückgängig gemacht werden.
test.support.warnings_helper — Hilfsprogramme für Warnungstests¶
Das Modul test.support.warnings_helper bietet Unterstützung für Warnungstests.
Hinzugefügt in Version 3.10.
- test.support.warnings_helper.ignore_warnings(*, category)¶
Unterdrückt Warnungen, die Instanzen von category sind, was
Warningoder eine Unterklasse davon sein muss. Ungefähr äquivalent zuwarnings.catch_warnings()mitwarnings.simplefilter('ignore', category=category). Zum Beispiel@warning_helper.ignore_warnings(category=DeprecationWarning) def test_suppress_warning(): # do something
Hinzugefügt in Version 3.8.
- test.support.warnings_helper.check_no_resource_warning(testcase)¶
Kontextmanager, um zu prüfen, ob keine
ResourceWarningausgelöst wurde. Sie müssen das Objekt, das möglicherweiseResourceWarningauslöst, vor dem Ende des Kontextmanagers entfernen.
- test.support.warnings_helper.check_syntax_warning(testcase, statement, errtext='', *, lineno=1, offset=None)¶
Testet auf Syntaxwarnungen in statement, indem versucht wird, statement zu kompilieren. Testet auch, dass die
SyntaxWarningnur einmal ausgelöst wird und dass sie in einenSyntaxErrorumgewandelt wird, wenn sie zu einem Fehler wird. testcase ist dieunittest-Instanz für den Test. errtext ist der reguläre Ausdruck, der die Zeichenkettendarstellung der ausgelöstenSyntaxWarningund des ausgelöstenSyntaxErrorabgleichen sollte. Wenn lineno nichtNoneist, wird mit der Zeile der Warnung und des Fehlers verglichen. Wenn offset nichtNoneist, wird mit dem Offset des Fehlers verglichen.Hinzugefügt in Version 3.8.
- test.support.warnings_helper.check_warnings(*filters, quiet=True)¶
Eine praktische Wrapper-Funktion für
warnings.catch_warnings(), die das Testen, ob eine Warnung korrekt ausgelöst wurde, erleichtert. Sie ist annähernd äquivalent zum Aufrufen vonwarnings.catch_warnings(record=True)mitwarnings.simplefilter()aufalwaysgesetzt und mit der Option, die aufgezeichneten Ergebnisse automatisch zu validieren.check_warningsakzeptiert 2-Tupel der Form("message regexp", WarningCategory)als Positionsargumente. Wenn ein oder mehrere filters angegeben sind oder wenn das optionale Schlüsselwortargument quietFalseist, wird geprüft, ob die Warnungen wie erwartet sind: Jeder angegebene Filter muss mindestens eine der von dem eingeschlossenen Code ausgelösten Warnungen abgleichen, sonst schlägt der Test fehl, und wenn Warnungen ausgelöst werden, die nicht mit einem der angegebenen Filter übereinstimmen, schlägt der Test fehl. Um die erste dieser Prüfungen zu deaktivieren, setzen Sie quiet aufTrue.Wenn keine Argumente angegeben sind, ist der Standardwert
check_warnings(("", Warning), quiet=True)
In diesem Fall werden alle Warnungen abgefangen und keine Fehler ausgelöst.
Beim Eintritt in den Kontextmanager wird eine Instanz von
WarningRecorderzurückgegeben. Die zugrunde liegende Warnungsliste voncatch_warnings()ist über das Attributwarningsdes Rekorders verfügbar. Als Komfortfunktion können die Attribute des Objekts, das die zuletzt aufgetretene Warnung darstellt, auch direkt über das Rekorderobjekt aufgerufen werden (siehe Beispiel unten). Wenn keine Warnung ausgelöst wurde, geben alle Attribute, die sonst auf einem Objekt erwartet würden, das eine Warnung darstellt,Nonezurück.Das Rekorderobjekt hat auch eine Methode
reset(), die die Warnungsliste leert.Der Kontextmanager ist für die Verwendung wie folgt konzipiert
with check_warnings(("assertion is always true", SyntaxWarning), ("", UserWarning)): exec('assert(False, "Hey!")') warnings.warn(UserWarning("Hide me!"))
In diesem Fall würde
check_warnings()einen Fehler auslösen, wenn entweder die Warnung nicht ausgelöst wurde oder eine andere Warnung ausgelöst wurde.Wenn ein Test tiefer in die Warnungen schauen muss, anstatt nur zu prüfen, ob sie aufgetreten sind oder nicht, kann Code wie dieser verwendet werden
with check_warnings(quiet=True) as w: warnings.warn("foo") assert str(w.args[0]) == "foo" warnings.warn("bar") assert str(w.args[0]) == "bar" assert str(w.warnings[0].args[0]) == "foo" assert str(w.warnings[1].args[0]) == "bar" w.reset() assert len(w.warnings) == 0
Hier werden alle Warnungen abgefangen und der Testcode testet die erfassten Warnungen direkt.
Geändert in Version 3.2: Neue optionale Argumente filters und quiet.
- class test.support.warnings_helper.WarningsRecorder¶
Klasse zur Aufzeichnung von Warnungen für Unit-Tests. Weitere Details finden Sie in der Dokumentation von
check_warnings()oben.