Psaní testů¶
Testy v MicroPythonu se nacházejí v cestě tests/. Následuje výpis klíčových adresářů a spouštěcího skriptu run-tests.py:
.
├── basics
├── extmod
├── float
├── micropython
├── run-tests.py
...
Existují udržované podsložky, které kategorizují testy. Test přidáte vytvořením nového souboru v jedné z existujících složek nebo v nové složce. Je také možné vytvářet vlastní testy mimo tuto složku tests, což by bylo doporučeno pro vlastní port.
Například přidejte následující kód do souboru print.py v podadresáři tests/unix/:
def print_one():
print(1)
print_one()
Pokud spustíte své testy, měl by se tento test objevit ve výstupu testů:
$ 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
Testy se spouštějí porovnáním výstupu z testovaného cíle s výstupem z CPythonu. Každý test by proto měl pomocí příkazů print indikovat výsledky testu.
Pro testy, které nelze porovnat s CPythonem (tj. funkcionalitu specifickou pro micropython), můžete poskytnout soubor .py.exp, který bude použit jako referenční hodnota pro porovnání.
Druhý způsob spouštění testů, který je užitečný při spouštění na jiných cílech než na portu Unix, je:
$ cd tests
$ ./run-tests.py
Poté pro spuštění na desce:
$ ./run-tests.py -t /dev/ttyACM0
A pro spuštění pouze určité sady testů (např. adresáře):
$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py
Použití run-tests.py¶
Skript run-tests.py podporuje několik parametrů pro přizpůsobení spouštění testů:
Výběr cíle a zařízení:
-t, --test-instance
Volba -t přijímá pro testovací instanci následující hodnoty:
unix - použije unixový port MicroPythonu určený proměnnou prostředí MICROPY_MICROPYTHON (která má jako výchozí hodnotu standardní variantu portu unix nebo windows, v závislosti na hostitelské platformě)
webassembly - použije webassembly port MicroPythonu určený proměnnou prostředí MICROPY_MICROPYTHON_MJS (která má jako výchozí hodnotu standardní variantu webassembly portu)
port:<device> - připojí se k zadanému sériovému portu a použije jej
a<n> - připojí se k /dev/ttyACM<n> a použije jej
u<n> - připojí se k /dev/ttyUSB<n> a použije jej
c<n> - připojí se k COM<n> a použije jej
exec:<command> - spustí příkaz a připojí se k jeho stdin/stdout
execpty:<command> - spustí příkaz a připojí se k vypsanému zařízení /dev/pts/<n>
<a>.<b>.<c>.<d> - připojí se k zadané IPv4 adrese
cokoli jiného určuje sériový port
Výběr testů:
-d, --test-dirs- Určí jeden nebo více testovacích adresářů ke spuštění-i, --include REGEX- Zahrne testy odpovídající regulárnímu výrazu-e, --exclude REGEX- Vyloučí testy odpovídající regulárnímu výrazufiles- Konkrétní testovací soubory ke spuštění
Možnosti spuštění:
--emit <EMITTER>- Emitter MicroPythonu, EMITTER může být bytecode nebo native. Výchozí: bytecode--via-mpy- Nejprve zkompiluje soubory .py do .mpy--heapsize- Nastaví velikost haldy pro testy-j, --jobs N- Počet testů spuštěných současně
Nastavte proměnnou prostředí MICROPY_MPYCROSS pro použití konkrétní verze mpy-cross při použití --via-mpy.
Správa výsledků:
-r, --result-dir- Adresář pro výsledky testů. Výchozí: results/--print-failures- Zobrazí rozdíl (diff) neúspěšných testů a ukončí se--clean-failures- Smaže soubory .exp a .out z předchozích neúspěšných testů--run-failures- Znovu spustí pouze dříve neúspěšné testy
Příklady:
# 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