Maison >développement back-end >Tutoriel Python >Testez le code Python comme un pro avec Poetry, Tox, Nox et CI/CD

Testez le code Python comme un pro avec Poetry, Tox, Nox et CI/CD

Patricia Arquette
Patricia Arquetteoriginal
2025-01-07 07:07:40611parcourir

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.


Pourquoi devriez-vous même vous soucier des tests multi-versions ?

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.


Que sont Tox et Nox ?

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.


Créons quelque chose de cool

Voici l’offre :

Nous allons créer un mini projet avec deux fonctions simples :

  • Ajoutez deux nombres.
  • Soustrayez un nombre d'un autre.

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

Étape 1 : Écrivez le code

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.


Étape 2 : Écrivez quelques tests

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.


Étape 3 : Gérer les dépendances avec la poésie

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

Étape 4 : Exécutez des tests unitaires avec Pytest

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.


Étape 5 : Test avec Tox

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 :

Test Python Code Like a Pro with Poetry, Tox, Nox and CI/CD


Étape 6 : Test avec Nox

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 :

Test Python Code Like a Pro with Poetry, Tox, Nox and CI/CD


Étape 7 : Automatiser avec CI/CD

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

Terminons-le

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 :

  1. Tox est votre référence pour des tests simples et automatisés.
  2. Nox vous donne la liberté de personnaliser.
  3. La poésie facilite la gestion des dépendances.
  4. CI/CD garantit que vos tests s'exécutent automatiquement.

Des références bien sûr

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn