0Pricing
Python Academy · Lektion

Parametrisierung und Testabdeckung

Führen Sie Tests mit mehreren Eingaben über @pytest.mark.parametrize aus.

Parametrisierung und Testabdeckung ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

@pytest.mark.parametrize

Führen Sie denselben Test mit mehreren Eingaben aus, indem Sie @pytest.mark.parametrize verwenden. Jedes Tupel ist ein separater Testfall.

import pytest

@pytest.mark.parametrize("a,b,expected", [
    (1, 2, 3),
    (0, 0, 0),
    (-1, 1, 0),
    (10, -5, 5),
])
def test_add(a, b, expected):
    assert a + b == expected

Einzelner Parameter

Bei einem einzelnen Argument übergeben Sie direkt eine Liste von Werten.

import pytest

@pytest.mark.parametrize("n", [1, 2, 3, 4, 5])
def test_positive(n):
    assert n > 0

Benannte Test-IDs

Geben Sie eine ids-Liste an, um jeden Parametersatz zu beschriften und dadurch die Ausgabe übersichtlicher zu machen.

import pytest

@pytest.mark.parametrize("value,result", [
    (2, True),
    (3, False),
], ids=["even", "odd"])
def test_is_even(value, result):
    assert (value % 2 == 0) == result

parametrize-Dekoratoren stapeln

Stapeln Sie zwei parametrize-Dekoratoren, um das kartesische Produkt der Eingaben zu erhalten.

import pytest

@pytest.mark.parametrize("x", [1, 2])
@pytest.mark.parametrize("y", [10, 20])
def test_product(x, y):
    assert x * y > 0   # 4 test cases: (1,10),(1,20),(2,10),(2,20)

pytest-cov: Installation

Installieren Sie pytest-cov, um zu messen, welche Zeilen Ihres Codes von Tests ausgeführt werden.

# pip install pytest-cov

# Basic usage:
# pytest --cov=mypackage

# HTML report:
# pytest --cov=mypackage --cov-report=html

Coverage-Ausgabe lesen

Die Coverage-Auswertung zeigt, welche Zeilen, Verzweigungen oder Anweisungen während des Testens nicht erreicht wurden.

# Name          Stmts   Miss  Cover
# -------       -----   ----  -----
# mypackage/utils.py  20       3    85%
#
# Missing: lines 45, 67, 88

Coverage von Verzweigungen

Verwenden Sie --cov-branch, um zu verfolgen, ob beide Verzweigungen von Bedingungen getestet werden.

# pytest --cov=mypackage --cov-branch

def is_positive(n):
    if n > 0:        # branch 1: True
        return True
    return False     # branch 2: False

Bei niedriger Coverage fehlschlagen

Verwenden Sie --cov-fail-under=N, damit der Build fehlschlägt, wenn die Coverage unter N Prozent sinkt.

# pytest --cov=mypackage --cov-fail-under=80
# FAIL Required test coverage of 80% not reached. Total: 72%

.coveragerc-Konfiguration

Konfigurieren Sie Ausschlüsse für die Coverage in .coveragerc, um Boilerplate-Code zu überspringen.

# .coveragerc
[run]
omit =
    */migrations/*
    */tests/*
    setup.py

[report]
exclude_lines =
    pragma: no cover
    if TYPE_CHECKING:

Was eine gute Coverage ausmacht

Eine hohe Coverage garantiert keine korrekten Tests. Streben Sie aussagekräftige Assertions an, nicht nur das Ausführen möglichst vieler Zeilen. 80–90 % sind für die meisten Projekte ein realistisches Ziel.

# A covered but useless test:
def test_nothing():
    is_positive(5)   # no assert — 100% coverage, zero confidence

# A meaningful test:
def test_positive():
    assert is_positive(5) is True
    assert is_positive(-1) is False

parametrize und Coverage kombinieren

Parametrisierte Tests verbessern die Coverage ganz natürlich, da sie mit einer Testdefinition mehrere Codepfade ausführen.

import pytest

@pytest.mark.parametrize("n,expected", [
    (5, True), (-1, False), (0, False)
])
def test_is_positive(n, expected):
    assert is_positive(n) == expected

Kurztest

Was bewirkt --cov-fail-under=90 bei der Ausführung von pytest?

Zusammenfassung

Verwenden Sie @pytest.mark.parametrize, um mehrere Eingaben übersichtlich zu testen. Messen Sie die Code-Coverage mit pytest-cov, verfolgen Sie Verzweigungen mit --cov-branch und setzen Sie Mindestwerte mit --cov-fail-under durch.

Häufig gestellte Fragen

Ist die Lektion „Parametrisierung und Testabdeckung“ kostenlos?

Ja — der vollständige Text von „Parametrisierung und Testabdeckung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Parametrisierung und Testabdeckung“?

Führen Sie Tests mit mehreren Eingaben über @pytest.mark.parametrize aus. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Parametrisierung und Testabdeckung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Ihre ersten pytest-Tests schreiben
  2. Fixtures und Setup/Teardown
  3. Parametrisierung und Testabdeckung
  4. Mocking mit unittest.mock
← Zurück zu Python Academy