Kita dapat menjalankan multiple test dengan menggabungkan test function kedalam class. Aturan penulisan class:
- Harus diawali dengan keyword Test, perhatikan huruf T kapital.
- Menggunakan CamelCase, contoh: TestClass.
- Karena class adalah parent class dan bukan inherit dari class lainnya, harus ditambahkan parameter object.
- Fungsi test dalam class harus diawali dengan keyword test_.
- Setiap fungsi dari class harus diisi parameter self.
Mari kita tulis ulang 2 program kecil dari modul sebelumnya, dengan membuat file baru, pada tutorial digunakan second.py, berikut isi codenya:
import pytest
def my_func(x, y, z):
return x + y + z
def my_exception():
div = 10/0
return div
class TestClass(object):
def test_result1(self):
assert my_func(1, 2, 3) == 5, "Test Failed, nilai seharusnya 6"
def test_result2(self):
assert my_func(1, 2, 3) == 6
def test_result3():
with pytest.raises(ZeroDivisionError):
my_exception()
Pada code ada sedikit modifikasi, yaitu kita bisa menambahkan komentar pada perintah assert.
assert my_func(1, 2, 3) == 5, "Test Failed, nilai seharusnya 6"
Jalankan test dengan perintah pytest -v second.py, log berikut akan tampil
PS F:\Project\learnpytest> pytest -v second.py
============================ test session starts ============================
platform win32 -- Python 3.8.5, pytest-6.2.4, py-1.9.0, pluggy-0.13.1 -- c:\users\rangga\anaconda3\python.exe
cachedir: .pytest_cache
rootdir: F:\Project\learnpytest, configfile: pytest.ini
plugins: dash-1.19.0
collected 3 items
second.py::TestClass::test_result1 FAILED [ 33%]
second.py::TestClass::test_result2 PASSED [ 66%]
second.py::test_result3 PASSED [100%]
================================== FAILURES ================================
___________________________ TestClass.test_result1 __________________________
self = <second.TestClass object at 0x0000027A7D6ED460>
def test_result1(self):
> assert my_func(1, 2, 3) == 5, "Test Failed, nilai seharusnya 6"
E AssertionError: Test Failed, nilai seharusnya 6
E assert 6 == 5
E +6
E -5
second.py:12: AssertionError
========================== short test summary info ==========================
FAILED second.py::TestClass::test_result1 - AssertionError: Test Failed, nilai seharusnya 6
======================== 1 failed, 2 passed in 0.48s ========================
Dapat dilihat dari log diatas, 3 fungsi test terdeteksi dan dijalankan oleh pytest. 1 fungsi failed dan 2 fungsi passed.
Perhatikan, komentar pada assert ditampilkan pada log, ini dapat membantu mempermudah untuk melihat fungsi mana yang menyebabkan error.