Pratik örnekler

Python'da Teste Giriş

Alexander Levin

Data Scientist

Veri ve boru hattı

Veri: veri bilimi maaşları.

Her satırda bir veri bilimi çalışanının maaşı, unvanı ve diğer özellikleri yer alır.

ds maaş tablosu

Boru hattı: ortalama maaşı almak için:

  1. Veriyi oku
  2. İstihdam türüne göre filtrele
  3. Ortalama maaşı hesapla
  4. Sonuçları kaydet
Python'da Teste Giriş

Boru hattı kodu

import pandas as pd

# Veriyi alan fixture
@pytest.fixture
def read_df():
    return pd.read_csv('ds_salaries.csv')
# Veriyi filtreleyen fonksiyon
def filter_df(df):
    return df[df['employment_type'] == 'FT']
# Ortalamayı alan fonksiyon
def get_mean(df):   
    return df['salary_in_usd'].mean()
Python'da Teste Giriş

Entegrasyon testleri

Test vakaları:

  • Veriyi okuma
  • Dosyaya yazma

Kod:

def test_read_df(read_df):
    # DataFrame türünü kontrol et
    assert isinstance(read_df, pd.DataFrame)
    # Satır içerdiğini kontrol et
    assert read_df.shape[0] > 0
Python'da Teste Giriş

Entegrasyon testleri

Python'ın dosya oluşturabildiğini kontrol etme örneği.

def test_write():
    # Dosyayı yazma modunda açma
    with open('temp.txt', 'w') as wfile:
        # Dosyaya yazma
        wfile.write('Testing stuff is awesome')
    # Dosyanın varlığını kontrol et
    assert os.path.exists('temp.txt')
    # İşlemden sonra temizlemeyi unutmayın
    os.remove('temp.txt')
Python'da Teste Giriş

Birim testleri

Test vakaları:

  • Filtrelenmiş veri kümesi yalnızca 'FT' istihdam türünü içerir
  • get_mean() bir sayı döndürür

Kod:

def test_units(read_df):
    filtered = filter_df(read_df)
    assert filtered['employment_type'].unique() == ['FT']
    assert isinstance(get_mean(filtered), float)
Python'da Teste Giriş

Özellik testleri

Test vakaları:

  • Ortalama sıfırdan büyüktür
  • Ortalama, veri kümesindeki en yüksek maaştan büyük değildir

Kod:

def test_feature(read_df):
    # Veriyi filtreleme
    filtered = filter_df(read_df)
    # Test: ortalama sıfırdan büyük
    assert get_mean(filtered) > 0
    # Test: ortalama en yüksek değerden büyük değil
    assert get_mean(filtered) <= read_df['salary_in_usd'].max()
Python'da Teste Giriş

Performans testleri

Test vakaları:

  • Boru hattının baştan sona çalışma süresi

Kod:

def test_performance(benchmark, read_df):
    # Benchmark dekoratörü
    @benchmark
    # Ölçülecek fonksiyon
    def get_result():
        filtered = filter_df(read_df)
        return get_mean(filtered)
Python'da Teste Giriş

Nihai test paketi

import pytest

## Integration Tests
def test_read_df(read_df):
      # Check the type of the dataframe
    assert isinstance(read_df, pd.DataFrame)
    # Check that df contains rows
    assert read_df.shape[0] > 0
def test_write():
    with open('temp.txt', 'w') as wfile:
        wfile.write('12345')
    assert os.path.exists('temp.txt')
    os.remove('temp.txt')

## Unit Tests
def test_units(read_df):
    filtered = filter_df(read_df)
    assert filtered['employment_type'].unique() == ['FT']
    assert isinstance(get_mean(filtered), float)
## Feature Tests
def test_feature(read_df):
    # Filtering the data
    filtered = filter_df(read_df)
    # Test case: mean is greater than zero
    assert get_mean(filtered) > 0
    # Test case: mean is not bigger than the maximum
    assert get_mean(filtered) <= read_df['salary_in_usd'].max()

## Performance Tests
def test_performance(benchmark, read_df):
    # Benchmark decorator
    @benchmark
    # Function to measure
    def pipeline():
        filtered = filter_df(read_df)
        return get_mean(filtered)
Python'da Teste Giriş

Hadi pratik yapalım!

Python'da Teste Giriş

Preparing Video For Download...