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önstretfiles- 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