Memahami Fixture Function pada pytest

Fixtures adalah fungsi yang berguna sebagai resource bagi test function, contoh fixture function dapat berisi inisialisasi database connection, atau URL atau data tertentu yang akan digunakan berulang-ulang oleh test function.

Jadi tujuan dari fixture adalah menghindari penulisan berulang resource yang akan digunakan berulang oleh test function.

Fixture function diawali dengan decorator @pytest.fixture. Berikut contoh penulisan fixture function yang akan mengembalikan nilai 60.

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

Untuk menggunakan fixture, gunakan fixture function sebagai parameter pada test function.

def test_mod_2(input_value):
   assert input_value % 2 == 0

Implementasi pada test, sebagai contoh sederhana, test function perhitungan membagi nilai 60 dengan angka 2 dan 3. Dengan menggunakan fixture function, kita tidak perlu menulis angka 60 disetiap test function.

import pytest

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

def test_mod_2(input_value):
   assert input_value % 2 == 0

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

Contoh fixture diatas sengaja dibuat sederhana, agar bisa memahami apa itu fixture secara jelas.

JIka pytest kita jalankan, sesuai ekspetasi, test function berhasil.

PS F:\Project\learnpytest> pytest -v fixture.py
=========================== test session starts ===========================
platform win32 -- Python 3.8.5, pytest-6.2.4, py-1.9.0, pluggy-0.13.1 -- c:\users\___\anaconda3\python.exe
cachedir: .pytest_cache
rootdir: F:\Project\learnpytest, configfile: pytest.ini
plugins: dash-1.19.0
collected 2 items

fixture.py::test_mod_2 PASSED                                     [ 50%]
fixture.py::test_mod_3 PASSED                                     [100%]

============================= 2 passed in 0.13s =============================

Mengunakan conftest.py

Agar fixture function dapat digunakan oleh testing function pada file lain, kita gunakan file conftest.py.

Sebagai simulasi, mari kita gunakan contoh diatas. Buat file contest.py, lalu pindahkan fixture function kedalamnya.

#conftest.py
import pytest

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

Pisahkan kedua fungsi test kedalam 2 file. Pada tutorial dibuat nama fixture1.py dan fixture2.py.

#fixture1.py
import pytest

def test_mod_2(input_value):
   assert input_value % 2 == 0
#fixture2.py
import pytest

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

Jika kita jalankan pytest untuk kedua file tersebut, maka hasil test adalah PASSED, berarti fungsi test dapat mengakses fixture function pada file conftest.py.

PS F:\Project\learnpytest> pytest fixture1.py -v
========================== test session starts ==========================
platform win32 -- Python 3.8.5, pytest-6.2.4, py-1.9.0, pluggy-0.13.1 -- c:\users\___\anaconda3\python.exe
cachedir: .pytest_cache
rootdir: F:\Project\learnpytest, configfile: pytest.ini
plugins: dash-1.19.0
collected 1 item

fixture1.py::test_mod_2 PASSED                                      [100%]

============================ 1 passed in 0.01s ============================
PS F:\Project\learnpytest> pytest fixture2.py -v
========================== test session starts ==========================
platform win32 -- Python 3.8.5, pytest-6.2.4, py-1.9.0, pluggy-0.13.1 -- c:\users\___\anaconda3\python.exe
cachedir: .pytest_cache
rootdir: F:\Project\learnpytest, configfile: pytest.ini
plugins: dash-1.19.0
collected 1 item

fixture1.py::test_mod_3 PASSED                                      [100%]

============================ 1 passed in 0.01s ============================
Sharing is caring:

Leave a Comment