conftest.py
conftest.py
pytest adalah file konfigurasi yang digunakan oleh pytest untuk pengumpulan pengujian, eksekusi pengujian, dan pelaporan hasil. conftest.py
secara otomatis terdeteksi selama eksekusi pytest dan dapat mendefinisikan fixture, plugin, opsi baris perintah, dan pelari pengujian khusus yang akan digunakan pytest selama pengumpulan dan eksekusi pengujian.
conftest.py
dapat ditempatkan pada direktori yang sama dengan file tes. Anda juga dapat mendefinisikan fixture yang digunakan bersama oleh beberapa file pengujian dengan menempatkannya di direktori induk direktori yang berisi file pengujian.
Berikut ini adalah contoh pendefinisian perlengkapan dalam conftest.py
.
import pytest
@pytest.fixture
def my_fixture():
return 'Hello, pytest!'
Dengan demikian, sebuah fixture dapat didefinisikan dalam conftest.py
menggunakan dekorator @pytest.fixture
. Contoh di atas mendefinisikan fixture bernama my_fixture
.
Mendefinisikan fixture yang akan digunakan bersama oleh beberapa file tes
Berikut ini adalah contoh penggunaan conftest.py untuk mendefinisikan fixture yang akan digunakan bersama oleh beberapa file pengujian.
import pytest
@pytest.fixture
def my_fixture():
return 'Hello, pytest!'
def test_my_fixture(my_fixture):
assert my_fixture == 'Hello, pytest!'
def test_my_fixture(my_fixture):
assert my_fixture == 'Hello, pytest!'
Pada contoh di atas, fixture bernama my_fixture
yang didefinisikan di conftest.py
digunakan di test_file1.py
dan test_file2.py
. Hal ini memungkinkan Anda untuk mendefinisikan fixture yang digunakan bersama oleh beberapa file pengujian.
conftest.py dan fungsi pengait pytest
Berikut ini adalah contoh penggunaan conftest.py
dan fungsi pengait pytest.
Tentukan opsi baris perintah khusus menggunakan fungsi hook pytest_addoption
def pytest_addoption(parser):
parser.addoption('--myoption', action='store', default='default value', help='my custom option')
def test_custom_option(request):
assert request.config.getoption('--myoption') == 'custom value'
Contoh di atas menggunakan fungsi hook pytest_addoption
untuk mendefinisikan opsi --myoption
. Opsi ini diatur ke 'default value'
sebagai nilai default. Selain itu, dalam fungsi test_custom_option
, -request.config.getoption('--myoption')
digunakan untuk mendapatkan nilai opsi --myoption
.
Sebagai contoh, Anda dapat menjalankan pengujian dengan opsi --myoption
sebagai berikut.
$ pytest --myoption custom value
Pada contoh di atas, 'custom value'
ditetapkan sebagai nilai dari opsi --myoption
.
Gunakan fungsi hook pytest_collection_modifyitems untuk memodifikasi daftar item tes
def pytest_collection_modifyitems(items):
for item in items:
if item.parent.name == 'test_file.py':
item.add_marker(pytest.mark.slow)
import time
def test_slow():
time.sleep(5)
def test_fast():
pass
Contoh di atas menggunakan fungsi hook pytest_collection_modifyitems
untuk menambahkan penanda @pytest.mark.slow
pada item pengujian yang dimiliki oleh file test_file.py
. Hal ini memungkinkan Anda untuk menjalankan hanya item pengujian dengan penanda @slow
pada saat pengujian.
Sebagai contoh, Anda hanya dapat menjalankan pengujian dengan penanda @slow
sebagai berikut.
$ pytest -m slow
Gunakan fungsi hook pytest_configure untuk memuat pengaturan khusus dari file pytest.ini
def pytest_configure(config):
custom_setting = config.getini('custom_setting')
print(f"custom_setting: {custom_setting}")
[pytest]
custom_setting = True
Contoh di atas menggunakan fungsi hook pytest_configure
untuk membaca pengaturan khusus yang disebut custom_setting
dari file pytest.ini
. Metode config.getini()
digunakan untuk membaca pengaturan kustom dari file pytest.ini
.
Sebagai contoh, Anda dapat membaca file pytest.ini
dan menggunakan pengaturan kustom sebagai berikut.
$ pytest
Pada contoh di atas, cukup dengan menjalankan perintah pytest akan membaca pengaturan kustom custom_setting
dari file pytest.ini
dan menampilkannya pada fungsi pengait pytest_configure
.
Referensi