0Pricing
Python Academy · Ders

Fixture'lar ve Kurulum/Kapatma

Paylaşılan test durumu ve kaynak kurulumu için fixture'ları kullanın.

Fixture'lar ve Kurulum/Kapatma, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

Fikstürler nedir?

Fikstürler, sınama bağımlılıkları sağlayan ve @pytest.fixture ile dekore edilen işlevlerdir. pytest, bunları adlarına göre ekler.

import pytest

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

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

yield ile kurulum ve temizleme

Kurulumu (yield öncesi) temizlemeden (yield sonrası) ayırmak için bir fikstürün içinde fikstür değerini yield ile üretin.

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

Fikstür Kapsamları

Bir fikstürün ne sıklıkta oluşturulacağını scope ile denetleyin: function (varsayılan), class, module, session.

import pytest

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

conftest.py Üzerinden Fikstürleri Paylaşma

Fikstürleri içe aktarma olmadan tüm sınama dosyaları arasında paylaşmak için onları conftest.py dosyasına koyun.

# conftest.py
import pytest

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

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

Fikstür Bağımlılıkları

Fikstürler, diğer fikstürleri parametre olarak listeleyerek onlara bağımlı olabilir.

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

autouse Fikstürleri

Kapsam içindeki tüm sınamalara, fikstürü parametre olarak listelemeden uygulamak için autouse=True ayarını yapın.

import pytest

@pytest.fixture(autouse=True)
def reset_env(monkeypatch):
    monkeypatch.setenv("ENVIRONMENT", "test")

def test_env():
    import os
    assert os.environ["ENVIRONMENT"] == "test"

tmp_path Fikstürü

pytest, her sınama için yeni bir geçici dizin sağlayan yerleşik tmp_path fikstürünü sunar.

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

monkeypatch Fikstürü

monkeypatch, bir sınama sırasında öznitelikleri, ortam değişkenlerini veya sözlük girdilerini geçici olarak değiştirmenizi sağlar.

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

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

capsys Fikstürü

capsys, sınamalar sırasında standart çıktı ve standart hata çıktısını yakalar.

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

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

request.addfinalizer ile Fikstür Sonlandırıcıları

yield kullanımına alternatif olarak temizleme işlemini request.addfinalizer ile kaydedin.

import pytest

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

Parametreli Fikstürler

Bir fikstürde params kullanarak, ona bağlı tüm sınamaları her parametre değeri için bir kez çalıştırın.

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

Hızlı Kontrol

Fikstürü tüm sınama oturumu boyunca bir kez oluşturan fikstür kapsamı hangisidir?

Özet

Fikstürler, yield aracılığıyla yeniden kullanılabilir kurulum ve temizleme işlemleri sağlar. Yaşam süresini denetlemek için scope, paylaşım için conftest.py ve örtük uygulama için autouse=True kullanın.

Sıkça Sorulan Sorular

“Fixture'lar ve Kurulum/Kapatma” dersi ücretsiz mi?

Evet — “Fixture'lar ve Kurulum/Kapatma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“Fixture'lar ve Kurulum/Kapatma” dersinde ne öğreneceğim?

Paylaşılan test durumu ve kaynak kurulumu için fixture'ları kullanın. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Fixture'lar ve Kurulum/Kapatma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İlk pytest Testlerinizi Yazma
  2. Fixture'lar ve Kurulum/Kapatma
  3. Parametreleştirme ve Test Kapsamı
  4. unittest.mock ile Sahte Nesne Kullanımı
← Python Academy Sayfasına Dön