Salut !
Vous avez un projet Python et vous devez vous assurer qu'il fonctionne sur toutes les versions de Python disponibles ? Croyez-moi, cela peut être un ÉNORME casse-tête. Mais ne vous inquiétez pas, je vous soutiens. Dans ce guide, je vais vous montrer comment utiliser Tox, Nox et CI/CD, des outils géniaux, pour tester votre code sur plusieurs versions de Python.
Et devinez quoi ? C'est plus facile que vous ne le pensez.
Au moment où vous aurez fini de lire ceci, vous exécuterez des tests comme un pro sur Python 3.8 à 3.13. Nous garderons les choses simples, amusantes et totalement réalisables. Ça a l'air bien ? Allons-y.
Imaginez ceci : vous écrivez du code Python sympa, et cela fonctionne sur votre ordinateur. Mais alors, BAM ! Un utilisateur vous envoie un e-mail vous informant que le problème est en panne sur Python 3.9. Vous l’essayez, et bien sûr, quelque chose ne va pas.
Pourquoi ?
Parce que Python a toutes ces versions, et chacune a ses bizarreries. Si vous ne testez pas votre code sur plusieurs versions, vous volez à l'aveugle.
Mais la BONNE NOUVELLE est que vous n'avez pas besoin d'installer manuellement un tas de versions de Python et d'exécuter des tests sur chacune. C'est là que Tox et Nox interviennent comme des super-héros.
Décomposons-le :
Tox : Considérez-le comme un robot qui teste votre code dans différents environnements Python. Il est super organisé et suit vos instructions à partir d’un simple fichier tox.ini. Vous dites à Tox quoi faire, et il le fait.
Nox : C'est comme Tox, mais plus cool à certains égards. Pourquoi? Parce qu'au lieu d'un fichier de configuration, vous devez écrire un script Python (noxfile.py). Vous souhaitez ajouter une logique ou des conditions personnalisées ? Nox vous soutient.
Alors, lequel est le meilleur ? Honnêtement, ça dépend. Si vous aimez les choses claires et simples, optez pour Tox. Si vous êtes du genre créatif et aimez la flexibilité, Nox est votre confiture.
Voici l’offre :
Nous allons créer un mini projet avec deux fonctions simples :
Nous écrirons quelques tests pour nous assurer qu'ils fonctionnent, puis nous utiliserons Tox et Nox pour les tester sur les versions Python 3.8 à 3.13.
Ça a l'air amusant, non ?
Voici la structure de fichiers avec laquelle nous travaillons :
tox-nox-python-test-automation/ ├── tox_nox_python_test_automation/ │ ├── __init__.py │ ├── main.py │ └── calculator.py ├── tests/ │ ├── __init__.py │ └── test_calculator.py ├── pyproject.toml ├── tox.ini ├── noxfile.py ├── README.md
Voici notre calculator.py :
def add(a, b): """Returns the sum of two numbers.""" return a + b def subtract(a, b): """Returns the difference of two numbers.""" return a - b
Simple, non ? Continuons ainsi.
Il est temps de s'assurer que notre code fonctionne. Voici notre test_calculator.py :
tox-nox-python-test-automation/ ├── tox_nox_python_test_automation/ │ ├── __init__.py │ ├── main.py │ └── calculator.py ├── tests/ │ ├── __init__.py │ └── test_calculator.py ├── pyproject.toml ├── tox.ini ├── noxfile.py ├── README.md
Nous utilisons pytest, un outil de test qui est essentiellement le MVP des tests Python. Si vous ne l’avez jamais utilisé, ne vous inquiétez pas, c’est super facile à prendre en main.
D'accord, alors comment pouvons-nous nous assurer que tous ceux qui travaillent sur ce projet utilisent les mêmes dépendances ? Nous utilisons Poetry, qui est comme un fichier exigences.txt suralimenté.
Voici à quoi ressemble notre pyproject.toml :
def add(a, b): """Returns the sum of two numbers.""" return a + b def subtract(a, b): """Returns the difference of two numbers.""" return a - b
Pour tout installer, lancez simplement :
import pytest from tox_nox_python_test_automation.calculator import add, subtract @pytest.mark.parametrize("a, b, expected", [ (1, 2, 3), (-1, 1, 0), (0, 0, 0), ]) def test_add(a, b, expected): assert add(a, b) == expected @pytest.mark.parametrize("a, b, expected", [ (5, 3, 2), (10, 5, 5), (-1, -1, 0), ]) def test_subtract(a, b, expected): assert subtract(a, b) == expected
Vous pouvez exécuter les tests unitaires de base de cette façon :
[tool.poetry] name = "tox_nox_python_tests" version = "0.1.0" description = "Testing with multiple Python versions using Tox and Nox." authors = ["Wallace Espindola <wallace.espindola@gmail.com>"] license = "MIT" [tool.poetry.dependencies] python = "^3.8" pytest = "^8.3" nox = "^2024.10.9" tox = "^4.23.2"
Et verra un test unitaire standard en cours d'exécution.
Tox est avant tout une question d'automatisation. Voici notre tox.ini :
poetry install
Exécutez Tox avec une seule commande :
poetry run pytest --verbose
Et boum ! Tox testera votre code sur chaque version de Python répertoriée. Voir un exemple de sortie ici :
Vous voulez plus de contrôle ? Nox vous permet de faire preuve de créativité. Voici notre noxfile.py :
[tox] envlist = py38, py39, py310, py311, py312, py313 [testenv] allowlist_externals = poetry commands_pre = poetry install --no-interaction --no-root commands = poetry run pytest
Exécutez Nox avec :
poetry run tox
Vous disposez désormais d'une flexibilité totale pour ajouter de la logique, ignorer des environnements ou faire tout ce dont vous avez besoin. Voir un exemple de sortie ici :
Pourquoi s’arrêter aux tests locaux ? Configurons cela pour qu'il s'exécute automatiquement sur GitHub Actions et GitLab CI/CD.
Actions GitHub
Voici un fichier de workflow .github/workflows/python-tests.yml :
import nox @nox.session(python=["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]) def tests(session): session.install("poetry") session.run("poetry", "install", "--no-interaction", "--no-root") session.run("pytest")
GitLab CI/CD
Voici un .gitlab-ci.yml :
poetry run nox
Vous l'avez fait ! Vous savez maintenant comment tester le code Python sur plusieurs versions à l'aide de Tox, Nox et Poetry.
Voici ce qu’il faut retenir :
Ce projet utilise Tox, Nox, Poetry et Pytest pour l'automatisation des tests. Pour une documentation détaillée, consultez :
Documentation toxique
Documentation Nox
Documentation poétique
Documentation Pytest
Besoin du code complet et des exemples ? Consultez le dépôt sur GitHub : tox-nox-python-tests.
Pour d'autres sujets intéressants et discussions techniques, consultez ma page LinkedIn.
Maintenant, allez-y et rendez vos projets Python à l'épreuve des balles ! ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!