Écrire des tests¶
Les tests de MicroPython se trouvent dans le chemin tests/. Voici une liste des répertoires clés et du script d’exécution run-tests.py :
.
├── basics
├── extmod
├── float
├── micropython
├── run-tests.py
...
Des sous-dossiers sont maintenus pour catégoriser les tests. Ajoutez un test en créant un nouveau fichier dans l’un des dossiers existants ou dans un nouveau dossier. Il est également possible de créer des tests personnalisés en dehors de ce dossier tests, ce qui serait recommandé pour un port personnalisé.
Par exemple, ajoutez le code suivant dans un fichier print.py du sous-répertoire tests/unix/ :
def print_one():
print(1)
print_one()
Si vous exécutez vos tests, ce test devrait apparaître dans la sortie des tests :
$ 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
Les tests sont exécutés en comparant la sortie de la cible de test à celle de CPython. Tout test doit donc utiliser des instructions print pour indiquer les résultats du test.
Pour les tests qui ne peuvent pas être comparés à CPython (c.-à-d. les fonctionnalités propres à micropython), vous pouvez fournir un fichier .py.exp qui sera utilisé comme référence pour la comparaison.
L’autre façon d’exécuter les tests, utile lors de l’exécution sur des cibles autres que le port Unix, est la suivante :
$ cd tests
$ ./run-tests.py
Puis, pour exécuter sur une carte :
$ ./run-tests.py -t /dev/ttyACM0
Et pour n’exécuter qu’un certain ensemble de tests (par exemple un répertoire) :
$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py
Utilisation de run-tests.py¶
Le script run-tests.py prend en charge plusieurs paramètres pour personnaliser l’exécution des tests :
Sélection de la cible et du périphérique :
-t, --test-instance
L’option -t accepte les valeurs suivantes pour l’instance de test :
unix - utilise le port unix de MicroPython, spécifié par la variable d’environnement MICROPY_MICROPYTHON (qui prend par défaut la variante standard du port unix ou windows, selon la plateforme hôte)
webassembly - utilise le port webassembly de MicroPython, spécifié par la variable d’environnement MICROPY_MICROPYTHON_MJS (qui prend par défaut la variante standard du port webassembly)
port:<device> - se connecte au périphérique de port série donné et l’utilise
a<n> - se connecte à /dev/ttyACM<n> et l’utilise
u<n> - se connecte à /dev/ttyUSB<n> et l’utilise
c<n> - se connecte à COM<n> et l’utilise
exec:<command> - exécute une commande et s’attache à son stdin/stdout
execpty:<command> - exécute une commande et s’attache au périphérique /dev/pts/<n> affiché
<a>.<b>.<c>.<d> - se connecte à l’adresse IPv4 donnée
toute autre valeur spécifie un port série
Sélection des tests :
-d, --test-dirs- Spécifie un ou plusieurs répertoires de tests à exécuter-i, --include REGEX- Inclut les tests correspondant au motif regex-e, --exclude REGEX- Exclut les tests correspondant au motif regexfiles- Fichiers de test spécifiques à exécuter
Options d’exécution :
--emit <EMITTER>- Émetteur MicroPython, EMITTER peut être bytecode ou native. Par défaut : bytecode--via-mpy- Compile d’abord les fichiers .py en .mpy--heapsize- Définit la taille du tas pour les tests-j, --jobs N- Nombre de tests à exécuter simultanément
Définissez la variable d’environnement MICROPY_MPYCROSS pour utiliser une version spécifique de mpy-cross lors de l’utilisation de --via-mpy.
Gestion des résultats :
-r, --result-dir- Répertoire pour les résultats des tests. Par défaut : results/--print-failures- Affiche le diff des tests échoués puis quitte--clean-failures- Supprime les fichiers .exp et .out des tests précédemment échoués--run-failures- Réexécute uniquement les tests précédemment échoués
Exemples :
# 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