CherryPy - Pengujian

Pengujian adalah proses di mana aplikasi dilakukan dari perspektif yang berbeda untuk -

  • Temukan daftar masalah
  • Temukan perbedaan antara hasil, keluaran, status, dan lain-lain yang diharapkan dan aktual.
  • Pahami fase implementasi.
  • Temukan aplikasi yang berguna untuk tujuan realistis.

Tujuan pengujian bukanlah untuk menyalahkan pengembang, tetapi untuk menyediakan alat dan meningkatkan kualitas untuk memperkirakan kesehatan aplikasi pada waktu tertentu.

Pengujian perlu direncanakan sebelumnya. Ini panggilan untuk menentukan tujuan pengujian, memahami ruang lingkup kasus uji, membuat daftar persyaratan bisnis dan menyadari risiko yang terlibat dalam berbagai fase proyek.

Pengujian didefinisikan sebagai berbagai aspek yang akan divalidasi pada sistem atau aplikasi. Berikut ini adalah daftar daricommon test approaches -

  • Unit testing- Ini biasanya dilakukan oleh pengembang sendiri. Ini bertujuan untuk memeriksa apakah suatu unit kode berfungsi seperti yang diharapkan atau tidak.

  • Usability testing- Pengembang biasanya mungkin lupa bahwa mereka sedang menulis aplikasi untuk pengguna akhir yang tidak memiliki pengetahuan tentang sistem. Pengujian kegunaan memverifikasi pro dan kontra produk.

  • Functional/Acceptance testing - Sementara pengujian kegunaan memeriksa apakah suatu aplikasi atau sistem dapat digunakan, pengujian fungsional memastikan bahwa setiap fungsionalitas yang ditentukan diimplementasikan.

  • Load and performance testing- Hal ini dilakukan untuk mengetahui apakah sistem dapat menyesuaikan dengan beban dan uji kinerja yang akan dilakukan. Ini dapat menyebabkan perubahan pada perangkat keras, mengoptimalkan kueri SQL, dll.

  • Regression testing - Ini memverifikasi bahwa rilis produk yang berurutan tidak merusak fungsi sebelumnya.

  • Reliability and resilience testing - Pengujian reliabilitas membantu dalam memvalidasi aplikasi sistem dengan kerusakan satu atau beberapa komponen.

Pengujian Unit

Aplikasi Photoblog secara konstan menggunakan pengujian unit untuk memeriksa hal-hal berikut -

  • Fungsionalitas baru bekerja dengan benar dan seperti yang diharapkan.
  • Fungsi yang sudah ada tidak rusak oleh rilis kode baru.
  • Cacat diperbaiki dan tetap diperbaiki.

Python hadir dengan modul unittest standar yang menawarkan pendekatan berbeda untuk pengujian unit.

Unittest

unittest berakar pada JUnit, paket pengujian unit Java yang dikembangkan oleh Kent Beck dan Erich Gamma. Tes unit hanya mengembalikan data yang ditentukan. Objek tiruan dapat didefinisikan. Objek-objek ini memungkinkan pengujian terhadap antarmuka desain kami tanpa harus bergantung pada aplikasi secara keseluruhan. Mereka juga menyediakan cara untuk menjalankan pengujian dalam mode isolasi dengan pengujian lain yang disertakan.

Mari kita definisikan kelas dummy dengan cara berikut -

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)

Penjelasan kode tersebut adalah sebagai berikut -

  • modul unittest harus diimpor untuk memberikan kemampuan pengujian unit untuk kelas yang diberikan.

  • Sebuah kelas harus dibuat dengan subclassing unittest.

  • Setiap metode dalam kode di atas dimulai dengan tes kata. Semua metode ini dipanggil oleh penangan unittest.

  • Metode assert / fail dipanggil oleh kasus uji untuk mengelola pengecualian.

Pertimbangkan ini sebagai contoh untuk menjalankan kasus uji -

if __name__ == '__main__':
unittest.main()

Hasil (output) untuk menjalankan test case adalah sebagai berikut -

----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK

Pengujian Fungsional

Setelah fungsionalitas aplikasi mulai terbentuk sesuai kebutuhan, serangkaian pengujian fungsional dapat memvalidasi kebenaran aplikasi terkait spesifikasi. Namun, pengujian tersebut harus diotomatiskan untuk performa yang lebih baik yang akan membutuhkan penggunaan produk pihak ketiga seperti Selenium.

CherryPy menyediakan kelas pembantu seperti fungsi bawaan untuk memudahkan penulisan uji fungsional.

Pengujian Beban

Bergantung pada aplikasi yang Anda tulis dan harapan Anda dalam hal volume, Anda mungkin perlu menjalankan pengujian beban dan kinerja untuk mendeteksi potensi kemacetan dalam aplikasi yang mencegahnya mencapai tingkat kinerja tertentu.

Bagian ini tidak akan merinci bagaimana melakukan tes kinerja atau beban karena itu di luar paket FunkLoad-nya.

Contoh dasar FunkLoad adalah sebagai berikut -

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()

Berikut penjelasan detail dari kode diatas -

  • Kasus pengujian harus mewarisi dari kelas FunkLoadTestCase sehingga FunkLoad dapat melakukan tugas internalnya untuk melacak apa yang terjadi selama pengujian.

  • Nama kelas penting karena FunkLoad akan mencari file berdasarkan nama kelas.

  • Kasus uji yang dirancang memiliki akses langsung ke file konfigurasi. Metode get () dan post () dipanggil ke server untuk mendapatkan respons.