Kerangka UnitTest - Modul Py.test

Pada tahun 2004 Holger Krekel mengganti namanya stdpaket, yang namanya sering disalahartikan dengan nama Pustaka Standar yang dikirimkan bersama Python, dengan nama (hanya sedikit kurang membingungkan) 'py.' Meskipun paket tersebut berisi beberapa sub-paket, sekarang hampir seluruhnya dikenal untuk kerangka py.test-nya.

Kerangka py.test telah menyiapkan standar baru untuk pengujian Python, dan telah menjadi sangat populer dengan banyak pengembang saat ini. Idiom elegan dan Pythonic yang diperkenalkan untuk penulisan tes memungkinkan rangkaian tes untuk ditulis dalam gaya yang jauh lebih ringkas.

py.test adalah alternatif tanpa boilerplate untuk modul unittest standar Python. Meskipun merupakan alat uji berfitur lengkap dan dapat diperluas, ia menawarkan sintaksis sederhana. Membuat rangkaian pengujian semudah menulis modul dengan beberapa fungsi.

py.test berjalan di semua sistem operasi POSIX dan WINDOWS (XP / 7/8) dengan Python versi 2.6 ke atas.

Instalasi

Gunakan kode berikut untuk memuat modul pytest dalam distribusi Python saat ini serta utilitas py.test.exe. Tes dapat dijalankan menggunakan keduanya.

pip install pytest

Pemakaian

Anda cukup menggunakan pernyataan assert untuk menegaskan ekspektasi pengujian. Introspeksi assert pytest akan secara cerdas melaporkan nilai antara ekspresi assert yang membebaskan Anda dari kebutuhan untuk mempelajari banyak namaJUnit legacy methods.

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

Gunakan baris perintah berikut untuk menjalankan tes di atas. Setelah tes dijalankan, hasil berikut ditampilkan di konsol -

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 ====================

Tes ini juga dapat dijalankan dari baris perintah dengan memasukkan modul pytest menggunakan saklar –m.

python -m pytest test_sample.py

Mengelompokkan Beberapa Tes di Kelas

Setelah Anda mulai memiliki lebih dari beberapa pengujian, sering kali masuk akal untuk mengelompokkan pengujian secara logis, dalam kelas dan modul. Mari menulis kelas yang berisi dua tes -

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

Hasil tes berikut akan ditampilkan -

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 ======================