Scrierea testelor

Testele din MicroPython se află în calea tests/. În continuare este o listare a directoarelor cheie și a scriptului de rulare run-tests.py:

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

Există subdirectoare menținute pentru a clasifica testele. Adaugă un test creând un fișier nou într-unul dintre directoarele existente sau într-un director nou. Este de asemenea posibil să creezi teste personalizate în afara acestui director de teste, ceea ce ar fi recomandat pentru un port personalizat.

De exemplu, adaugă următorul cod într-un fișier print.py din subdirectorul tests/unix/:

def print_one():
    print(1)

print_one()

Dacă îți rulezi testele, acest test ar trebui să apară în rezultatul testelor:

$ 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

Testele sunt rulate comparând rezultatul de la ținta de test cu rezultatul de la CPython. Așadar, orice test ar trebui să folosească instrucțiuni print pentru a indica rezultatele testului.

Pentru testele care nu pot fi comparate cu CPython (adică funcționalitate specifică micropython), poți furniza un fișier .py.exp care va fi folosit drept referință pentru comparație.

Cealaltă modalitate de a rula testele, utilă atunci când se rulează pe alte ținte decât portul Unix, este:

$ cd tests
$ ./run-tests.py

Apoi, pentru a rula pe o placă:

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

Și pentru a rula doar un anumit set de teste (de exemplu un director):

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

Utilizarea run-tests.py

Scriptul run-tests.py suportă mai mulți parametri pentru a personaliza execuția testelor:

Selectarea țintei și a dispozitivului:

  • -t, --test-instance

Opțiunea -t acceptă următoarele pentru instanța de test:

  • unix - folosește portul unix al MicroPython, specificat de variabila de mediu MICROPY_MICROPYTHON (care implicit este varianta standard fie a portului unix, fie windows, în funcție de platforma gazdă)

  • webassembly - folosește portul webassembly al MicroPython, specificat de variabila de mediu MICROPY_MICROPYTHON_MJS (care implicit este varianta standard a portului webassembly)

  • port:<device> - se conectează la și folosește dispozitivul de port serial dat

  • a<n> - se conectează la și folosește /dev/ttyACM<n>

  • u<n> - se conectează la și folosește /dev/ttyUSB<n>

  • c<n> - se conectează la și folosește COM<n>

  • exec:<command> - execută o comandă și se atașează la stdin/stdout-ul acesteia

  • execpty:<command> - execută o comandă și se atașează la dispozitivul /dev/pts/<n> afișat

  • <a>.<b>.<c>.<d> - se conectează la adresa IPv4 dată

  • orice altceva specifică un port serial

Selectarea testelor:

  • -d, --test-dirs - Specifică unul sau mai multe directoare de teste de rulat

  • -i, --include REGEX - Include testele care se potrivesc cu tiparul regex

  • -e, --exclude REGEX - Exclude testele care se potrivesc cu tiparul regex

  • files - Fișiere de test specifice de rulat

Opțiuni de execuție:

  • --emit <EMITTER> - Emițătorul MicroPython, EMITTER poate fi bytecode sau native. Implicit: bytecode

  • --via-mpy - Compilează mai întâi fișierele .py în .mpy

  • --heapsize - Setează dimensiunea heap-ului pentru teste

  • -j, --jobs N - Numărul de teste de rulat simultan

Setează variabila de mediu MICROPY_MPYCROSS pentru a folosi o versiune specifică a mpy-cross atunci când folosești --via-mpy.

Gestionarea rezultatelor:

  • -r, --result-dir - Directorul pentru rezultatele testelor. Implicit: results/

  • --print-failures - Afișează diferențele testelor eșuate și iese

  • --clean-failures - Șterge fișierele .exp și .out din testele eșuate anterior

  • --run-failures - Rerulează doar testele eșuate anterior

Exemple:

# 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