Escribir pruebas¶
Las pruebas en MicroPython se encuentran en la ruta tests/. A continuación se muestra una lista de los directorios clave y del script ejecutor run-tests.py:
.
├── basics
├── extmod
├── float
├── micropython
├── run-tests.py
...
Hay subcarpetas que se mantienen para categorizar las pruebas. Añade una prueba creando un archivo nuevo en una de las carpetas existentes o en una carpeta nueva. También es posible crear pruebas personalizadas fuera de esta carpeta de pruebas, lo que sería recomendable para un port personalizado.
Por ejemplo, añade el siguiente código en un archivo print.py dentro del subdirectorio tests/unix/:
def print_one():
print(1)
print_one()
Si ejecutas tus pruebas, esta prueba debería aparecer en la salida de las pruebas:
$ 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
Las pruebas se ejecutan comparando la salida del objetivo de prueba con la salida de CPython. Por tanto, cualquier prueba debería usar sentencias print para indicar los resultados de la prueba.
Para las pruebas que no pueden compararse con CPython (es decir, funcionalidad específica de micropython), puedes proporcionar un archivo .py.exp que se usará como referencia (verdad de base) para la comparación.
La otra forma de ejecutar las pruebas, que resulta útil al ejecutarlas en objetivos distintos del port Unix, es:
$ cd tests
$ ./run-tests.py
Luego, para ejecutarlas en una placa:
$ ./run-tests.py -t /dev/ttyACM0
Y para ejecutar solo un conjunto determinado de pruebas (por ejemplo, un directorio):
$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py
Uso de run-tests.py¶
El script run-tests.py admite varios parámetros para personalizar la ejecución de las pruebas:
Selección de objetivo y dispositivo:
-t, --test-instance
La opción -t acepta lo siguiente para la instancia de prueba:
unix - usa el port Unix de MicroPython, especificado por la variable de entorno MICROPY_MICROPYTHON (que por defecto es la variante estándar del port unix o windows, según la plataforma anfitriona)
webassembly - usa el port webassembly de MicroPython, especificado por la variable de entorno MICROPY_MICROPYTHON_MJS (que por defecto es la variante estándar del port webassembly)
port:<device> - conecta y usa el dispositivo de puerto serie indicado
a<n> - conecta y usa /dev/ttyACM<n>
u<n> - conecta y usa /dev/ttyUSB<n>
c<n> - conecta y usa COM<n>
exec:<command> - ejecuta un comando y se conecta a su stdin/stdout
execpty:<command> - ejecuta un comando y se conecta al dispositivo /dev/pts/<n> que se imprime
<a>.<b>.<c>.<d> - conecta a la dirección IPv4 indicada
cualquier otra cosa especifica un puerto serie
Selección de pruebas:
-d, --test-dirs- Especifica uno o más directorios de pruebas a ejecutar-i, --include REGEX- Incluye las pruebas que coincidan con el patrón regex-e, --exclude REGEX- Excluye las pruebas que coincidan con el patrón regexfiles- Archivos de prueba específicos a ejecutar
Opciones de ejecución:
--emit <EMITTER>- Emisor de MicroPython, EMITTER puede ser bytecode o native. Por defecto: bytecode--via-mpy- Compila primero los archivos .py a .mpy--heapsize- Establece el tamaño del montón (heap) para las pruebas-j, --jobs N- Número de pruebas a ejecutar simultáneamente
Establece la variable de entorno MICROPY_MPYCROSS para usar una versión específica de mpy-cross al usar --via-mpy.
Gestión de resultados:
-r, --result-dir- Directorio para los resultados de las pruebas. Por defecto: results/--print-failures- Muestra el diff de las pruebas fallidas y sale--clean-failures- Elimina los archivos .exp y .out de pruebas fallidas anteriores--run-failures- Vuelve a ejecutar solo las pruebas que fallaron anteriormente
Ejemplos:
# 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