CherryPy - 測試

測試是一個過程,在此過程中,應用程式從不同的角度進行,以便 -

  • 找到問題列表
  • 找出預期結果與實際結果,輸出,狀態等之間的差異。
  • 瞭解實施階段。
  • 找到對實際用途有用的應用程式。

測試的目的不是讓開發人員犯錯,而是提供工具並提高質量,以便在給定時間估計應用程式的執行狀況。

測試需要提前計劃。這需要定義測試目的,理解測試用例的範圍,制定業務需求列表以及瞭解專案不同階段所涉及的風險。

測試被定義為要在系統或應用程式上驗證的一系列方面。以下列出了常見的測試方法 -

  • 單元測試 - 這通常由開發人員自己執行。這旨在檢查程式碼單元是否按預期工作。

  • 可用性測試 - 開發人員通常會忘記他們正在為不瞭解系統的終端使用者編寫應用程式。可用性測試驗證了產品的優缺點。

  • 功能/驗收測試 - 可用性測試檢​​查應用程式或系統是否可用,功能測試確保實現每個指定的功能。

  • 負載和效能測試 - 執行此操作是為了瞭解系統是否可以根據要進行的負載和效能測試進行調整。這可能導致硬體更改,優化 SQL 查詢等。

  • 迴歸測試 - 它驗證產品的連續版本不會破壞任何先前的功能。

  • 可靠性和彈性測試 - 可靠性測試有助於通過一個或多個元件的細分來驗證系統應用程式。

單元測試

Photoblog 應用程式不斷使用單元測試來檢查以下內容 -

  • 新功能正常執行並符合預期。
  • 新程式碼版本不會破壞現有功能。
  • 缺陷是固定的並保持固定。

Python 帶有標準的 unittest 模組,提供不同的單元測試方法。

單元測試

unittest 植根於 JUnit,這是由 Kent Beck 和 Erich Gamma 開發的 Java 單元測試包。單元測試只返回定義的資料。可以定義模擬物件。這些物件允許針對我們設計的介面進行測試,而不必依賴於整個應用程式。它們還提供了一種在隔離模式下執行測試的方法,其中包括其他測試。

讓我們用以下方式定義一個虛擬類 -

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)

程式碼的解釋如下 -

  • 應匯入 unittest 模組,以便為給定的類提供單元測試功能。

  • 應該通過繼承 unittest 來建立一個類。

  • 上面程式碼中的每個方法都以單詞 test 開頭。所有這些方法都由 unittest 處理程式呼叫。

  • 測試用例呼叫 assert / fail 方法來管理異常。

將此視為執行測試用例的示例 -

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

執行測試用例的結果(輸出)如下 -

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

功能測試

一旦應用程式功能按照要求開始成形,一組功能測試可以驗證應用程式關於規範的正確性。但是,測試應該是自動化的,以獲得更好的效能,這需要使用 Selenium 等第三方產品。

CherryPy 提供了類似內建函式的輔助類,以簡化功能測試的編寫。

負載測試

根據你編寫的應用程式和你對卷的期望,你可能需要執行負載和效能測試,以便檢測應用程式中阻止其達到某個效能級別的潛在瓶頸。

本節不會詳細說明如何進行效能或負載測試,因為它不在 FunkLoad 包中。

FunkLoad 的基本示例如下 -

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

以下是上述程式碼的詳細說明 -

  • 測試用例必須從 FunkLoadTestCase 類繼承,以便 FunkLoad 可以執行內部工作來跟蹤測試期間發生的事情。

  • 類名很重要,因為 FunkLoad 將根據類名查詢檔案。

  • 設計的測試用例可以直接訪問配置檔案。只需針對伺服器呼叫 Get()post() 方法即可獲得響應。