yoklateknik mülakat

Backend Python Testing Tooling Mülakat Soruları

75 doğrulanmış Backend Python Testing Tooling mülakat sorusu — cevaplarıyla çöz, açıklamalarıyla öğren, gerçek simülasyonda kendini test et.

Gerçek simülasyonu dene →

Örnek sorular

Python Testing ToolingZorluk 2
def test_values():
    result = [1, 2, 3]
    assert result == [1, 2, 3, 4]

Bu test çalıştığında ne olur?
  • aUzunlukları farklı olduğu için AssertionError ile başarısız olur
  • bListeleri karşılaştırmadan önce TypeError fırlatır
  • cGeçer, çünkü her ikisi de liste
  • dpytest listeler farklı olduğu için testi otomatik atlar, hiçbir hata fırlatmadan
Açıklama:== listeleri eleman eleman ve uzunluk bazında karşılaştırır; [1,2,3] != [1,2,3,4] olduğundan çıplak assert AssertionError fırlatır ve pytest bunu başarısız test olarak raporlar (hata ya da atlama değil).
Python Testing ToolingZorluk 1
test_math.py adlı bir dosyada pytest otomatik olarak hangi fonksiyonu test olarak keşfedip çalıştırır?
  • adef check_addition(): ...
  • bdef test_addition(): ...
  • cdef Addition_test(): ...
  • ddef _test_addition(): ...
Açıklama:pytest'in varsayılan keşif mekanizması, test_.py ya da _test.py kalıbına uyan dosyalar içinde test_ ile başlayan fonksiyonları toplar. check_addition ve Addition_test bu önek kuralına uymaz, başta alt çizgi olması da keşfi bozar.
Python Testing ToolingZorluk 2
import pytest

@pytest.fixture
def sample_data():
    return {"id": 1, "name": "alice"}

def test_name(sample_data):
    assert sample_data["name"] == "alice"

sample_data, test_name fonksiyonunun parametresi olarak ne işe yarar?
  • aTesti koşullu olarak atlayan bir decorator'dır
  • bpytest'in otomatik okuduğu global bir değişkendir
  • cpytest, parametre adını fixture ile eşleştirip onun dönüş değerini enjekte eder
  • dDeğer alması için test_name içinde yine de açıkça import edilmesi gerekir, aksi halde hiç kullanılamaz
Açıklama:pytest, test fonksiyonunun parametrelerini kayıtlı fixture'larla isim üzerinden eşleştirir. sample_data fixture ile eşleştiği için pytest fixture'ı çağırır ve dönüş değerini test_name'e argüman olarak geçirir.
Python Testing ToolingZorluk 1
import pytest

order = []

@pytest.fixture
def resource():
    order.append("setup")
    yield "R"
    order.append("teardown")

def test_use(resource):
    order.append("test")

test_use çalıştıktan sonra order'ın değeri nedir?
  • a["setup", "test"] — teardown hiç çalışmaz
  • b["setup", "teardown", "test"]
  • c["test", "setup", "teardown"]
  • d["setup", "test", "teardown"]
Açıklama:yield'den önceki kod setup olarak çalışır, yield'den sonraki değer teste enjekte edilir, test gövdesi çalışır, sonra pytest fixture'ı yield sonrasından devam ettirip teardown kodunu çalıştırır. Sıra: setup, test, teardown.
Python Testing ToolingZorluk 3
import pytest

@pytest.mark.parametrize("n, expected", [(2, 4), (3, 9), (4, 16)])
def test_square(n, expected):
    assert n * n == expected

pytest, test_square için kaç ayrı test çalıştırması raporlar?
  • aÜç — parametrize listesindeki her demet için bir tane
  • bİki
  • cBir
  • dTest gövdesindeki assertion'lardan kaçının başarısız olduğuna tamamen bağlıdır
Açıklama:@pytest.mark.parametrize, verilen listedeki her giriş için bağımsız bir test çağrısı üretir ve bunları pytest çıktısında ayrı ayrı raporlar. Üç demet olduğu için pytest testi üç kez çalıştırıp raporlar.
Python Testing ToolingZorluk 2
import pytest

def divide(a, b):
    return a / b

def test_divide_by_zero():
    with pytest.raises(ZeroDivisionError):
        divide(1, 0)

Bu testin geçmesi için with pytest.raises(...) bloğu içinde ne olması gerekir?
  • aSarmalanan kod None döndürmeli
  • bSarmalanan kod ZeroDivisionError ya da onun bir alt sınıfını fırlatmalı
  • cSarmalanan kod False döndürmeli
  • dSarmalanan kod bir hata mesajı yazdırmalı ve bunu standart çıktıya vermeli
Açıklama:pytest.raises(ExceptionType), yalnızca içindeki blok verilen tipe uyan (ya da onun alt sınıfı olan) bir exception fırlattığında geçen bir context manager'dır; hiç exception fırlamazsa ya da farklı bir tip fırlarsa test başarısız olur.

3300 soruluk Backend bankasında kendini sına.

Mülakata başla