Kod yazma, çalıştırma ve test etme¶
Bir hatayı düzeltmek veya bir özelliği eklemek için yeni kod yazmanız gerekecektir.
Kod üzerinde çalışmaya başlamak için, geliştirme ortamınızın kurulduğundan ve bir dal üzerinde çalıştığınızdan emin olun.
BeeWare için kod yazma kurallarımızı özetleyen bir kod stil kılavuzumuz bulunmaktadır.
Test odaklı geliştirme¶
Kodunuzun beklediğiniz şekilde çalışacağından emin olmanın iyi bir yolu, öncelikle bunu test etmek için bir test senaryosu yazmaktır. Test edilen kod henüz mevcut olmadığı için bu test senaryosu başlangıçta başarısız sonuç vermelidir. Ardından, testin başarılı olması için gereken kod değişikliklerini yazabilir ve yazdığınız kodun, beklediğiniz sorunu çözdüğünden emin olabilirsiniz.
Kodunu çalıştır¶
Kodunuzu yazdıktan sonra, kodun çalıştığından emin olmanız gerekir. Kodun beklediğiniz şekilde çalıştığını doğrulamak için onu manuel olarak çalıştırmanız gerekecektir. Henüz yapmadıysanız, yaptığınız değişiklikler için bir test senaryosu yazmanızda fayda var; yukarıda da belirtildiği gibi, kodunuz yorum satırına alınmışsa veya mevcut değilse bu test başarısız olmalıdır.
Test senaryonuzu test paketine ekleyeceksiniz, böylece diğer testlerle birlikte çalıştırılabilecektir. Bir sonraki adım, test paketini çalıştırmaktır.
Testleri çalıştırma ve kapsama oranı¶
BeeWare test sürecini yönetmek için
tox'yi, kendi test paketini ise
pytest'yi kullanır.
Varsayılan tox komutu aşağıdakileri içerir:
- pre-commit kancaları
towncriersürüm notu kontrolü-
belge denetimi
-
mevcut Python sürümleri için test paketi
-
kod kapsamı raporlaması
Bir çekme isteği gönderdiğinizde CI tarafından çalıştırılan işlem temel olarak budur.
Tüm test paketini çalıştırmak için şunu girin:
(.venv) $ tox
(.venv) $ tox
(.venv) C:\...>tox
Test paketinin tamamının çalıştırılması biraz zaman alabilir. tox komutunu
paralel olarak çalıştırarak veya tox p (ya da tox run-parallel) komutunu
kullanarak bu süreci önemli ölçüde hızlandırabilirsiniz. Test paketini paralel
olarak çalıştırdığınızda, testler devam ederken ilerleme durumuna ilişkin daha
az geri bildirim alırsınız, ancak test çalışmasının sonunda tespit edilen
sorunların bir özetini yine de görürsünüz. Testlerin çalıştırıldığını belirten
bir çıktı almalısınız. SKIPPED testlerini görebilirsiniz, ancak hiçbir zaman
FAIL veya ERROR test sonuçları almamalısınız. Her yamayı birleştirmeden önce
tam test paketimizi çalıştırırız. Bu işlemde herhangi bir sorun tespit edilirse,
yamayı birleştirmeyiz. Bir test hatası veya başarısızlığı bulursanız, ya test
ortamınızda garip bir durum vardır ya da daha önce görmediğimiz bir sınır durumu
bulmuşsunuzdur - her iki durumda da bize bildirin!
Testlerin başarılı olmasının yanı sıra, bu durum %100 test kapsamı olarak raporlanmalıdır.
Test varyasyonlarını çalıştırma¶
Python'un farklı sürümleri için testler çalıştırın¶
Varsayılan olarak, tox komutlarının çoğu, BeeWare tarafından
desteklenen her Python sürümü için birer kez olmak üzere test paketini birden
fazla kez çalıştırmaya çalışır. Ancak bunun için, her bir Python sürümünün
bilgisayarınızda yüklü olması ve tox'nin Python
keşif
işlemi tarafından algılanabilmesi gerekir. Genel olarak, bir Python sürümü
PATH aracılığıyla erişilebilirse, tox bu sürümü bulup kullanabilmelidir.
Yalnızca test paketini çalıştır¶
Yeni bir özellik üzerinde hızlı bir şekilde yineleme yapıyorsanız, test paketinin tamamını çalıştırmanıza gerek yoktur; sadece birim testlerini çalıştırabilirsiniz. Bunu yapmak için şu komutu çalıştırın:
(.venv) $ tox -e py
(.venv) $ tox -e py
(.venv) C:\...>tox -e py
Testlerin bir kısmını çalıştır¶
Varsayılan olarak, tox komutu birim test paketindeki tüm testleri çalıştırır.
Yeni bir test geliştirirken, sadece o testi çalıştırmak faydalı olabilir. Bunu
yapmak için, pytest komutuna argüman olarak [herhangi bir
(https://docs.pytest.org/en/latest/how-to/usage.html#specifying-which-tests-to-run)
belirteci]tox geçirebilirsiniz. Bu test yolları, briefcase dizinine göre
görelidir. Örneğin, tek bir dosyadaki testleri çalıştırmak için şunu girin:
(.venv) $ tox -e py -- tests/path_to_test_file/test_some_test.py
(.venv) $ tox -e py -- tests/path_to_test_file/test_some_test.py
(.venv) C:\...>tox -e py -- tests/path_to_test_file/test_some_test.py
Test paketinin bir bölümünü çalıştırdığınızda yine de bir kapsama raporu alacaksınız; ancak kapsama sonuçları, yalnızca çalıştırdığınız belirli testler tarafından yürütülen kod satırlarını gösterecektir.
Belirli bir Python sürümü için test paketini çalıştır¶
Varsayılan olarak tox -e py, bilgisayarınızda python olarak çözümlenen
herhangi bir yorumlayıcı kullanılarak çalıştırılır. Bilgisayarınızda birden
fazla Python sürümü yüklüyse ve yüklü sürümlerden belirli bir Python sürümünü
test etmek istiyorsanız, kullanılacak Python sürümünü belirtebilirsiniz.
Örneğin, test paketini Python 3.10 üzerinde çalıştırmak için
şu komutu çalıştırın:
(.venv) $ tox -e py310
(.venv) $ tox -e py310
(.venv) C:\...>tox -e py310
Bir test kümesi, komut satırına -- ve bir test tanımı eklenerek
çalıştırılabilir.
Test paketini kapsama analizi yapmadan çalıştır (hızlı)¶
Varsayılan olarak, tox test dizisini tek iş parçacıklı modda çalıştırır. Test
dizisini paralel olarak çalıştırarak yürütme süresini kısaltabilirsiniz. Bu
modda, başlatılan işlemler içinde kapsama oranını yakalamanın karmaşıklığı
nedeniyle kapsama dosyaları oluşturulmaz. Tek bir Python sürümünü "hızlı" modda
çalıştırmak için şunu çalıştırın:
(.venv) $ tox -e py-fast
(.venv) $ tox -e py-fast
(.venv) C:\...>tox -e py-fast
Bir test kümesi, komut satırına -- ve bir test tanımı eklenerek
çalıştırılabilir; belirli bir Python sürümü, test hedefine
sürüm eklenerek kullanılabilir (örneğin, Python py310-fast üzerinde hızlı çalıştırmak için 3.10).
Kod kapsamı¶
BeeWare kod tabanında %100 test kapsamı sağlar. Projeye kod eklediğinizde veya mevcut kodu değiştirdiğinizde, yaptığınız değişikliklerin test kapsamına alınmasını sağlamak için test kodu eklemeniz gerekir.
Ancak, BeeWare hem birden fazla platformu hem de Python'un çeşitli
sürümlerini hedeflediğinden, tam kapsam tek bir platform ve Python sürümünde
doğrulanamaz. Bunu telafi etmek için,
tool.coverage.coverage_conditional_plugin.rules bölümünde birkaç koşullu
kapsama kuralı tanımlanmıştır (örneğin, pyproject.toml Windows'ta test
takımını çalıştırırken yürütülmeyecek bir kod bloğunu işaretlemek için
kullanılabilir). Bu kurallar, yalnızca belirli platformlarda veya Python
sürümlerinde kapsanan kod bölümlerini tanımlamak için kullanılır.
Dikkat edilmesi gereken bir nokta, farklı Python sürümleri arasında kod kapsama raporlamasının biraz tuhaf sonuçlar verebilmesidir. Örneğin, kapsama dosyaları bir Python sürümüyle oluşturulmuş ancak raporlama başka bir sürümde yapılmışsa, raporda gözden kaçan dallara ilişkin yanlış pozitif sonuçlar yer alabilir. Bu nedenle, kod kapsama raporlamasında her zaman kapsama dosyalarının oluşturulmasında kullanılan en eski Python sürümü kullanılmalıdır.
Kapsam sonuçlarını anlamak¶
Kapsama testi çıktısının sonunda, toplanan kapsama verilerine ilişkin bir rapor bulunmalıdır:
Adı Hesaplar Kayıp Şube BrPart Kapsam Eksik
---------------------------------------------------
TOPLAM 7540 0 1040 0 100,0%
Bu, test takımının koddaki tüm olası dallanma yollarını çalıştırdığını gösterir. Bu, hata olmadığına dair %100 bir garanti değildir, ancak kod tabanındaki her satırı test ettiğimiz anlamına gelir.
Kod tabanında değişiklik yaparsanız, bu kapsama alanında bir boşluk oluşabilir.
Böyle bir durumda, kapsama raporu hangi satırların çalıştırılmadığını size
gösterecektir. Örneğin, some/interesting_file.py içinde bir değişiklik yapıp
yeni bir mantık eklediğimizi varsayalım. Kapsama raporu şunun gibi görünebilir:
Adımlar Hata Dal BrPart Kapsam Eksik
-------------------------------------------------------------------------------
src/some/interesting_file.py 111 1 26 0 %98,1 170, 302-307, 320->335
-------------------------------------------------------------------------------
TOPLAM 7540 1 1726 0 %99,9
Bu, 170. satırın, 302-307. satırların ve 320. satırdan 335. satıra atlayan bir dalın test paketi tarafından çalıştırılmadığını gösteriyor. Bu kapsama oranını geri kazanmak için yeni testler eklemeniz (veya mevcut bir testi değiştirmeniz) gerekecek.
Ana platform ve Python sürümü için uyumluluk raporu¶
Kullandığınız Python platformu ve sürümü için bir kapsama raporu oluşturabilirsiniz. Örneğin, test takımını çalıştırıp Python 3.10 için bir kapsama raporu oluşturmak için şu komutu çalıştırın:
(.venv) $ tox -m test310
(.venv) $ tox -m test310
(.venv) C:\...>tox -m test310
Ana platform için kapsama raporu¶
Python'un desteklenen tüm sürümleri tox için mevcutsa, ana platformun kapsama
oranı şu komut çalıştırılarak raporlanabilir:
(.venv) $ tox p -m test-platform
(.venv) $ tox p -m test-platform
(.venv) C:\...>tox p -m test-platform
HTML'de kapsam raporlaması¶
Kapsam -html ortam adlarının herhangi birinin sonuna tox eklenerek bir HTML
kapsam raporu oluşturulabilir; örneğin:
(.venv) $ tox -e coverage-platform-html
(.venv) $ tox -e coverage-platform-html
(.venv) C:\...>tox -e coverage-platform-html
Mesele sadece test yazmak değil!¶
Her ne kadar tüm kodlarımızı test ettiğimizden emin olsak da, bu iş sadece bu test düzeyini korumaktan ibaret değildir. Bu işin bir parçası da, kod üzerinde çalışırken onu denetlemektir. Somut bir can yeleği için kapsamlı bir test dizisi yazabilirsiniz… ama somut bir can yeleği yine de asıl amacına uygun olarak kullanılamaz!
Testler geliştirirken, çekirdek modülün içsel olarak da tutarlı olup
olmadığını kontrol etmelisiniz. İçsel olarak tutarlı olmayan yöntem adları fark
ederseniz (örneğin, bir modülde on_select olarak adlandırılan, ancak başka bir
modülde on_selected olarak adlandırılan bir şey) veya verilerin tutarlı bir
şekilde işlenmediği durumlar varsa, bunu işaretleyin ve bir bilet açarak bize
bildirin. Ya da ne yapılması gerektiğini bildiğinizden eminseniz, bulduğunuz
sorunu düzelten bir çekme isteği oluşturun.
Her şey çalışır hale geldiğinde, değişikliklerinizi içeren bir çekme isteği gönderin.