Python Academy · Lektion

Skrivning af de første pytest-tests

Forstå testregistrering, assert-sætninger og teststruktur.

Lektion 1 af 413 trin

Skrivning af de første pytest-tests er en gratis Python Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Python Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python Academy-kurset indeholder 4 lektioner i alt.

Installation af pytest

Installér pytest med pip. Det kræver ingen obligatorisk konfiguration — det finder automatisk test.

# pip install pytest

# Run all tests
# pytest

# Run a specific file
# pytest test_math.py

En simpel testfunktion

pytest indsamler alle funktioner, der begynder med test_. Brug almindelige assert-sætninger — pytest omskriver dem, så outputtet bliver detaljeret.

# test_math.py
def add(a, b):
    return a + b

def test_add():
    assert add(2, 3) == 5

def test_add_negative():
    assert add(-1, 1) == 0

Testfiler og automatisk registrering

pytest finder testfiler med navnene test_*.py eller *_test.py og indsamler funktioner med navnene test_* eller klasser med navnene Test*.

tests/
    test_utils.py
    test_models.py
    conftest.py   # shared fixtures

Gruppering af test i klasser

Gruppér relaterede test i en klasse med præfikset Test. unittest.TestCase er ikke nødvendigt.

class TestCalculator:
    def test_add(self):
        assert 1 + 1 == 2

    def test_multiply(self):
        assert 3 * 4 == 12

Test af undtagelser

Brug pytest.raises som en konteksthåndtering til at kontrollere, at bestemte undtagelser udløses.

import pytest

def divide(a, b):
    if b == 0:
        raise ZeroDivisionError("cannot divide by zero")
    return a / b

def test_divide_by_zero():
    with pytest.raises(ZeroDivisionError, match="cannot divide"):
        divide(10, 0)

Flaget -v

Kør pytest med -v (detaljeret) for at se hvert testenavn og dets status for bestået eller ikke bestået.

# pytest -v
# test_math.py::test_add PASSED
# test_math.py::test_add_negative PASSED

# Show print output too:
# pytest -v -s

Spring test over

Brug @pytest.mark.skip eller @pytest.mark.skipif til at springe betingede test over.

import pytest, sys

@pytest.mark.skip(reason="not implemented yet")
def test_future_feature():
    assert False

@pytest.mark.skipif(sys.platform == "win32", reason="Unix only")
def test_unix_only():
    assert True

Markering af test som forventede fejl

@pytest.mark.xfail markerer en test, som du forventer mislykkes. Den består, hvis den mislykkes, og viser en advarsel, hvis den uventet består.

import pytest

@pytest.mark.xfail(reason="known bug #42")
def test_buggy():
    assert 1 == 2  # will fail, but that's expected

Omskrivning af assert

pytest omskriver assert-sætninger, så de viser de værdier, der forårsagede en fejl — langt mere nyttigt end en simpel AssertionError.

def test_list_equal():
    result = [1, 2, 4]
    expected = [1, 2, 3]
    assert result == expected
# AssertionError:
#   assert [1, 2, 4] == [1, 2, 3]
#   At index 2 diff: 4 != 3

conftest.py

conftest.py indlæses automatisk af pytest. Placér delte fixtures og plugins her uden at importere dem eksplicit.

# conftest.py
import pytest

@pytest.fixture
def sample_data():
    return {"key": "value"}

# Any test file in the same dir can use sample_data as a parameter

Kør delmængder af test

Brug -k til at køre test, der matcher et nøgleordsudtryk.

# Run tests containing "add"
# pytest -k "add"

# Run tests NOT containing "slow"
# pytest -k "not slow"

# Run a specific test
# pytest test_math.py::test_add

Hurtigt tjek

Hvilket præfiks skal navnet på en pytest-testfunktion begynde med, for at den registreres automatisk?

Opsummering

pytest kræver ingen boilerplate: giv filer navne som test_*.py, giv funktioner navne som test_*, og brug almindelige assert-sætninger. Brug pytest.raises til undtagelser, -v for detaljeret output og conftest.py til delte fixtures.

Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
76
Lektioner
320

Ofte stillede spørgsmål

Er lektionen “Skrivning af de første pytest-tests” gratis?

Ja — hele teksten til “Skrivning af de første pytest-tests” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Python Academy-kurset, skal du opgradere til CoddyKit PRO. Python Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Skrivning af de første pytest-tests”?

Forstå testregistrering, assert-sætninger og teststruktur. Du øver dig i Python Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Python Academy?

Der kræves ingen tidligere erfaring. Python Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Skrivning af de første pytest-tests”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Python Academy-lektion?

Ja. Alle Python Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Skrivning af de første pytest-tests
  2. Fixtures og opsætning/nedlukning
  3. Parametrisering og testdækning
  4. Mocking med unittest.mock
← Tilbage til Python Academy