Fixture dan Penyiapan/Pembongkaran
Gunakan fixture untuk membagikan status test dan menyiapkan sumber daya.
Fixture dan Penyiapan/Pembongkaran adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.
Apa Itu Fixture?
Fixture adalah fungsi yang dihiasi dengan @pytest.fixture dan menyediakan dependensi pengujian. pytest menyisipkannya berdasarkan nama.
import pytest
@pytest.fixture
def user():
return {"name": "Alice", "age": 30}
def test_name(user):
assert user["name"] == "Alice"Penyiapan dan Pembongkaran dengan yield
Hasilkan nilai fixture di dalam fixture untuk memisahkan penyiapan (sebelum yield) dari pembongkaran (setelah yield).
import pytest
@pytest.fixture
def db_connection():
conn = create_connection() # setup
yield conn
conn.close() # teardown
def test_query(db_connection):
result = db_connection.query("SELECT 1")
assert result is not NoneCakupan Fixture
Atur seberapa sering fixture dibuat dengan scope: function (bawaan), class, module, session.
import pytest
@pytest.fixture(scope="module")
def expensive_resource():
print("\nSetup once per module")
yield object()
print("\nTeardown once per module")Berbagi Fixture melalui conftest.py
Letakkan fixture di conftest.py agar dapat dibagikan ke seluruh berkas pengujian tanpa impor.
# conftest.py
import pytest
@pytest.fixture
def config():
return {"env": "test", "debug": True}
# test_app.py
def test_env(config):
assert config["env"] == "test"Dependensi Fixture
Fixture dapat bergantung pada fixture lain dengan mencantumkannya sebagai parameter.
import pytest
@pytest.fixture
def base_url():
return "http://localhost:8000"
@pytest.fixture
def api_client(base_url):
return Client(base_url)
def test_get(api_client):
resp = api_client.get("/health")
assert resp.status_code == 200Fixture autouse
Atur autouse=True untuk menerapkan fixture ke semua pengujian dalam cakupan tanpa mencantumkannya sebagai parameter.
import pytest
@pytest.fixture(autouse=True)
def reset_env(monkeypatch):
monkeypatch.setenv("ENVIRONMENT", "test")
def test_env():
import os
assert os.environ["ENVIRONMENT"] == "test"Fixture tmp_path
pytest menyediakan tmp_path sebagai fixture bawaan yang memberikan direktori sementara baru untuk setiap pengujian.
def test_write_file(tmp_path):
f = tmp_path / "hello.txt"
f.write_text("hello")
assert f.read_text() == "hello"Fixture monkeypatch
monkeypatch memungkinkan Anda mengganti atribut, variabel lingkungan, atau entri kamus untuk sementara selama pengujian.
def get_env():
import os
return os.environ.get("MODE", "prod")
def test_mode(monkeypatch):
monkeypatch.setenv("MODE", "test")
assert get_env() == "test"Fixture capsys
capsys menangkap keluaran stdout dan stderr selama pengujian.
def greet(name):
print(f"Hello, {name}!")
def test_greet(capsys):
greet("Alice")
out, err = capsys.readouterr()
assert out == "Hello, Alice!\n"Finalizer Fixture dengan request.addfinalizer
Alternatif untuk yield: daftarkan pembersihan dengan request.addfinalizer.
import pytest
@pytest.fixture
def resource(request):
r = acquire_resource()
request.addfinalizer(r.release)
return rFixture Berparameter
Gunakan params dalam fixture untuk menjalankan semua pengujian yang bergantung padanya sekali untuk setiap nilai parameter.
import pytest
@pytest.fixture(params=["sqlite", "postgres"])
def db(request):
return create_db(request.param)
def test_insert(db):
db.insert({"id": 1})
assert db.count() == 1Pemeriksaan Singkat
Cakupan fixture mana yang membuat fixture satu kali untuk seluruh sesi pengujian?
Ringkasan
Fixture menyediakan penyiapan dan pembersihan yang dapat digunakan kembali melalui yield. Gunakan scope untuk mengatur masa berlaku, conftest.py untuk berbagi, dan autouse=True untuk penerapan implisit.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Fixture dan Penyiapan/Pembongkaran” gratis?
Ya — teks lengkap “Fixture dan Penyiapan/Pembongkaran” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Fixture dan Penyiapan/Pembongkaran”?
Gunakan fixture untuk membagikan status test dan menyiapkan sumber daya. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Python Academy?
Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Fixture dan Penyiapan/Pembongkaran” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menulis Test pytest Pertama Anda
- Fixture dan Penyiapan/Pembongkaran
- Parameterisasi dan Cakupan Test
- Mocking dengan unittest.mock