Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

Tutoriel PyTest : Installer, Écrire et Exécuter des Tests Python en Toute Confiance

Qu'est-ce que PyTest ?

PyTest est un framework de test puissant, open source, qui permet aux développeurs d'écrire des cas de test concis et scalables pour projets Python — qu'il s'agisse de tests unitaires, d'intégration ou de vérifications API de bout en bout. Il supporte l'exécution parallèle, l'injection de fixtures, la paramétrisation, et des rapports riches dès la sortie de la boîte.

Pourquoi Choisir PyTest ?

Installation de PyTest

Installez la dernière version stable avec pip :

pip install pytest

Vérifiez l'installation :

pytest --version

Pour contrôler une version spécifique, vous pouvez épingler une release, ex: pip install pytest==7.4.0.

Démarrage : Un Test de Base

Créez un répertoire de projet et ajoutez un fichier de test nommé test_sample1.py :

import pytest
def test_file1_method1():
    x = 5
    y = 6
    assert x + 1 == y, "Addition échouée"
    assert x == y, "Les valeurs devraient correspondre"
def test_file1_method2():
    x = 5
    y = 6
    assert x + 1 == y, "Addition échouée"

Lancez la suite de tests :

pytest

Exemple de sortie :

==================== test session starts ====================
collected 2 items
test_sample1.py F. [100%]
=================================== FAILURES ===================================
...

Comprendre les Assertions

Les assertions PyTest se comportent comme les instructions standard Python assert. En cas d'échec, le test s'arrête et PyTest rapporte l'emplacement exact et le message :

assert "hello" == "Hai", "Salutation non correspondante"

Règles de Découverte des Tests

Exécuter des Tests Spécifiques

Exécuter tous les tests d'un répertoire :

pytest

Exécuter un seul fichier :

pytest test_sample1.py

Filtrer par sous-chaîne :

pytest -k method1 -v

Exécuter par marqueur :

pytest -m set1

Exécution Parallèle

Installez le plugin xdist et lancez une exécution parallèle à 4 workers :

pip install pytest-xdist
pytest -n 4

Utiliser les Fixtures

Définissez une logique de setup réutilisable une fois et injectez-la dans les tests :

import pytest
@pytest.fixture
def supply_data():
    return [25, 35, 45]
def test_compare_with_first(supply_data):
    assert supply_data[0] == 25

Placez le code fixture dans conftest.py pour partager à travers plusieurs modules de test.

Tests Paramétrisés

Exécutez un seul test avec de multiples entrées :

import pytest
@pytest.mark.parametrize("a, b, expected", [(5, 5, 10), (3, 5, 8)])
def test_add(a, b, expected):
    assert a + b == expected

Sauter et Échecs Attendus

Utilisez des marqueurs pour sauter ou attendre des échecs sans polluer les résultats :

import pytest
@pytest.mark.skip(reason="Fonctionnalité pas encore disponible")
def test_future_feature():
    pass
@pytest.mark.xfail(reason="Bug connu")
def test_known_issue():
    assert 1 == 2

Génération de Rapports XML

Générez un fichier XML compatible JUnit pour pipelines CI :

pytest -v --junitxml=result.xml

Exemple Pratique : Test d'une API Publique

Voici un framework minimal qui teste https://reqres.in/ :

# conftest.py
import pytest
@pytest.fixture
def base_url():
    return "https://reqres.in/api"

# test_list_user.py
import requests, json
import pytest
@pytest.mark.parametrize("user_id, first_name", [(1, "George"), (2, "Janet")])
def test_valid_user(base_url, user_id, first_name):
    resp = requests.get(f"{base_url}/users/{user_id}")
    data = json.loads(resp.text)
    assert resp.status_code == 200
    assert data["data"]["id"] == user_id
    assert data["data"]["first_name"] == first_name

def test_invalid_user(base_url):
    resp = requests.get(f"{base_url}/users/50")
    assert resp.status_code == 404

# test_login_user.py
import requests, json
import pytest
def test_login_success(base_url):
    payload = {"email": "test@test.com", "password": "something"}
    resp = requests.post(f"{base_url}/login/", data=payload)
    data = json.loads(resp.text)
    assert resp.status_code == 200
    assert data["token"] == "QpwL5tke4Pnpja7X"

def test_login_missing_password(base_url):
    payload = {"email": "test@test.com"}
    resp = requests.post(f"{base_url}/login/", data=payload)
    data = json.loads(resp.text)
    assert resp.status_code == 400
    assert data["error"] == "Missing password"

Conclusion

Ce tutoriel a couvert l'installation de PyTest, l'écriture de tests clairs, l'utilisation de fixtures et marqueurs, l'exécution parallèle, la génération de rapports XML, et la construction d'une suite de test API simple. Avec ces fondations, vous pouvez faire évoluer vos pratiques de test Python en toute confiance.

Python

  1. Comment Installer WordPress sur Google Cloud : Guide Étape par Étape
  2. Framework de Test Automatisé Coded UI : Guide Complet pour Débutants
  3. Découvrez votre clé de sécurité réseau : étapes simples pour trouver et protéger votre Wi‑Fi
  4. Appels Wi-Fi expliqués : fonctionnement et importance
  5. Explorer la 6G : le futur de la connectivité ultra-rapide
  6. Guide expert : installation de niveleurs de quai pour efficacité maximale
  7. Comprendre les tests de décharges partielles : protéger les équipements haute tension
  8. Prévenir la cavitation des pompes : causes, symptômes et solutions
  9. Brasage du Cuivre Expliqué : Techniques et Astuces pour Connexions Solides et Fiables