Python Academy · Oppitunti

Ensimmäisten pytest-testien kirjoittaminen

Ymmärtäkää testien löytäminen, assert-lauseet ja testien rakenne.

Oppitunti 1/413 vaihetta

Ensimmäisten pytest-testien kirjoittaminen on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

pytestin asentaminen

Asentakaa pytest pipillä. Se ei vaadi pakollisia asetuksia, vaan löytää testit automaattisesti.

# pip install pytest

# Run all tests
# pytest

# Run a specific file
# pytest test_math.py

Yksinkertainen testifunktio

pytest kerää kaikki funktiot, joiden nimi alkaa merkkijonolla test_. Käyttäkää tavallisia assert-lausekkeita — pytest muokkaa niitä yksityiskohtaisempaa tulostetta varten.

# 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

Testitiedostot ja testien löytäminen

pytest löytää testitiedostot, joiden nimi on test_*.py tai *_test.py, ja kerää funktiot, joiden nimi on test_*, sekä luokat, joiden nimi on Test*.

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

Testien ryhmittely luokkiin

Ryhmitelkää toisiinsa liittyvät testit luokkaan, jonka nimen alussa on Test. unittest.TestCase-luokkaa ei tarvita.

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

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

Poikkeusten testaaminen

Käyttäkää pytest.raises-kontekstinhallintaa varmistaaksenne, että tietyt poikkeukset nostetaan.

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)

-v-lippu

Suorittakaa pytest käyttäen -v-lippua (verbose), jotta näette kunkin testin nimen ja läpäisy- tai epäonnistumistilan.

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

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

Testien ohittaminen

Käyttäkää @pytest.mark.skip- tai @pytest.mark.skipif-merkintää testien ehdolliseen ohittamiseen.

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

Testien merkitseminen odotetuiksi epäonnistumisiksi

@pytest.mark.xfail merkitsee testin, jonka odotatte epäonnistuvan. Testi hyväksytään, jos se epäonnistuu, ja siitä varoitetaan, jos se läpäistään odottamatta.

import pytest

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

assert-lausekkeiden uudelleenkirjoitus

pytest muokkaa assert-lausekkeita näyttääkseen epäonnistumisen aiheuttaneet arvot — tämä on paljon hyödyllisempää kuin pelkkä 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

pytest lataa conftest.py-tiedoston automaattisesti. Sijoittakaa jaetut fixturet ja liitännäiset sinne ilman erillisiä tuonteja.

# 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

Testien osajoukkojen suorittaminen

Käyttäkää -k-lippua suorittaaksenne avainsanalauseketta vastaavat testit.

# 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

Pikatarkistus

Millä etuliitteellä pytest-testifunktion nimen on alettava, jotta se löydetään automaattisesti?

Kertaus

pytest ei vaadi ylimääräistä pohjakoodia: nimetkää tiedostot muodossa test_*.py, nimetkää funktiot muodossa test_* ja käyttäkää tavallista assert-lausetta. Käyttäkää pytest.raises-kontekstinhallintaa poikkeuksiin, -v-lippua yksityiskohtaisempaan tulosteeseen ja conftest.py-tiedostoa jaettuihin fixtureihin.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”Ensimmäisten pytest-testien kirjoittaminen” ilmainen?

Kyllä – oppitunnin ”Ensimmäisten pytest-testien kirjoittaminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Ensimmäisten pytest-testien kirjoittaminen”?

Ymmärtäkää testien löytäminen, assert-lauseet ja testien rakenne. Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Ensimmäisten pytest-testien kirjoittaminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?

Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Ensimmäisten pytest-testien kirjoittaminen
  2. Fixturet ja valmistelu/purku
  3. Parametrisointi ja testikattavuus
  4. Mockaus unittest.mockilla
← Takaisin: Python Academy