Bien configurer son environnement de développement Python : Standardiser l'exécution des tests avec tox. Partie 4
tox permet d'automatiser l'exécution de la suite de tests d'un projet dans plusieurs environnements virtuels (différentes versions de Python ou d'interpréteurs) en une seule commande. Cela s'avère vite indispensable lorsque l'on développe un module open source.
Cet article fait partie fait partie d'une série d'articles présentant quelques bonnes pratiques qui vous permettront d'avoir un environnement de développement Python aux petits oignons :
- Les environnements virtuels. Partie 1
- Personnaliser le script de démarrage du shell Python. Partie 2
- Valider son code Python avec flake8. Partie 3
- Standardiser l'exécution des tests avec tox. Partie 4
Standardiser l'exécution des tests avec tox
Intégrons le à un projet existant, au hasard Django :
# Créons un projet dédié mkproject tox-django (tox-django) cdproject # Installation de tox (tox-django) pip install tox # Clone du code du projet Django (tox-django) git clone git@github.com:django/django.git
Ajoutons à présent un fichier tox.ini permettant d'installer le projet et de lancer la suite de tests du projet dans deux environnements : Python 2.7 et Python 3.4. On en profite pour générer un rapport de couverture de test HTML qui s'ouvrira automatiquement.
(tox-django) cd django (tox-django) vi tox.ini
# tox.ini, à mettre dans le dossier que setup.py [tox] envlis = py27,py34 [testenv:py27] changedir = tests # Installe coverage dans l'environnement virtuel deps = coverage # Commandes externes à l'environnement virtuel, pour éviter les warnings whitelist_externals = open # La documentation expliquant comment lancer la suite de tests Django est ici : # https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/ commands = pip install -r requirements/py2.txt coverage erase coverage run --rcfile=.coveragerc --include=*site-packages/django/* runtests.py --settings=test_sqlite --parallel=1 coverage html open coverage_html/index.html [testenv:py34] changedir = tests deps = coverage whitelist_externals = open commands = pip install -r requirements/py3.txt coverage erase coverage run --rcfile=.coveragerc --include=*site-packages/django/* runtests.py --settings=test_sqlite --parallel=1 coverage html open coverage_html/index.html
Pour lancer les tests, une commande suffit à présent :
(tox-django) tox
Il est également possible de préciser un environnement particulier :
(tox-django) tox -e py34