Python Academy · Lektion

Skriva era första pytest-tester

Förstå testupptäckt, assert-satser och teststruktur.

Lektion 1 av 413 steg

Skriva era första pytest-tester är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.

Installera pytest

Installera pytest med pip. Det kräver ingen obligatorisk konfiguration — tester identifieras automatiskt.

# pip install pytest

# Run all tests
# pytest

# Run a specific file
# pytest test_math.py

En enkel testfunktion

pytest samlar in alla funktioner som börjar med test_. Använd vanliga assert-satser — pytest skriver om dem för att ge detaljerade resultat.

# 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 och identifiering

pytest identifierar testfiler med namnen test_*.py eller *_test.py och samlar in funktioner med namnen test_* eller klasser med namnen Test*.

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

Gruppera tester i klasser

Gruppera relaterade tester i en klass vars namn börjar med Test. unittest.TestCase krävs inte.

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

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

Testa undantag

Använd pytest.raises som en context manager för att kontrollera att specifika undantag utlö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)

Flaggan -v

Kör pytest med -v (verbose) för att se namnet på varje test och om det lyckades eller misslyckades.

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

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

Hoppa över tester

Använd @pytest.mark.skip eller @pytest.mark.skipif för att villkorligt hoppa över tester.

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

Markera tester som förväntade fel

@pytest.mark.xfail markerar ett test som ni förväntar er ska misslyckas. Testet räknas som lyckat om det misslyckas och ger en varning om det oväntat lyckas.

import pytest

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

Omskrivning av assert

pytest skriver om assert-satser så att värdena som orsakade ett fel visas — mycket mer användbart än ett ensamt 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 läses automatiskt in av pytest. Placera gemensamma fixtures och plugins här utan att importera dem uttryckligen.

# 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öra ett urval av tester

Använd -k för att köra tester som matchar ett nyckelordsuttryck.

# 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

Snabbkontroll

Vilket prefix måste namnet på en pytest-testfunktion börja med för att den ska identifieras automatiskt?

Sammanfattning

pytest kräver ingen boilerplate: namnge filer test_*.py, namnge funktioner test_* och använd vanliga assert-satser. Använd pytest.raises för undantag, -v för utförliga resultat och conftest.py för gemensamma fixtures.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
76
Lektioner
320

Vanliga frågor

Är lektionen ”Skriva era första pytest-tester” gratis?

Ja – hela texten till ”Skriva era första pytest-tester” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Skriva era första pytest-tester”?

Förstå testupptäckt, assert-satser och teststruktur. Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Python Academy?

Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Skriva era första pytest-tester”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Python Academy-lektionen?

Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Skriva era första pytest-tester
  2. Fixtures och setup/teardown
  3. Parametrisering och testtäckning
  4. Mockning med unittest.mock
← Tillbaka till Python Academy