0Pricing
Python Academy · Lezione

Scrittura dei primi test con pytest

Comprenda la scoperta dei test, le istruzioni assert e la struttura dei test.

Scrittura dei primi test con pytest è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.

Installazione di pytest

Installi pytest con pip. Non richiede configurazioni obbligatorie: individua automaticamente i test.

# pip install pytest

# Run all tests
# pytest

# Run a specific file
# pytest test_math.py

Una semplice funzione di test

pytest raccoglie qualsiasi funzione che inizi con test_. Utilizzi semplici istruzioni assert: pytest le riscrive per fornire un output dettagliato.

# 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

File di test e rilevamento

pytest individua i file di test denominati test_*.py o *_test.py e raccoglie le funzioni denominate test_* o le classi denominate Test*.

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

Raggruppamento dei test nelle classi

Raggruppi i test correlati in una classe con prefisso Test. Non è necessario usare unittest.TestCase.

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

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

Test delle eccezioni

Utilizzi pytest.raises come context manager per verificare che vengano sollevate eccezioni specifiche.

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)

Il flag -v

Esegua pytest con -v (verbose) per visualizzare il nome di ogni test e il relativo stato di superamento o fallimento.

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

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

Ignorare i test

Utilizzi @pytest.mark.skip o @pytest.mark.skipif per ignorare i test in modo condizionale.

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

Contrassegnare i test come fallimenti attesi

@pytest.mark.xfail contrassegna un test di cui si prevede il fallimento. Il test viene considerato superato se fallisce e viene mostrato un avviso se supera il test inaspettatamente.

import pytest

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

Riscrittura di assert

pytest riscrive le istruzioni assert per mostrare i valori che hanno causato un fallimento, risultando molto più utile di un semplice 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 viene caricato automaticamente da pytest. Inserisca qui fixture e plugin condivisi senza importarli esplicitamente.

# 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

Esecuzione di sottoinsiemi di test

Utilizzi -k per eseguire i test che corrispondono a un'espressione di parole chiave.

# 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

Verifica rapida

Con quale prefisso deve iniziare il nome di una funzione di test pytest per essere individuata automaticamente?

Riepilogo

pytest non richiede codice ripetitivo: denomini i file test_*.py, denomini le funzioni test_* e utilizzi semplici istruzioni assert. Utilizzi pytest.raises per le eccezioni, -v per il livello di dettaglio e conftest.py per le fixture condivise.

Domande Frequenti

La lezione «Scrittura dei primi test con pytest» è gratuita?

Sì — il testo completo di «Scrittura dei primi test con pytest» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.

Cosa imparerò in «Scrittura dei primi test con pytest»?

Comprenda la scoperta dei test, le istruzioni assert e la struttura dei test. Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Python Academy?

Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Scrittura dei primi test con pytest»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Python Academy?

Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Scrittura dei primi test con pytest
  2. Fixture e configurazione/teardown
  3. Parametrizzazione e copertura dei test
  4. Mocking con unittest.mock
← Torna a Python Academy