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ýrazu

  • files - 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