giriiş
Destek mühendisi veya kalite güvence/test mühendisi olarak, kodunuzun kalitesini ve güvenilirliğini sağlamak önemlidir. Bunu başarmanın bir yolu, test sürecini otomatikleştirmek ve yazılımı yayınlamadan veya dağıtmadan önce kodunuzdaki hataları veya sorunları tespit etmek için Python test çerçevelerini kullanmaktır.
Aşağıdaki avantajları sunarlar:
- Test çerçeveleri kod kalitesini artırır.
- Otomatik test zamandan ve emekten tasarruf sağlar.
- Kodun yeniden kullanılabilirliği test çabalarını optimize eder ve tekrarı azaltır.
- Python test çerçeveleri diğer araçlar, modüller ve kütüphanelerle kusursuz bir şekilde entegre olur.
Bu adım adım kılavuzda, en popüler Python test çerçevelerinden biri olan PyTest'i nasıl uygulayacağınızı öğreneceksiniz.
Ön koşullar
Python test çerçevelerinin detaylarına girmeden önce, PyTest'i uygulamak için ön koşullara odaklanalım.
- Python Kurulumu: Lütfen sisteminizde Python'ın yüklü olduğundan emin olun. Python'ın en son sürümünü resmi Python web sitesinden indirebilirsiniz.
- Pip Kurulumu: Pip (Python için Paket Yükleyici), Python'da paketleri, kütüphaneleri ve bağımlılıkları yönetmek için kullanılan bir araçtır. Python paketlerini kurmamızı ve yönetmemizi sağlar. Sisteminizde pip'in yüklü olduğundan emin olun.
Pip'in kurulu olup olmadığını kontrol etmek için komut satırınızda/terminalinizde aşağıdaki komutu çalıştırabilirsiniz:
python -m pip --versionVeya
python3 -m pip --versionPython test çerçevesi nedir?
Python test çerçevesi, otomasyon testleri için Python'da test yazma ve yürütme konusunda yapı ve kılavuzlar sağlayan bir dizi araç ve kütüphanedir. Kodun istenen kalite standartlarını karşılamasını sağlar. Her Backend geliştiricisi, Yazılım Mühendisi, DevOps ve QA/Test mühendisi için gerekli ve faydalıdır. Ünlü ve yaygın olarak kullanılan Python test çerçevelerinden bazıları Pytest, PyUnit, DocTest, Testify, Robot ve daha fazlasıdır.
PyTest uygulaması
PyTest'i Yükleme
PyTest'i kullanmaya başlamak için sisteminize kurmanız gerekir. Terminalinizi açın ve aşağıdaki komutu çalıştırın:
pip install pytestBu komut PyTest'in en son sürümünü ve bağımlılıklarını indirip kuracaktır.
Yazma testi maddeleri
Artık PyTest kurulduğuna göre, bazı temel birim test senaryolarını yazmaya başlayabiliriz.
Lütfen yeni bir Python dosyası oluşturun ve adını şu şekilde yazın: test_backend.py Bu dosya, PyTest sözdizimini kullanarak test durumlarımızı tanımlar.
Not: Varsayılan olarak, PyTest, adları "test_" ile başlayan veya "_test" ile biten dosyalardaki tüm test durumlarını keşfeder ve çalıştırır. pytest keşif işlemi, geçerli klasörü ve alt klasörlerini "test_" ile başlayan veya "_test" ile biten dosyalar için yinelemeli olarak tarar. Ardından, bu dosyalardaki testler çalıştırılır.
import pytest
def test_addition():
assert 3 + 3 == 6
def test_subtraction():
assert 5 - 4 == 1
def test_multiplication():
assert 4 * 4 == 16
def test_division():
assert 10 / 2 == 5Yukarıdaki örnekte, dört temel birim testini fonksiyon olarak tanımladık: test_addition, test_subtraction, test_multiplication ve test_division. assert anahtar sözcüğü, kod hatalarını ayıklarken kullanılır ve kodunuzdaki belirli bir koşulun True döndürüp döndürmediğini test etmenizi sağlar. Döndürmüyorsa, AssertionError döndürür.
Test durumlarını yürütün, belirli testleri yürütün
Testleri çalıştırmak için test_backend.py dosyasını kaydettiğiniz klasöre gidin ve ardından terminalinizde veya komut satırınızda aşağıdaki komutu çalıştırın:
pytestVeya
python -m pytestÇıktı:
Output
test session starts
==================================================
platform darwin -- Python 3.9.6, pytest-7.4.3, pluggy-1.3.0
rootdir: ~/Python Testing Frameworks
collected 4 items
test_backend.py ....
==================================================
4 passed in 0.01s PyTest'i kullanırken, dosyanızdaki her testi manuel olarak çalıştırmanıza gerek kalmaz. Araç, tanımlanmış tüm test durumlarını otomatik olarak bulup çalıştırır. Her şey yolunda giderse ve tüm doğrulamalar doğruysa, yukarıda gösterildiği gibi test sonuçlarının ve geçilen test sayısının güzel bir özetini alırsınız.
Diyelim ki o anda testlerden biri başarısız oldu, aşağıdaki çıktıyı görüyoruz:
Output
test session starts
==================================================
platform darwin -- Python 3.9.6, pytest-7.4.3, pluggy-1.3.0
rootdir: ~/Python Testing Frameworks
collected 4 items
test_backend.py ...F
================================================== [100%]
FAILURES
==================================================
test_division
def test_division():
> assert 10 / 2 == 6
E assert (10 / 2) == 6
test_backend.py:13: AssertionError
short test summary info
==================================================
FAILED test_backend.py::**test_division** - assert (10 / 2) == 6
1 failed, 3 passed in 0.01s
Deneysel keşif
PyTest, test senaryolarınızı yapılandırılmış bir şekilde düzenlemenizi sağlayan güçlü test keşif özellikleri sunar. Varsayılan olarak PyTest, adları "test_" ile başlayan veya "_test" ile biten dosyalardaki tüm test senaryolarını keşfeder ve yürütür. Ancak, çeşitli komut satırı seçeneklerini kullanarak veya bir dosyayı yapılandırarak test keşif sürecini özelleştirebilirsiniz. pytest.ini Özelleştirmek.
Örneğin, aşağıdaki komutu çalıştırarak test modüllerini aramak için belirli bir dizin belirtebilirsiniz:
pytest tests/Bu komut yalnızca “tests” dizinindeki test vakalarını çalıştıracaktır.
Test ekipmanı
Pytest'teki test araçları, test senaryolarınız için tutarlı bir temel oluşturmak üzere yeniden kullanılabilen harika bileşenlerdir. Testleriniz için ön koşullar oluşturmak ve testleriniz tamamlandıktan sonra kaynakları temizlemek istediğinizde kullanışlıdırlar. PyTest, test araçlarını tanımlamayı ve kullanmayı kolaylaştırır.
Bir test fikstürünü tanımlamak için dekoratörü kullanmalısınız. @pytest.fixture Örneğin, aşağıda tanımlanan db adlı bir fikstür, bir veritabanı bağlantısı açacak ve işlemden sonra bağlantıyı kapatacaktır. Bu fikstürü şu şekilde tanımlayabiliriz:
import pytest
@pytest.fixture
def db():
# Set up the database connection
db = create_db()
yield db
# Clean up the database connection
db.close()Bu örnekte, yield ifadesi, test durumları yürütüldükten sonra yürütülecek kodu tanımlar. yield anahtar sözcüğü, Python'da değerleri döndürmek için kullanılan return ifadesine benzer şekilde, bir üreteç fonksiyonunun akışını kontrol etmek için kullanılır.
Bir fikstürü bir testte kullanmak için, onu test fonksiyonuna argüman olarak geçirmeniz gerekir.
Örneğin:
def query_test(db):
results = db.query("SELECT * FROM users")
assert len(result) == 12Bu test durumunda, fikstür db Otomatik olarak işlev görmek için sorgu_testi() Enjekte edilir ve veritabanı işlemlerini gerçekleştirmek için kullanılmasına olanak tanır. Fikstürler, geliştiricilerin veritabanı bağlantıları, API istemcileri veya sahte nesneler gibi belirli test ortamları hazırlamaları için faydalıdır. Geliştiriciler, fikstürleri kullanarak testlerin izole ve tekrarlanabilir olmasını sağlayabilir.
Test mühendisleri ayrıca test altındaki sistemi hazırlamak, test verilerini yönetmek veya karmaşık senaryoları simüle etmek için ekipmanları kullanabilirler.
Ayrıca cihazlar test sonrasında kaynakları temizlemek, güvenilirliği artırmak ve test setini korumak için de kullanılabilir.
Sonuç
Bu eğitimde, en popüler ve özellik açısından zengin Python test çerçevelerinden biri olan PyTest'in nasıl uygulanıp kullanılacağını öğrendik ve Python'da uygulanması için adım adım bir kılavuz sunduk. Kod tabanınız geliştikçe, test senaryolarını sürekli olarak yazmak ve güncellemek çok önemlidir. Testlere zaman ve emek harcayarak hataları daha erken tespit edebilir, kod kalitesini artırabilir ve daha sağlam ve güvenilir bir yazılım sunabilirsiniz.









