Testien kirjoittaminen

MicroPythonin testit sijaitsevat polussa tests/. Seuraavassa on listaus keskeisistä hakemistoista ja run-tests.py-suoritusskriptistä:

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

Testien luokitteluun ylläpidetään alikansioita. Lisää testi luomalla uusi tiedosto johonkin olemassa olevista kansioista tai uuteen kansioon. On myös mahdollista tehdä mukautettuja testejä tämän tests-kansion ulkopuolelle, mitä suositeltaisiin mukautetulle portille.

Lisää esimerkiksi seuraava koodi tiedostoon print.py alihakemistossa tests/unix/:

def print_one():
    print(1)

print_one()

Jos ajat testisi, tämän testin pitäisi näkyä testitulosteessa:

$ 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

Testit ajetaan vertaamalla testikohteen tulostetta CPythonin tulosteeseen. Joten jokaisen testin tulisi käyttää print-lauseita testitulosten ilmaisemiseen.

Testeille, joita ei voida verrata CPythoniin (eli micropython-kohtaiselle toiminnallisuudelle), voit tarjota .py.exp-tiedoston, jota käytetään vertailun totuutena.

Toinen tapa ajaa testejä, joka on hyödyllinen ajettaessa muilla kohteilla kuin Unix-portilla, on:

$ cd tests
$ ./run-tests.py

Sen jälkeen ajaaksesi kortilla:

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

Ja ajaaksesi vain tietyn testijoukon (esim. hakemiston):

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

run-tests.py:n käyttäminen

run-tests.py-skripti tukee useita parametreja testien suorituksen mukauttamiseksi:

Kohteen ja laitteen valinta:

  • -t, --test-instance

-t-vaihtoehto hyväksyy testi-instanssille seuraavat:

  • unix - käytä MicroPythonin unix-porttia, joka määritellään MICROPY_MICROPYTHON-ympäristömuuttujalla (jonka oletuksena on joko unix- tai windows-portin vakiovariantti isäntäalustasta riippuen)

  • webassembly - käytä MicroPythonin webassembly-porttia, joka määritellään MICROPY_MICROPYTHON_MJS-ympäristömuuttujalla (jonka oletuksena on webassembly-portin vakiovariantti)

  • port:<device> - yhdistä annettuun sarjaporttilaitteeseen ja käytä sitä

  • a<n> - yhdistä laitteeseen /dev/ttyACM<n> ja käytä sitä

  • u<n> - yhdistä laitteeseen /dev/ttyUSB<n> ja käytä sitä

  • c<n> - yhdistä laitteeseen COM<n> ja käytä sitä

  • exec:<command> - suorita komento ja liity sen stdin/stdout-virtoihin

  • execpty:<command> - suorita komento ja liity tulostettuun /dev/pts/<n>-laitteeseen

  • <a>.<b>.<c>.<d> - yhdistä annettuun IPv4-osoitteeseen

  • mikä tahansa muu määrittää sarjaportin

Testien valinta:

  • -d, --test-dirs - Määritä yksi tai useampi ajettava testihakemisto

  • -i, --include REGEX - Sisällytä säännölliseen lausekkeeseen täsmäävät testit

  • -e, --exclude REGEX - Jätä pois säännölliseen lausekkeeseen täsmäävät testit

  • files - Tietyt ajettavat testitiedostot

Suoritusvalinnat:

  • --emit <EMITTER> - MicroPython-emitteri, EMITTER voi olla bytecode tai native. Oletus: bytecode

  • --via-mpy - Käännä .py-tiedostot ensin .mpy-muotoon

  • --heapsize - Aseta keon koko testejä varten

  • -j, --jobs N - Samanaikaisesti ajettavien testien määrä

Aseta MICROPY_MPYCROSS-ympäristömuuttuja käyttääksesi tiettyä mpy-cross-versiota, kun käytät --via-mpy-vaihtoehtoa.

Tulosten hallinta:

  • -r, --result-dir - Hakemisto testituloksille. Oletus: results/

  • --print-failures - Näytä epäonnistuneiden testien erot ja lopeta

  • --clean-failures - Poista .exp- ja .out-tiedostot aiemmista epäonnistuneista testeistä

  • --run-failures - Aja uudelleen vain aiemmin epäonnistuneet testit

Esimerkkejä:

# 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