Tests schreiben¶
Tests in MicroPython befinden sich im Pfad tests/. Das Folgende ist eine Auflistung der wichtigsten Verzeichnisse und des Runner-Skripts run-tests.py:
.
├── basics
├── extmod
├── float
├── micropython
├── run-tests.py
...
Es werden Unterordner gepflegt, um die Tests zu kategorisieren. Fügen Sie einen Test hinzu, indem Sie eine neue Datei in einem der vorhandenen Ordner oder in einem neuen Ordner erstellen. Es ist auch möglich, eigene Tests außerhalb dieses Tests-Ordners zu erstellen, was für einen eigenen Port empfohlen würde.
Fügen Sie zum Beispiel den folgenden Code in einer Datei print.py im Unterverzeichnis tests/unix/ hinzu:
def print_one():
print(1)
print_one()
Wenn Sie Ihre Tests ausführen, sollte dieser Test in der Testausgabe erscheinen:
$ cd ports/unix
$ make tests
skip unix/extra_coverage.py
pass unix/ffi_callback.py
pass unix/ffi_float.py
pass unix/ffi_float2.py
pass unix/print.py
pass unix/time.py
pass unix/time2.py
Tests werden ausgeführt, indem die Ausgabe des Testziels mit der Ausgabe von CPython verglichen wird. Daher sollte jeder Test print-Anweisungen verwenden, um die Testergebnisse anzuzeigen.
Für Tests, die nicht mit CPython verglichen werden können (d. h. micropython-spezifische Funktionalität), können Sie eine .py.exp-Datei bereitstellen, die als Wahrheit für den Vergleich verwendet wird.
Die andere Möglichkeit, Tests auszuführen, die nützlich ist, wenn man auf anderen Zielen als dem Unix-Port arbeitet, ist:
$ cd tests
$ ./run-tests.py
Und dann zum Ausführen auf einem Board:
$ ./run-tests.py -t /dev/ttyACM0
Und um nur eine bestimmte Menge von Tests auszuführen (z. B. ein Verzeichnis):
$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py
Verwendung von run-tests.py¶
Das Skript run-tests.py unterstützt mehrere Parameter, um die Testausführung anzupassen:
Ziel- und Geräteauswahl:
-t, --test-instance
Die Option -t akzeptiert die folgenden Werte für die Testinstanz:
unix - den Unix-Port von MicroPython verwenden, angegeben durch die Umgebungsvariable MICROPY_MICROPYTHON (die standardmäßig auf die Standardvariante entweder des Unix- oder des Windows-Ports verweist, je nach Host-Plattform)
webassembly - den webassembly-Port von MicroPython verwenden, angegeben durch die Umgebungsvariable MICROPY_MICROPYTHON_MJS (die standardmäßig auf die Standardvariante des webassembly-Ports verweist)
port:<device> - mit dem angegebenen seriellen Port-Gerät verbinden und es verwenden
a<n> - mit /dev/ttyACM<n> verbinden und es verwenden
u<n> - mit /dev/ttyUSB<n> verbinden und es verwenden
c<n> - mit COM<n> verbinden und es verwenden
exec:<command> - einen Befehl ausführen und sich an dessen stdin/stdout anhängen
execpty:<command> - einen Befehl ausführen und sich an das ausgegebene Gerät /dev/pts/<n> anhängen
<a>.<b>.<c>.<d> - mit der angegebenen IPv4-Adresse verbinden
alles andere gibt einen seriellen Port an
Testauswahl:
-d, --test-dirs- Ein oder mehrere auszuführende Testverzeichnisse angeben-i, --include REGEX- Tests einschließen, die dem Regex-Muster entsprechen-e, --exclude REGEX- Tests ausschließen, die dem Regex-Muster entsprechenfiles- Bestimmte auszuführende Testdateien
Ausführungsoptionen:
--emit <EMITTER>- MicroPython-Emitter, EMITTER kann bytecode oder native sein. Standard: bytecode--via-mpy- .py-Dateien zuerst zu .mpy kompilieren--heapsize- Heap-Größe für Tests festlegen-j, --jobs N- Anzahl der gleichzeitig auszuführenden Tests
Setzen Sie die Umgebungsvariable MICROPY_MPYCROSS, um eine bestimmte Version von mpy-cross zu verwenden, wenn Sie --via-mpy nutzen.
Ergebnisverwaltung:
-r, --result-dir- Verzeichnis für Testergebnisse. Standard: results/--print-failures- Diff fehlgeschlagener Tests anzeigen und beenden--clean-failures- .exp- und .out-Dateien aus früheren fehlgeschlagenen Tests löschen--run-failures- Nur zuvor fehlgeschlagene Tests erneut ausführen
Beispiele:
# Run only basic tests with native emitter
$ ./run-tests.py --emit native -d basics extmod
# Run tests excluding async functionality
$ ./run-tests.py -e async
# Run tests matching *_pep_*
$ ./run-tests.py -i *_pep_*
# Run specific test files in parallel
$ ./run-tests.py -j 4 basics/list*.py
# Test on a connected OpenMV Cam
$ ./run-tests.py -t /dev/ttyACM0
# or
$ ./run-tests.py -t a0
# Re-run only failed tests from previous run
$ ./run-tests.py --run-failures