Scrittura dei test¶
I test in MicroPython si trovano nel percorso tests/. Di seguito un elenco delle directory principali e dello script runner run-tests.py:
.
├── basics
├── extmod
├── float
├── micropython
├── run-tests.py
...
Sono presenti sottocartelle mantenute per categorizzare i test. Aggiungi un test creando un nuovo file in una delle cartelle esistenti o in una nuova cartella. È inoltre possibile creare test personalizzati al di fuori di questa cartella tests, cosa che sarebbe consigliata per un port personalizzato.
Per esempio, aggiungi il seguente codice in un file print.py nella sottodirectory tests/unix/:
def print_one():
print(1)
print_one()
Se esegui i tuoi test, questo test dovrebbe comparire nell’output dei test:
$ 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
I test vengono eseguiti confrontando l’output del target di test con l’output di CPython. Quindi qualsiasi test dovrebbe usare istruzioni print per indicare i risultati del test.
Per i test che non possono essere confrontati con CPython (cioè funzionalità specifiche di micropython), puoi fornire un file .py.exp che verrà usato come riferimento per il confronto.
L’altro modo per eseguire i test, utile quando si esegue su target diversi dal port Unix, è:
$ cd tests
$ ./run-tests.py
Poi per eseguire su una scheda:
$ ./run-tests.py -t /dev/ttyACM0
E per eseguire solo un determinato insieme di test (es. una directory):
$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py
Utilizzo di run-tests.py¶
Lo script run-tests.py supporta diversi parametri per personalizzare l’esecuzione dei test:
Selezione del target e del dispositivo:
-t, --test-instance
L’opzione -t accetta i seguenti valori per l’istanza di test:
unix - usa il port unix di MicroPython, specificato dalla variabile d’ambiente MICROPY_MICROPYTHON (che per default è la variante standard del port unix o windows, a seconda della piattaforma host)
webassembly - usa il port webassembly di MicroPython, specificato dalla variabile d’ambiente MICROPY_MICROPYTHON_MJS (che per default è la variante standard del port webassembly)
port:<device> - connetti e usa il dispositivo della porta seriale indicato
a<n> - connetti e usa /dev/ttyACM<n>
u<n> - connetti e usa /dev/ttyUSB<n>
c<n> - connetti e usa COM<n>
exec:<command> - esegui un comando e collegati al suo stdin/stdout
execpty:<command> - esegui un comando e collegati al dispositivo /dev/pts/<n> stampato
<a>.<b>.<c>.<d> - connetti all’indirizzo IPv4 indicato
qualsiasi altra cosa specifica una porta seriale
Selezione dei test:
-d, --test-dirs- Specifica una o più directory di test da eseguire-i, --include REGEX- Includi i test che corrispondono al pattern regex-e, --exclude REGEX- Escludi i test che corrispondono al pattern regexfiles- File di test specifici da eseguire
Opzioni di esecuzione:
--emit <EMITTER>- Emitter di MicroPython, EMITTER può essere bytecode o native. Default: bytecode--via-mpy- Compila prima i file .py in .mpy--heapsize- Imposta la dimensione dello heap per i test-j, --jobs N- Numero di test da eseguire simultaneamente
Imposta la variabile d’ambiente MICROPY_MPYCROSS per usare una versione specifica di mpy-cross quando usi --via-mpy.
Gestione dei risultati:
-r, --result-dir- Directory per i risultati dei test. Default: results/--print-failures- Mostra il diff dei test falliti ed esci--clean-failures- Elimina i file .exp e .out dai test falliti in precedenza--run-failures- Riesegui solo i test precedentemente falliti
Esempi:
# 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