Pisanje testova

Testovi u MicroPythonu nalaze se na putanji tests/. Slijedi popis kljuÄnih direktorija i skripte za pokretanje run-tests.py:

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

OdrĹžavaju se podmape za kategorizaciju testova. Dodajte test stvaranjem nove datoteke u jednoj od postojeÄih mapa ili u novoj mapi. TakoÄer je moguÄe izraditi prilagoÄene testove izvan ove tests mape, ĹĄto bi se preporuÄilo za prilagoÄeni port.

Na primjer, dodajte sljedeÄi kod u datoteku print.py u poddirektoriju tests/unix/:

def print_one():
    print(1)

print_one()

Ako pokrenete svoje testove, ovaj test trebao bi se pojaviti u izlazu testa:

$ 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

Testovi se pokreÄu usporedbom izlaza ciljne platforme testa s izlazom CPythona. Stoga bi svaki test trebao koristiti print naredbe za oznaÄavanje rezultata testa.

Za testove koji se ne mogu usporediti s CPythonom (tj. funkcionalnost specifiÄnu za micropython), moĹžete pruĹžiti .py.exp datoteku koja Äe se koristiti kao referentna istina za usporedbu.

Drugi naÄin pokretanja testova, koji je koristan pri izvoÄenju na ciljnim platformama razliÄitima od Unix porta, jest:

$ cd tests
$ ./run-tests.py

Zatim za pokretanje na ploÄi:

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

I za pokretanje samo odreÄenog skupa testova (npr. direktorija):

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

KoriĹĄtenje run-tests.py

Skripta run-tests.py podrĹžava nekoliko parametara za prilagodbu izvoÄenja testova:

Odabir ciljne platforme i ureÄaja:

  • -t, --test-instance

Opcija -t prihvaÄa sljedeÄe za instancu testa:

  • unix - koristi unix port MicroPythona, odreÄen varijablom okoline MICROPY_MICROPYTHON (koja prema zadanim postavkama koristi standardnu varijantu unix ili windows porta, ovisno o host platformi)

  • webassembly - koristi webassembly port MicroPythona, odreÄen varijablom okoline MICROPY_MICROPYTHON_MJS (koja prema zadanim postavkama koristi standardnu varijantu webassembly porta)

  • port:<device> - povezuje se i koristi navedeni ureÄaj serijskog porta

  • a<n> - povezuje se i koristi /dev/ttyACM<n>

  • u<n> - povezuje se i koristi /dev/ttyUSB<n>

  • c<n> - povezuje se i koristi COM<n>

  • exec:<command> - izvrĹĄava naredbu i povezuje se na njezin stdin/stdout

  • execpty:<command> - izvrĹĄava naredbu i povezuje se na ispisani /dev/pts/<n> ureÄaj

  • <a>.<b>.<c>.<d> - povezuje se na navedenu IPv4 adresu

  • bilo ĹĄto drugo oznaÄava serijski port

Odabir testova:

  • -d, --test-dirs - Navedite jedan ili viĹĄe direktorija testova za pokretanje

  • -i, --include REGEX - UkljuÄi testove koji odgovaraju regex uzorku

  • -e, --exclude REGEX - IskljuÄi testove koji odgovaraju regex uzorku

  • files - Specifiäne datoteke testova za pokretanje

Opcije izvoÄenja:

  • --emit <EMITTER> - MicroPython emitter, EMITTER moĹže biti bytecode ili native. Zadano: bytecode

  • --via-mpy - Prvo prevedi .py datoteke u .mpy

  • --heapsize - Postavi veliÄinu gomile (heap) za testove

  • -j, --jobs N - Broj testova koji se izvode istovremeno

Postavite varijablu okoline MICROPY_MPYCROSS za koriĹĄtenje odreÄene verzije mpy-cross pri koriĹĄtenju --via-mpy.

Upravljanje rezultatima:

  • -r, --result-dir - Direktorij za rezultate testova. Zadano: results/

  • --print-failures - PrikaĹži razliku (diff) neuspjelih testova i izaÄi

  • --clean-failures - Izbriši .exp i .out datoteke iz prethodnih neuspjelih testova

  • --run-failures - Ponovno pokreni samo prethodno neuspjele testove

Primjeri:

# 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