CherryPy - Test
Test, uygulamanın farklı bakış açılarından yürütüldüğü bir süreçtir.
- Sorunların listesini bulun
- Beklenen ve gerçek sonuç, çıktı, durumlar vb. Arasındaki farkları bulun.
- Uygulama aşamasını anlayın.
- Gerçekçi amaçlar için faydalı uygulamayı bulun.
Testin amacı geliştiriciyi hataya düşürmek değil, belirli bir zamanda uygulamanın sağlığını tahmin etmek için araçlar sağlamak ve kaliteyi artırmaktır.
Testin önceden planlanması gerekir. Bu, testin amacını tanımlamayı, test senaryolarının kapsamını anlamayı, iş gereksinimlerinin listesini yapmayı ve projenin farklı aşamalarında yer alan risklerin farkında olmayı gerektirir.
Test, bir sistem veya uygulama üzerinde doğrulanacak bir dizi husus olarak tanımlanır. Aşağıdakilerin bir listesicommon test approaches -
Unit testing- Bu genellikle geliştiricilerin kendileri tarafından gerçekleştirilir. Bu, bir kod biriminin beklendiği gibi çalışıp çalışmadığını kontrol etmeyi amaçlar.
Usability testing- Geliştiriciler genellikle sistem bilgisi olmayan son kullanıcılar için bir uygulama yazdıklarını unutabilirler. Kullanılabilirlik testi, ürünün artılarını ve eksilerini doğrular.
Functional/Acceptance testing - Kullanılabilirlik testi, bir uygulamanın veya sistemin kullanılabilir olup olmadığını kontrol ederken, işlevsel test, belirtilen her işlevin uygulanmasını sağlar.
Load and performance testing- Bu, sistemin yapılacak yük ve performans testlerine uyum sağlayıp sağlamayacağını anlamak için yapılır. Bu, donanımda değişikliklere, SQL sorgularının optimize edilmesine vb. Neden olabilir.
Regression testing - Bir ürünün art arda yayımlanmasının önceki işlevlerin hiçbirini bozmadığını doğrular.
Reliability and resilience testing - Güvenilirlik testi, bir veya birkaç bileşenin bozulmasıyla sistem uygulamasının doğrulanmasına yardımcı olur.
Birim Testi
Photoblog uygulamaları, aşağıdakileri kontrol etmek için sürekli olarak birim testlerini kullanır -
- Yeni işlevler doğru ve beklendiği gibi çalışır.
- Mevcut işlevler, yeni kod sürümüyle bozulmaz.
- Kusurlar giderildi ve sabit kaldı.
Python, birim testine farklı bir yaklaşım sunan standart bir birim test modülü ile birlikte gelir.
Ünite testi
unittest, Kent Beck ve Erich Gamma tarafından geliştirilen bir Java birim test paketi olan JUnit'e dayanmaktadır. Birim testleri basitçe tanımlanmış verileri döndürür. Sahte nesneler tanımlanabilir. Bu nesneler, genel uygulamaya güvenmek zorunda kalmadan tasarımımızın bir arayüzüne karşı test yapılmasına izin verir. Ayrıca, diğer testlerin dahil olduğu izolasyon modunda testleri çalıştırmanın bir yolunu sağlarlar.
Bir kukla sınıfı şu şekilde tanımlayalım -
import unittest
class DummyTest(unittest.TestCase):
def test_01_forward(self):
dummy = Dummy(right_boundary=3)
self.assertEqual(dummy.forward(), 1)
self.assertEqual(dummy.forward(), 2)
self.assertEqual(dummy.forward(), 3)
self.assertRaises(ValueError, dummy.forward)
def test_02_backward(self):
dummy = Dummy(left_boundary=-3, allow_negative=True)
self.assertEqual(dummy.backward(), -1)
self.assertEqual(dummy.backward(), -2)
self.assertEqual(dummy.backward(), -3)
self.assertRaises(ValueError, dummy.backward)
def test_03_boundaries(self):
dummy = Dummy(right_boundary=3, left_boundary=-3,allow_negative=True)
self.assertEqual(dummy.backward(), -1)
self.assertEqual(dummy.backward(), -2)
self.assertEqual(dummy.forward(), -1)
self.assertEqual(dummy.backward(), -2)
self.assertEqual(dummy.backward(), -3)
Kodun açıklaması aşağıdaki gibidir -
belirtilen sınıf için birim test yetenekleri sağlamak için unittest modülü içe aktarılmalıdır.
Unittest alt sınıflandırma ile bir sınıf oluşturulmalıdır.
Yukarıdaki koddaki her yöntem bir kelime testiyle başlar. Tüm bu yöntemler birim test işleyicisi tarafından çağrılır.
Assert / fail yöntemleri, istisnaları yönetmek için test senaryosu tarafından çağrılır.
Bunu bir test çalışması yürütmek için bir örnek olarak düşünün -
if __name__ == '__main__':
unittest.main()
Test senaryosunu çalıştırmanın sonucu (çıktı) aşağıdaki gibi olacaktır -
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
Fonksiyonel test
Uygulama işlevleri gereksinimlere göre şekillenmeye başladığında, bir dizi işlevsel test, uygulamanın spesifikasyonla ilgili doğruluğunu onaylayabilir. Bununla birlikte, Selenium gibi üçüncü taraf ürünlerin kullanılmasını gerektirecek daha iyi performans için test otomatikleştirilmelidir.
CherryPy, işlevsel testlerin yazılmasını kolaylaştırmak için yerleşik işlevler gibi yardımcı sınıf sağlar.
Yük Testi
Yazmakta olduğunuz uygulamaya ve hacim açısından beklentilerinize bağlı olarak, uygulamada belirli bir performans düzeyine ulaşmasını engelleyen olası darboğazları tespit etmek için yük ve performans testi yapmanız gerekebilir.
Bu bölüm, FunkLoad paketinin dışında olduğu için bir performans veya yük testinin nasıl yapılacağını detaylandırmayacaktır.
FunkLoad'un en temel örneği aşağıdaki gibidir -
from funkload.FunkLoadTestCase
import FunkLoadTestCase
class LoadHomePage(FunkLoadTestCase):
def test_homepage(self):
server_url = self.conf_get('main', 'url')
nb_time = self.conf_getInt('test_homepage', 'nb_time')
home_page = "%s/" % server_url
for i in range(nb_time):
self.logd('Try %i' % i)
self.get(home_page, description='Get gome page')
if __name__ in ('main', '__main__'):
import unittest
unittest.main()
İşte yukarıdaki kodun ayrıntılı bir açıklaması -
Test senaryosu, FunkLoadTestCase sınıfından miras almalıdır, böylece FunkLoad, test sırasında ne olduğunu izleme dahili işini yapabilir.
FunkLoad, sınıf adına göre bir dosya arayacağından, sınıf adı önemlidir.
Tasarlanan test senaryoları, yapılandırma dosyalarına doğrudan erişime sahiptir. Get () ve post () yöntemleri, yanıtı almak için sunucuya basitçe çağrılır.