Zum Inhalt

pip install pytest``pip install pytest sudo apt install python3-pytest``sudo apt-get install python3-pytest sudo dnf install python3-pytest``sudo dnf install python3-pytest sudo pacman -S python-pytest``sudo pacman -S python-pytest brew install pytest``brew install pytest choco install pytest``choco install pytest python -m venv venv && source venv/bin/activate && pip install pytest``python -m venv venv && source venv/bin/activate && pip install pytest pip install pytest pytest-cov pytest-xdist pytest-mock pytest-html``pip install pytest pytest-cov pytest-sugar pytest --version``pytest --version pytest``pytest pytest test_file.py``pytest test_file.py pytest tests/``pytest test_directory/ pytest test_file.py::test_function``pytest test_file.py::test_function_name pytest test_file.py::TestClass``pytest test_file.py::TestClassName pytest test_file.py::TestClass::test_method``pytest test_file.py::TestClassName::test_method_name pytest -v``pytest -v pytest -vv``pytest -vv pytest -q``pytest -q

pytest Cheatsheet

Installation

Platform Befehl
pip (Alle Plattformen)
Ubuntu/Debian
Fedora/RHEL
Arch Linux
macOS (Homebrew)
Windows (Chocolatey)
Virtueller Umgebung
Mit häufigen Plugins
Installation überprüfen

Grundlegende Befehle

Befehl Beschreibung
Alle Tests im aktuellen Verzeichnis und Unterverzeichnissen ausführen
Tests in einer bestimmten Datei ausführen
Alle Tests in einem bestimmten Verzeichnis ausführen
Eine bestimmte Testfunktion ausführen
Alle Tests in einer bestimmten Klasse ausführen
Eine bestimmte Testmethode in einer Klasse ausführen
Tests mit ausführlicher Ausgabe (Testnamen anzeigen)
Tests mit sehr ausführlicher Ausgabe (vollständige Details anzeigen)
Tests im stillen Modus ausführen (minimale Ausgabe)
pytest -x Nach dem ersten Testfehler stoppen
pytest --maxfail=3 Nach N Testfehlern stoppen
pytest -k "test_user" Tests mit Schlüsselwortausdruck ausführen
pytest -k "user and not admin" Tests mit mehreren Schlüsselwörtern ausführen (UND/NICHT-Logik)
pytest -m "slow" Tests mit spezifischem Marker ausführen
pytest -m "not slow" Tests mit spezifischem Marker ausschließen
pytest --collect-only Anzeigen, welche Tests ausgeführt würden, ohne sie auszuführen
pytest --lf Nur Tests ausführen, die im letzten Durchlauf fehlgeschlagen sind (zuletzt fehlgeschlagen)
pytest --ff Fehlgeschlagene Tests zuerst ausführen, dann andere (Fehler zuerst)
pytest -l Lokale Variablen in Rückverfolgungen bei Fehlern anzeigen

Erweiterte Verwendung

Befehl Beschreibung
pytest -n auto Tests parallel mit allen verfügbaren CPU-Kernen ausführen (erfordert pytest-xdist)
pytest -n 4 Tests parallel mit 4 Arbeitsprozessen ausführen
pytest --durations=10 Die 10 langsamsten Testdauern anzeigen
pytest --durations=10 --durations-min=1.0 Langsamste Tests anzeigen, die mindestens 1 Sekunde dauern
pytest --cov=myproject Tests mit Code-Coveragebericht ausführen (erfordert pytest-cov)
pytest --cov=myproject --cov-report=html HTML-Coveragebericht im htmlcov/-Verzeichnis generieren
pytest --cov=myproject --cov-report=term-missing Coverage mit fehlenden Zeilennummern im Terminal anzeigen
pytest --cov=myproject --cov-fail-under=80 Bei Coveragewerten unter 80% fehlschlagen
pytest --cov-branch Branch-Coverageanalyse einbeziehen
pytest --junitxml=report.xml JUnit XML-Bericht für CI/CD-Integration generieren
pytest --html=report.html HTML-Testbericht generieren (erfordert pytest-html)
pytest --pdb Bei Testfehlern in Python-Debugger (PDB) wechseln
pytest --trace Zu Beginn jedes Tests in PDB wechseln
pytest --setup-show Setup und Teardown von Fixtures während der Ausführung anzeigen
pytest --fixtures Alle verfügbaren Fixtures und ihre Docstrings auflisten
pytest --markers Alle registrierten Marker auflisten
pytest --tb=short Kürzeres Traceback-Format verwenden
pytest --tb=line Ein Zeile pro Fehler im Traceback anzeigen
pytest --tb=no Traceback-Ausgabe deaktivieren
pytest -W error::DeprecationWarning Veraltungshinweise als Fehler behandeln
pytest --capture=no Ausgabeerfassung deaktivieren (identisch mit -s)
pytest --timeout=300 Timeout von 300 Sekunden pro Test setzen (erfordert pytest-timeout)
pytest --count=3 Jeden Test 3-mal wiederholen (erfordert pytest-repeat)
pytest --random-order Tests in zufälliger Reihenfolge ausführen (erfordert pytest-random-order)
pytest -ra Kurze Testergebniszusammenfassung für alle Tests anzeigen (bestanden, fehlgeschlagen, übersprungen usw.)

Konfiguration

pytest.ini Konfigurationsdatei

Im Projektstammverzeichnis platzieren:

[pytest]
# Minimum pytest version required
minversion = 7.0

# Directories to search for tests
testpaths = tests

# Test file patterns
python_files = test_*.py *_test.py

# Test class patterns
python_classes = Test* *Tests

# Test function patterns
python_functions = test_*

# Default command line options
addopts = 
    -ra
    --strict-markers
    --strict-config
    --verbose
    --cov=myproject
    --cov-report=html
    --cov-report=term-missing

# Custom markers
markers =
    slow: marks tests as slow (deselect with '-m "not slow"')
    integration: marks tests as integration tests
    unit: marks tests as unit tests
    smoke: marks tests as smoke tests
    database: marks tests requiring database connection
    api: marks tests for API testing

# Directories to ignore
norecursedirs = .git .tox dist build *.egg venv node_modules

# Warning filters
filterwarnings =
    error
    ignore::UserWarning
    ignore::DeprecationWarning

# Logging configuration
log_cli = true
log_cli_level = INFO
log_cli_format = %(asctime)s [%(levelname)s] %(message)s
log_cli_date_format = %Y-%m-%d %H:%M:%S

pyproject.toml Konfiguration

Moderne Python-Projekte mit pyproject.toml:

[tool.pytest.ini_options]
minversion = "7.0"
testpaths = ["tests"]
python_files = ["test_*.py", "*_test.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]

addopts = [
    "-ra",
    "--strict-markers",
    "--cov=myproject",
    "--cov-branch",
    "--cov-report=html",
    "--cov-report=term-missing:skip-covered",
    "--cov-fail-under=80",
]

markers = [
    "slow: marks tests as slow",
    "integration: integration tests",
    "unit: unit tests",
    "smoke: smoke tests",
]

filterwarnings = [
    "error",
    "ignore::UserWarning",
]

conftest.py - Gemeinsame Fixtures

Im Stammverzeichnis des Testverzeichnisses für gemeinsame Fixtures platzieren:

import pytest

# Session-scoped fixture (runs once per test session)
@pytest.fixture(scope="session")
def database():
    """Provide database connection for entire test session"""
    db = create_database_connection()
    yield db
    db.close()

# Module-scoped fixture (runs once per test module)
@pytest.fixture(scope="module")
def api_client():
    """Provide API client for test module"""
    client = APIClient()
    yield client
    client.cleanup()

# Function-scoped fixture (default, runs for each test)
@pytest.fixture
def sample_data():
    """Provide sample data for testing"""
    return {"id": 1, "name": "Test User"}

# Autouse fixture (automatically used by all tests)
@pytest.fixture(autouse=True)
def reset_state():
    """Reset application state before each test"""
    clear_cache()
    yield
    cleanup_resources()

# Parametrized fixture
@pytest.fixture(params=["sqlite", "postgres", "mysql"])
def db_type(request):
    """Test with multiple database types"""
    return request.param

# Configure pytest hooks
def pytest_configure(config):
    """Add custom configuration"""
    config.addinivalue_line(
        "markers", "custom: custom marker description"
    )

Häufige Anwendungsfälle

Anwendungsfall 1: Grundlegende Unittests

# Create test file
cat > test_calculator.py << 'EOF'
def add(a, b):
    return a + b

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0
    assert add(0, 0) == 0
EOF

# Run the tests
pytest test_calculator.py -v

Anwendungsfall 2: Testen mit Fixtures```bash

Create test with fixtures

cat > test_user.py << 'EOF' import pytest

@pytest.fixture def user_data(): return {"username": "testuser", "email": "test@example.com"}

def test_user_creation(user_data): assert user_data["username"] == "testuser" assert "@" in user_data["email"] EOF

Run tests with fixture details

pytest test_user.py -v --setup-show ### Anwendungsfall 3: Parametrisiertes Testenbash

Create parametrized tests

cat > test_math.py << 'EOF' import pytest

@pytest.mark.parametrize("input,expected", [ (2, 4), (3, 9), (4, 16), (5, 25), ]) def test_square(input, expected): assert input ** 2 == expected EOF

Run parametrized tests

pytest test_math.py -v ### Anwendungsfall 4: Integrationstests mit Markernbash

Create tests with markers

cat > test_api.py << 'EOF' import pytest

@pytest.mark.unit def test_data_validation(): assert True

@pytest.mark.integration def test_api_endpoint(): # Simulated API test assert True

@pytest.mark.slow @pytest.mark.integration def test_full_workflow(): # Long-running test assert True EOF

Run only unit tests

pytest test_api.py -m unit -v

Run integration tests excluding slow ones

pytest test_api.py -m "integration and not slow" -v ### Anwendungsfall 5: Generierung von Testabdeckungsberichtenbash

Run tests with coverage and generate reports

pytest --cov=myproject --cov-report=html --cov-report=term-missing

View coverage report

HTML report will be in htmlcov/index.html

Run with coverage threshold

pytest --cov=myproject --cov-fail-under=80

Generate coverage badge

pytest --cov=myproject --cov-report=term --cov-report=html ``## Bewährte Praktikentest_test_test_user_registration_with_valid_emailtest_should_validate_user_login@pytest.mark.slowslow@pytest.mark.integrationintegration@pytest.mark.parametrize@pytest.mark.parametrizeconftest.pyconftest.pypytest -x-xtest_.pytest_*.pytest.py*_test.pytesttest_TestTestinit.py__init__.pypip install -e .pip install -e .conftest.pyconftest.pyrequirements.txtrequirements.txtpytest --durations=10`--durations=10

The translations preserve the markdown formatting, keep technical terms in English, and maintain the same structure and punctuation as the original text.

Would you like me to elaborate on any part of the translation?pytest -n auto, markiere langsame Tests mit@pytest.mark.slow| | Coverage funktioniert nicht | Installiere pytest-cov:pip install pytest-cov, stelle sicher, dass der Quellpfad korrekt ist:--cov=myproject, überprüfe.coveragercKonfiguration | | Marker nicht erkannt | Registriere Marker inpytest.inioderpyproject.tomlunter[tool.pytest.ini_options], verwende--strict-markersum Tippfehler zu fangen | | PDB funktioniert nicht mit Capture | Verwendepytest -s --pdbum Ausgabe-Capturing zu deaktivieren, oder verwendepytest.set_trace()anstelle vonpdb.set_trace()| | Fixtures laufen in falscher Reihenfolge | Überprüfe Fixture-Scope (Session > Modul > Klasse > Funktion), verwende@pytest.fixture(autouse=True)vorsichtig, überprüfe Abhängigkeitskette | | Parallele Tests schlagen fehl | Stelle sicher, dass Tests isoliert sind und keinen Zustand teilen, überprüfe Racebedingungen, verwende korrekte Sperrung für gemeinsam genutzte Ressourcen | | Speicherlecks in Tests | Verwende@pytest.fixture(scope="function")für ordnungsgemäße Bereinigung, stelle sicher, dass Fixtures korrekt aufräumen, überprüfe Zirkelreferenzen | | Warnungen verstopfen die Ausgabe | Konfiguriere Warnungsfilter inpytest.ini:filterwarnings = ignore::DeprecationWarning, oder verwende-WFlag:pytest -W ignore::UserWarning |