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.