CherryPy - 測試



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

  • 查詢問題列表
  • 查詢預期結果和實際結果、輸出、狀態等之間的差異。
  • 瞭解實施階段。
  • 查詢應用程式對現實目的有用。

測試的目標不是指責開發人員,而是提供工具並提高質量,以評估應用程式在給定時間的健康狀況。

測試需要提前計劃。這需要定義測試的目的、瞭解測試用例的範圍、列出業務需求並瞭解專案不同階段中涉及的風險。

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

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

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

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

  • 負載和效能測試 - 執行此操作是為了瞭解系統是否可以適應負載和效能測試。這可能導致硬體更改、最佳化SQL查詢等。

  • 迴歸測試 - 它驗證產品的後續版本不會破壞任何以前的函式。

  • 可靠性和彈性測試 - 可靠性測試有助於驗證系統應用程式在其中一個或多個元件出現故障時的行為。

單元測試

照片部落格應用程式不斷使用單元測試來檢查以下內容:

  • 新功能正常工作並按預期工作。
  • 新程式碼釋出不會破壞現有功能。
  • 缺陷已修復並保持修復。

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

單元測試

unittest 源於 JUnit,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 處理程式呼叫。

  • 斷言/失敗方法由測試用例呼叫以管理異常。

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

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() 方法只是針對伺服器呼叫以獲取響應。

廣告

© . All rights reserved.