Conftest.py: che cos’è?

di Lorenzo Neri
0 commento 37 visualizzazioni

Conftest.py che cos’è: un file che serve a condividere tante fixture nei tuoi file pytest. Scopri come funziona in questo articolo!

Se stai leggendo questo articolo, è perché hai letto quello dove spiego come funzionano le fixture in pytest, oppure vuoi semplicemente capire a che cosa serve questo file all’interno del TDD in Python!

Condividere i dati di test in pytest

Come facciamo a “riciclare” i dati che usiamo per inizializzare o impostare i nostri test su più di un singolo file?

Questa è la domanda la cui risposta è nel titolo di questo articolo 😀

Conftest.py a cosa serve in pytest? Proprio a questo.

Immagina di avere tante fixture.

Alcune di queste le utilizzi in più di un test.

Però a un certo punto ti dici “Hmmm però che noia vorrei usarle anche in altri file di test: idea! Li piazzo tutti su un unico file!

Eh, magari.

Diciamo che non è proprio il top del top.

Sia per leggibilità, sia per ordine dei tuoi test, è meglio suddividerli in vari file, specialmente se diventano tanti.

Chiarito questo punto, ce n’è un altro da chiarire.

Le fixture, siccome sono funzioni, occupano spazio in memoria dinamica.

Questo cosa significa? Che vanno invocate al momento giusto e al punto giusto!

Quindi, no.

No, se stai pensando di dichiararle più volte, quindi fare copiaincolla nei vari file non è una strada opportuna.

La strada opportuna, è quella di creare un file che si chiama “conftest.py” e di piazzarlo nella stessa cartella in cui hai messo i file dei tuoi test.

… E magari questa cartella chiamiamola test.

Per intenderci:

test
  |____ test_modulo1.py
  |____ test_modulo2.py
  |____ conftest.py

Facciamo anche un esempio dei file come dovrebbero essere al loro interno:

""" Contenuto di conftest.py """

import pytest

@pytest.fixture
def la_mia_fixture_ottieni_valore_casuale():
   from random import randint
   # impostiamo il seed per generare poi il numero casuale
   seed(1)
   return randint(1, 11)
""" Contenuto di test_modulo1.py """

def test_numeri_positivi_dieci(la_mia_fixture_ottieni_valore_casuale):

   # la uso come una variabile vera e propria
   assert la_mia_fixture_ottieni_valore_casuale > 0
""" Contenuto di test_modulo2.py """

def test_differenza(la_mia_fixture_ottieni_valore_casuale):
   
   assert (100 - la_mia_fixture_ottieni_valore_casuale ) > 50

Ovviamente i test sono tutt’altro che tecnichesi, non stare a guardarli troppo anzi: li ho scritti per rendere il concetto alla base di questo articolo semplice da capire 😀

Potrebbero interessarti

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più