Python Academy · Pelajaran

Fixture dan Persediaan/Pembersihan

Gunakan fixture untuk keadaan ujian yang dikongsi dan persediaan sumber.

Pelajaran 2 daripada 413 langkah

Fixture dan Persediaan/Pembersihan ialah pelajaran Python Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Python Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Python Academy merangkumi sejumlah 4 pelajaran.

Apakah Lekapan?

Lekapan ialah fungsi yang dihiasi dengan @pytest.fixture dan menyediakan kebergantungan ujian. pytest menyuntikkannya mengikut nama.

import pytest

@pytest.fixture
def user():
    return {"name": "Alice", "age": 30}

def test_name(user):
    assert user["name"] == "Alice"

Persediaan dan Pembersihan dengan yield

Kembalikan nilai lekapan menggunakan yield di dalam lekapan untuk memisahkan persediaan (sebelum yield) daripada pembersihan (selepas 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 None

Skop Persediaan Ujian

Atur kekerapan persediaan ujian dicipta dengan scope: function (lalai), class, module, session.

import pytest

@pytest.fixture(scope="module")
def expensive_resource():
    print("\nSetup once per module")
    yield object()
    print("\nTeardown once per module")

Perkongsian Persediaan Ujian melalui conftest.py

Letakkan persediaan ujian dalam conftest.py untuk berkongsinya merentas fail ujian tanpa import.

# conftest.py
import pytest

@pytest.fixture
def config():
    return {"env": "test", "debug": True}

# test_app.py
def test_env(config):
    assert config["env"] == "test"

Kebergantungan Persediaan Ujian

Persediaan ujian boleh bergantung pada persediaan ujian lain dengan menyenaraikannya 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 == 200

Persediaan Ujian Automatik

Tetapkan autouse=True untuk menggunakan persediaan ujian pada semua ujian dalam skop tanpa menyenaraikannya 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"

Persediaan Ujian tmp_path

pytest menyediakan tmp_path sebagai persediaan ujian terbina dalam yang memberikan direktori sementara baharu bagi setiap ujian.

def test_write_file(tmp_path):
    f = tmp_path / "hello.txt"
    f.write_text("hello")
    assert f.read_text() == "hello"

Persediaan Ujian monkeypatch

monkeypatch membolehkan anda menggantikan atribut, pemboleh ubah persekitaran atau entri kamus buat sementara semasa ujian.

def get_env():
    import os
    return os.environ.get("MODE", "prod")

def test_mode(monkeypatch):
    monkeypatch.setenv("MODE", "test")
    assert get_env() == "test"

Persediaan Ujian capsys

capsys menangkap hasil stdout dan stderr semasa ujian.

def greet(name):
    print(f"Hello, {name}!")

def test_greet(capsys):
    greet("Alice")
    out, err = capsys.readouterr()
    assert out == "Hello, Alice!\n"

Pembersihan Akhir Persediaan Ujian dengan request.addfinalizer

Alternatif kepada yield: daftarkan pembersihan dengan request.addfinalizer.

import pytest

@pytest.fixture
def resource(request):
    r = acquire_resource()
    request.addfinalizer(r.release)
    return r

Persediaan Ujian Berparameter

Gunakan params dalam persediaan ujian untuk menjalankan semua ujian yang bergantung padanya sekali bagi 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() == 1

Semakan Pantas

Skop persediaan ujian manakah yang mencipta persediaan ujian sekali untuk keseluruhan sesi ujian?

Imbas Kembali

Persediaan ujian menyediakan persediaan dan pembersihan yang boleh digunakan semula melalui yield. Gunakan scope untuk mengawal tempoh hayat, conftest.py untuk perkongsian dan autouse=True untuk penggunaan tersirat.

Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
76
Pelajaran
320

Soalan Lazim

Adakah pelajaran “Fixture dan Persediaan/Pembersihan” percuma?

Ya — teks penuh “Fixture dan Persediaan/Pembersihan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Python Academy, tingkat taraf kepada CoddyKit PRO. Kursus Python Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Fixture dan Persediaan/Pembersihan”?

Gunakan fixture untuk keadaan ujian yang dikongsi dan persediaan sumber. Anda berlatih Python Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Python Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Python Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Fixture dan Persediaan/Pembersihan” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Menulis Ujian pytest Pertama Anda
  2. Fixture dan Persediaan/Pembersihan
  3. Parameter dan Liputan Ujian
  4. Mock dengan unittest.mock
← Kembali ke Python Academy