Pytest - Infissi

I dispositivi sono funzioni che verranno eseguite prima di ciascuna funzione di test a cui vengono applicate. I dispositivi vengono utilizzati per fornire alcuni dati ai test come connessioni al database, URL da testare e una sorta di dati di input. Pertanto, invece di eseguire lo stesso codice per ogni test, possiamo allegare la funzione fixture ai test e verrà eseguita e restituirà i dati al test prima di eseguire ogni test.

Una funzione è contrassegnata come dispositivo da:

@pytest.fixture

Una funzione di test può utilizzare un'apparecchiatura citando il nome dell'apparecchiatura come parametro di input.

Crea un file test_div_by_3_6.py e aggiungi il codice seguente

import pytest

@pytest.fixture
def input_value():
   input = 39
   return input

def test_divisible_by_3(input_value):
   assert input_value % 3 == 0

def test_divisible_by_6(input_value):
   assert input_value % 6 == 0

Qui abbiamo una funzione dispositivo chiamata input_value, che fornisce l'input ai test. Per accedere alla funzione fixture, i test devono menzionare il nome fixture come parametro di input.

Durante l'esecuzione del test, Pytest vedrà il nome del dispositivo come parametro di input. Quindi esegue la funzione dispositivo e il valore restituito viene memorizzato nel parametro di input, che può essere utilizzato dal test.

Eseguire il test utilizzando il seguente comando:

pytest -k divisible -v

Il comando precedente genererà il seguente risultato:

test_div_by_3_6.py::test_divisible_by_3 PASSED
test_div_by_3_6.py::test_divisible_by_6 FAILED
============================================== FAILURES
==============================================
________________________________________ test_divisible_by_6
_________________________________________
input_value = 39
   def test_divisible_by_6(input_value):
>  assert input_value % 6 == 0
E  assert (39 % 6) == 0
test_div_by_3_6.py:12: AssertionError
========================== 1 failed, 1 passed, 6 deselected in 0.07 seconds
==========================

Tuttavia, l'approccio ha i suoi limiti. Una funzione dispositivo definita all'interno di un file di test ha un ambito solo all'interno del file di test. Non possiamo usare quel dispositivo in un altro file di test. Per rendere disponibile una fixture a più file di test, dobbiamo definire la funzione fixture in un file chiamato conftest.py.conftest.py è spiegato nel prossimo capitolo.