Traffine I/O

Bahasa Indonesia

2023-02-17

pytest conftest.py

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.

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.

conftest.py
import pytest

@pytest.fixture
def my_fixture():
return 'Hello, pytest!'
test_file1.py
def test_my_fixture(my_fixture):
assert my_fixture == 'Hello, pytest!'
test_file2.py
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

conftest.py
def pytest_addoption(parser):
    parser.addoption('--myoption', action='store', default='default value', help='my custom option')
test_file.py
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.

bash
$ 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

conftest.py
def pytest_collection_modifyitems(items):
    for item in items:
        if item.parent.name == 'test_file.py':
            item.add_marker(pytest.mark.slow)
test_file.py
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.

bash
$ pytest -m slow

Gunakan fungsi hook pytest_configure untuk memuat pengaturan khusus dari file pytest.ini

conftest.py
def pytest_configure(config):
custom_setting = config.getini('custom_setting')
print(f"custom_setting: {custom_setting}")
pytest.ini
[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.

bash
$ 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

https://docs.pytest.org/en/7.2.x/
https://github.com/pytest-dev/pytest

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!