Skriva tester

Tester i MicroPython finns under sökvägen tests/. Följande är en lista över viktiga kataloger och körningsskriptet run-tests.py:

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

Det finns underkataloger som upprätthålls för att kategorisera testerna. Lägg till ett test genom att skapa en ny fil i en av de befintliga katalogerna eller i en ny katalog. Det är också möjligt att skapa egna tester utanför denna tests-katalog, vilket skulle rekommenderas för en anpassad port.

Lägg till exempel till följande kod i en fil print.py i underkatalogen tests/unix/:

def print_one():
    print(1)

print_one()

Om du kör dina tester ska detta test visas i testutdatan:

$ 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

Tester körs genom att jämföra utdatan från testmålet med utdatan från CPython. Så alla tester bör använda print-satser för att indikera testresultat.

För tester som inte kan jämföras med CPython (dvs. micropython-specifik funktionalitet) kan du tillhandahålla en .py.exp-fil som kommer att användas som facit för jämförelsen.

Det andra sättet att köra tester, vilket är användbart vid körning på andra mål än Unix-porten, är:

$ cd tests
$ ./run-tests.py

Sedan för att köra på ett kort:

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

Och för att endast köra en viss uppsättning tester (t.ex. en katalog):

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

Använda run-tests.py

Skriptet run-tests.py stöder flera parametrar för att anpassa testkörningen:

Val av mål och enhet:

  • -t, --test-instance

Alternativet -t accepterar följande för testinstansen:

  • unix - använd unix-porten av MicroPython, angiven av miljövariabeln MICROPY_MICROPYTHON (som som standard är standardvarianten av antingen unix- eller windows-porten, beroende på värdplattformen)

  • webassembly - använd webassembly-porten av MicroPython, angiven av miljövariabeln MICROPY_MICROPYTHON_MJS (som som standard är standardvarianten av webassembly-porten)

  • port:<device> - anslut till och använd den angivna seriella portenheten

  • a<n> - anslut till och använd /dev/ttyACM<n>

  • u<n> - anslut till och använd /dev/ttyUSB<n>

  • c<n> - anslut till och använd COM<n>

  • exec:<command> - kör ett kommando och anslut till dess stdin/stdout

  • execpty:<command> - kör ett kommando och anslut till den utskrivna enheten /dev/pts/<n>

  • <a>.<b>.<c>.<d> - anslut till den angivna IPv4-adressen

  • allt annat anger en seriell port

Val av tester:

  • -d, --test-dirs - Ange en eller flera testkataloger att köra

  • -i, --include REGEX - Inkludera tester som matchar regex-mönstret

  • -e, --exclude REGEX - Exkludera tester som matchar regex-mönstret

  • files - Specifika testfiler att köra

Körningsalternativ:

  • --emit <EMITTER> - MicroPython-emitter, EMITTER kan vara bytecode eller native. Standard: bytecode

  • --via-mpy - Kompilera .py-filer till .mpy först

  • --heapsize - Ange heapstorlek för tester

  • -j, --jobs N - Antal tester att köra samtidigt

Ange miljövariabeln MICROPY_MPYCROSS för att använda en specifik version av mpy-cross vid användning av --via-mpy.

Resultathantering:

  • -r, --result-dir - Katalog för testresultat. Standard: results/

  • --print-failures - Visa diff för misslyckade tester och avsluta

  • --clean-failures - Ta bort .exp- och .out-filer från tidigare misslyckade tester

  • --run-failures - Kör endast om tidigare misslyckade tester

Exempel:

# 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