Skrivning af de første pytest-tests
Forstå testregistrering, assert-sætninger og teststruktur.
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.pyEn 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) == 0Testfiler 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 fixturesGruppering 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 == 12Test 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 -sSpring 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 TrueMarkering 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 expectedOmskrivning 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 != 3conftest.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 parameterKø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_addHurtigt 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.
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
- Skrivning af de første pytest-tests
- Fixtures og opsætning/nedlukning
- Parametrisering og testdækning
- Mocking med unittest.mock