Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Python

PyTest Tutorial: Installeren, Schrijven en Draaien van Python Tests met Vertrouwen

Wat is PyTest?

PyTest is een krachtig, open-source testframework dat ontwikkelaars in staat stelt beknopte, schaalbare testcases te schrijven voor Python-projecten—zijn het unit tests, integratietests of end-to-end API-checks. Het ondersteunt parallelle uitvoering, fixture-injectie, parameterisatie en rijke rapportage out-of-the-box.

Waarom PyTest Kiezen?

  • Eenvoudige, leesbare syntaxis die boilerplate vermindert
  • Automatische test-ontdekking en uitvoering
  • Specifieke tests of groepen draaien met -k en markers
  • Ingebouwde ondersteuning voor parallelle runs via pytest-xdist
  • Uitbreidbaar via fixtures, hooks en plugins
  • Gratis en actief onderhouden door de community

PyTest Installeren

Installeer de nieuwste stabiele release met pip:

pip install pytest

Verifieer de installatie:

pytest --version

Voor specifieke versiebeheer, kun je vastpinnen aan een release, bijv. pip install pytest==7.4.0.

Aan de Slag: Een Basis Test

Maak een projectdirectory en voeg een testbestand toe genaamd test_sample1.py:

import pytest
def test_file1_method1():
    x = 5
    y = 6
    assert x + 1 == y, "Optelling mislukt"
    assert x == y, "Waarden zouden moeten matchen"
def test_file1_method2():
    x = 5
    y = 6
    assert x + 1 == y, "Optelling mislukt"

Draai de test-suite:

pytest

Voorbeelduitvoer:

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

Assertions Begrijpen

PyTest assertions gedragen zich als standaard Python assert statements. Bij falen stopt de test met uitvoeren en rapporteert PyTest de exacte locatie en boodschap:

assert "hallo" == "Hai", "Niet-matchende groet"

Test-ontdekkingsregels

  • Bestanden moeten beginnen met test_ of eindigen op _test.py.
  • Testfuncties moeten beginnen met test_.
  • Andere bestanden of functies worden genegeerd tenzij expliciet gespecificeerd.

Specifieke Tests Draaien

Voer alle tests in een directory uit:

pytest

Een enkel bestand draaien:

pytest test_sample1.py

Filteren op substring:

pytest -k method1 -v

Draaien per marker:

pytest -m set1

Parallelle Uitvoering

Installeer de xdist-plugin en start een 4-worker parallelle run:

pip install pytest-xdist
pytest -n 4

Fixtures Gebruiken

Definieer herbruikbare setup-logica één keer en injecteer het in tests:

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

Plaats fixture-code in conftest.py om te delen over meerdere test-modules.

Geparametriseerde Tests

Draai een enkele test met veel inputs:

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

Overslaan en Verwachte Failures

Gebruik markers om te skippen of failures te verwachten zonder de resultaten te vervuilen:

import pytest
@pytest.mark.skip(reason="Feature nog niet beschikbaar")
def test_toekomstige_feature():
    pass
@pytest.mark.xfail(reason="Bekende bug")
def test_bekend_issue():
    assert 1 == 2

XML-rapporten Genereren

Genereer een JUnit-compatibel XML-bestand voor CI-pipelines:

pytest -v --junitxml=resultaat.xml

Praktisch Voorbeeld: Een Publieke API Testen

Hieronder is een minimaal framework dat https://reqres.in/ oefent:

# 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"

Conclusie

Deze tutorial behandelde PyTest installeren, duidelijke tests schrijven, fixtures en markers gebruiken, parallel draaien, XML-rapporten genereren en een simpele API-test-suite bouwen. Met deze fundamenten kun je je Python-testpraktijken met vertrouwen schalen.

Python

  1. Onderhoudsachterstand Uitgelegd: Strategieën om het Op te Lossen
  2. Buizen Testers Begrepen: Een Uitgebreide Gids
  3. Ontdek Uw Netwerkbeveiligingssleutel: Eenvoudige Stappen om uw Wi‑Fi te Vinden en Beveiligen
  4. WiFi Calling Uitgelegd: Hoe Het Werkt En Waarom Het Belangrijk Is
  5. 6G verkennen: de toekomst van ultra-snelle connectiviteit
  6. Partial Discharge Testing Begrijpen: High-Voltage Apparatuur Beschermen
  7. Pomp Cavitatie Voorkomen: Oorzaken, Symptomen en Hoe te Vermijden
  8. Koper Hardsolderen Uitgelegd: Technieken & Tips voor Sterke, Betrouwbare Verbindingen
  9. Expert Gids: Docklevelers Installeren Voor Maximale Efficiëntie
  10. WordPress Installeren Op Google Cloud: Een Stapsgewijze Gids
  11. Coded UI Test Automatiseringsframework: Een Uitgebreide Beginner's Gids