Framework UnitTest - Modulo Py.test

Fu nel 2004 che Holger Krekel ribattezzò il suo stdpacchetto, il cui nome era spesso confuso con quello della libreria standard fornita con Python, al nome (solo leggermente meno confuso) "py". Sebbene il pacchetto contenga diversi sotto-pacchetti, ora è noto quasi interamente per il suo framework py.test.

Il framework py.test ha creato un nuovo standard per i test di Python ed è diventato molto popolare tra molti sviluppatori oggi. Gli idiomi eleganti e pitonici che ha introdotto per la scrittura di prova hanno reso possibile scrivere suite di test in uno stile molto più compatto.

py.test è un'alternativa no-boilerplate al modulo unittest standard di Python. Nonostante sia uno strumento di test completo ed estensibile, vanta una sintassi semplice. Creare una suite di test è facile come scrivere un modulo con un paio di funzioni.

py.test funziona su tutti i sistemi operativi POSIX e WINDOWS (XP / 7/8) con Python versione 2.6 e successive.

Installazione

Utilizzare il codice seguente per caricare il modulo pytest nella distribuzione Python corrente e un'utilità py.test.exe. I test possono essere eseguiti utilizzando entrambi.

pip install pytest

Utilizzo

Puoi semplicemente usare l'istruzione assert per affermare le aspettative del test. l'introspezione assert di pytest riporterà in modo intelligente i valori intermedi dell'espressione assert liberandoti dalla necessità di imparare i molti nomi diJUnit legacy methods.

# content of test_sample.py
def func(x):
   return x + 1
   
def test_answer():
   assert func(3) == 5

Utilizzare la seguente riga di comando per eseguire il test precedente. Una volta eseguito il test, sulla console viene visualizzato il seguente risultato:

C:\Python27>scripts\py.test -v test_sample.py
============================= test session starts =====================
platform win32 -- Python 2.7.9, pytest-2.9.1, py-1.4.31, pluggy-0.3.1 -- C:\Pyth
on27\python.exe
cachedir: .cache
rootdir: C:\Python27, inifile:
collected 1 items
test_sample.py::test_answer FAILED
================================== FAILURES =====================
_________________________________ test_answer _________________________________
   def test_answer():
>  assert func(3) == 5
E     assert 4 == 5
E     + where 4 = func(3)
test_sample.py:7: AssertionError
========================== 1 failed in 0.05 seconds ====================

Il test può anche essere eseguito dalla riga di comando includendo il modulo pytest utilizzando l'opzione –m.

python -m pytest test_sample.py

Raggruppamento di più test in una classe

Una volta che inizi ad avere più di pochi test, spesso ha senso raggruppare i test in modo logico, in classi e moduli. Scriviamo una classe contenente due test:

class TestClass:
   def test_one(self):
      x = "this"
      assert 'h' in x
   def test_two(self):
      x = "hello"
      assert hasattr(x, 'check')

Verrà visualizzato il seguente risultato del test:

C:\Python27>scripts\py.test -v test_class.py
============================= test session starts =====================
platform win32 -- Python 2.7.9, pytest-2.9.1, py-1.4.31, pluggy-0.3.1 -- C:\Pyt
on27\python.exe
cachedir: .cache
rootdir: C:\Python27, inifile:
collected 2 items
test_class.py::TestClass::test_one PASSED
test_class.py::TestClass::test_two FAILED
================================== FAILURES =====================
_____________________________ TestClass.test_two ______________________________
self = <test_class.TestClass instance at 0x01309DA0>

   def test_two(self):
      x = "hello"
>  assert hasattr(x, 'check')
E     assert hasattr('hello', 'check')

test_class.py:7: AssertionError
===================== 1 failed, 1 passed in 0.06 seconds ======================