Cherrypy-testing
CherryPy-テスト
テストは、アプリケーションをさまざまな観点から実施するためのプロセスです-
- 問題のリストを見つける
- 期待される結果と実際の結果、出力、状態などの違いを見つける
- 実装フェーズを理解します。
- 現実的な目的に役立つアプリケーションを見つけます。
テストの目的は、開発者に責任を負わせることではなく、ツールを提供し、特定の時間にアプリケーションの状態を推定するための品質を向上させることです。
テストは事前に計画する必要があります。 これには、テストの目的を定義し、テストケースの範囲を理解し、ビジネス要件のリストを作成し、プロジェクトのさまざまなフェーズに伴うリスクを認識する必要があります。
テストは、システムまたはアプリケーションで検証されるさまざまな側面として定義されます。 以下は*一般的なテストアプローチ*のリストです-
- ユニットテスト-これは通常、開発者自身によって実行されます。 これは、コードの単位が期待どおりに機能するかどうかを確認することを目的としています。
- ユーザビリティテスト-開発者は通常、システムの知識がないエンドユーザー向けのアプリケーションを作成していることを忘れる場合があります。 ユーザビリティテストは、製品の長所と短所を検証します。
- 機能/受け入れテスト-ユーザビリティテストでは、アプリケーションまたはシステムが使用可能かどうかを確認しますが、機能テストでは、指定されたすべての機能が実装されていることを確認します。
- 負荷およびパフォーマンステスト-これは、システムが実行される負荷およびパフォーマンステストに調整できるかどうかを理解するために実行されます。 これは、ハードウェアの変更、SQLクエリの最適化などにつながる可能性があります。
- 回帰テスト-製品の連続リリースが以前の機能を破壊しないことを検証します。
- 信頼性と回復力のテスト-信頼性のテストは、1つまたは複数のコンポーネントの内訳でシステムアプリケーションを検証するのに役立ちます。
単体テスト
フォトブログアプリケーションは、常に単体テストを使用して以下を確認します-
- 新しい機能は、期待どおりに正しく機能します。
- 既存の機能は、新しいコードリリースによって壊れることはありません。
- 欠陥は修正され、修正されたままです。
Pythonには、単体テストへの異なるアプローチを提供する標準の単体テストモジュールが付属しています。
単体テスト
unittestは、Kent BeckとErich Gammaによって開発されたJava単体テストパッケージであるJUnitに根ざしています。 単体テストは、定義されたデータを返すだけです。 モックオブジェクトを定義できます。 これらのオブジェクトを使用すると、アプリケーション全体に依存することなく、設計のインターフェイスに対してテストできます。 また、他のテストが含まれる分離モードでテストを実行する方法も提供します。
次の方法でダミークラスを定義しましょう-
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をサブクラス化して作成する必要があります。
- 上記のコードのすべてのメソッドは、単語のテストで始まります。 これらのメソッドはすべて、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()メソッドはサーバーに対して単に呼び出され、応答を取得します。