Tesztek írása

A MicroPython tesztjei a tests/ útvonalon találhatók. Az alábbi a kulcsfontosságú könyvtárak és a run-tests.py futtatószkript felsorolása:

.
 ├── basics
 ├── extmod
 ├── float
 ├── micropython
 ├── run-tests.py
 ...

Vannak almappák, amelyeket a tesztek kategorizálására tartanak fenn. Tesztet úgy adhat hozzá, hogy létrehoz egy új fájlt valamelyik meglévő mappában vagy egy új mappában. Lehetséges egyéni teszteket is készíteni ezen a tests mappán kívül, ami egyéni port esetén ajánlott.

Például adja hozzá a következő kódot egy print.py nevű fájlban a tests/unix/ alkönyvtárban:

def print_one():
    print(1)

print_one()

Ha lefuttatja a tesztjeit, ennek a tesztnek meg kell jelennie a teszt kimenetében:

$ 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

A teszteket úgy futtatjuk, hogy összehasonlítjuk a teszt-célpont kimenetét a CPython kimenetével. Ezért minden tesztnek print utasításokat kell használnia a teszteredmények jelzésére.

Azon tesztekhez, amelyek nem hasonlíthatók össze a CPythonnal (azaz micropython-specifikus funkcionalitáshoz), megadhat egy .py.exp fájlt, amelyet az összehasonlítás alapigazságaként használunk.

A tesztek futtatásának másik módja, amely akkor hasznos, ha a Unix porttól eltérő célpontokon futtat, a következő:

$ cd tests
$ ./run-tests.py

Ezután egy panelen való futtatáshoz:

$ ./run-tests.py -t /dev/ttyACM0

És csak egy bizonyos teszthalmaz futtatásához (pl. egy könyvtár):

$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py

A run-tests.py használata

A run-tests.py szkript több paramétert is támogat a tesztvégrehajtás testreszabásához:

Célpont- és eszközválasztás:

  • -t, --test-instance

A -t opció a következőket fogadja el a teszt-példányhoz:

  • unix - a MicroPython unix portját használja, amelyet a MICROPY_MICROPYTHON környezeti változó határoz meg (amelynek alapértelmezett értéke a unix vagy a windows port standard változata, a host platformtól függően)

  • webassembly - a MicroPython webassembly portját használja, amelyet a MICROPY_MICROPYTHON_MJS környezeti változó határoz meg (amelynek alapértelmezett értéke a webassembly port standard változata)

  • port:<device> - csatlakozás a megadott soros port eszközhöz és annak használata

  • a<n> - csatlakozás a /dev/ttyACM<n>-hez és annak használata

  • u<n> - csatlakozás a /dev/ttyUSB<n>-hez és annak használata

  • c<n> - csatlakozás a COM<n>-hez és annak használata

  • exec:<command> - egy parancs végrehajtása és csatlakozás annak stdin/stdout csatornáihoz

  • execpty:<command> - egy parancs végrehajtása és csatlakozás a kiírt /dev/pts/<n> eszközhöz

  • <a>.<b>.<c>.<d> - csatlakozás a megadott IPv4 címhez

  • bármi más egy soros portot ad meg

Tesztválasztás:

  • -d, --test-dirs - Egy vagy több futtatandó tesztkönyvtár megadása

  • -i, --include REGEX - A regex mintára illeszkedő tesztek bevonása

  • -e, --exclude REGEX - A regex mintára illeszkedő tesztek kizárása

  • files - Konkrét futtatandó tesztfájlok

Végrehajtási beállítások:

  • --emit <EMITTER> - MicroPython kibocsátó (emitter), az EMITTER lehet bytecode vagy native. Alapértelmezett: bytecode

  • --via-mpy - A .py fájlok előzetes lefordítása .mpy fájlokká

  • --heapsize - A heap méretének beállítása a tesztekhez

  • -j, --jobs N - Az egyidejűleg futtatandó tesztek száma

Állítsa be a MICROPY_MPYCROSS környezeti változót az mpy-cross egy adott verziójának használatához a --via-mpy használatakor.

Eredménykezelés:

  • -r, --result-dir - A teszteredmények könyvtára. Alapértelmezett: results/

  • --print-failures - A sikertelen tesztek diff-jének megjelenítése és kilépés

  • --clean-failures - A korábbi sikertelen tesztek .exp és .out fájljainak törlése

  • --run-failures - Csak a korábban sikertelen tesztek újrafuttatása

Példák:

# 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