ユニットテストユニットテストフレームワークの概要
ユニットテストフレームワークの場合は主に次の3つのことを完了するには、懸念しています:
- 組織形態及び実行を提供する:テストストリップは、数十万人に達すると、テストケースの大多数は、使用例この仕様と組織が考慮する必要がでて、それは、拡張性と保守性の問題を持って、一緒に積ま
- リッチ比較方法(アサート)を提供する:実行は、それによって介してユースケースを実行するかどうかを決定する、実施形態で完了した後に実際の結果は、(アサート)と比較されることが期待結果を必要とします。ユニットテストフレームワークは、一般的に、/除外含まれ、例えば、それは不平等/等しい決定され、真/偽のアサーションメソッドをアサーションの富を提供します
- これは、ログの富を提供しています。テストケースが実行結果の富を提供することができ、すべてのユースケースの実装が完了した後に、失敗の理由を明確にスローされる可能性が失敗した場合。例えば、総実行時間、故障のユースケースの数、成功したユースケースなど
自動テストのWEB用のユニットテストフレームワークをunittestの使用方法?
まず、種々の特性は、ユニットテストモジュールを記載しました
1.unittest次のプロパティ:
[ 'BaseTestSuite'、 'あるFunctionTestCase'、 'SkipTest'、'テストケース'、 'TestLoader'、 'TestProgram'、 'TestResult' 、'テストスイート'、 ' TextTestResult'、'TextTestRunner' 、'_TextTestResult'、 '__all__'、 ' __builtins__」、 '__doc__'、 '__FILE__'、 '__name__'、 '__PACKAGE__'、 '__path__'、 '__unittest'、 'ケース'、 ' defaultTestLoader'、 'expectedFailure'、 'findTestCases'、 'getTestCaseNames'、 'installHandler' 'ローダー'、'メイン'、 'makeSuite'、 'registerResult'、 'removeHandler'、 'removeResult」、 '結果'、 'ランナー'、 '信号'、 'スキップ'、'SKIPIF'、 'skipUnless'、 'スイート'、 'utilの']
説明:
たunittest.TestCase:TestCaseクラス、テストケースクラスの継承の基本クラスのすべて。
クラスBaiduTest(たunittest.TestCase):
unittest.main() :モジュールユニットテストテストスクリプトを直接実行することが可能に彼女は簡単に変更することができます使用、main()メソッドは、「テスト」にオーダー名の先頭にモジュールに含まれるすべてのTestLoaderの試験方法を検索するためにクラスを使用していますそれらを自動的に実行します。方法の実行のデフォルトの順序は、0-9、AZ、AZ:試験荷重ASCIIコード順、数字と文字の順序に従って。したがって、試験方法Aの開始に優先的に実行される開始した後に、実行されます。
unittest.TestSuiteインスタンス():unittestのフレームワークのTestSuite()クラスは、テストスイートを作成するために使用されます。
unittest.TextTextRunner():unittestのフレームTextTextRunner()、テストスイートを実行する()メソッドは、次のクラスRUNを通じてテストスイートスイートのためのパラメータを組み立てられます。
unittest.defaultTestLoader() :クラス別defaultTestLoader()クラスは、以下の発見()メソッドが自動的にカタログ化することができますstart_dirより多くのテストは、テストケースファイル(テスト*用の.py)を見つけるために一致し、スイートをテストするためのテストアセンブリを見つけます直接run()メソッドを発見行うことができます。次のように使用方法は以下のとおりです。
発見= unittest.defaultTestLoader.discover(TEST_DIR、パターン= 'テスト_ *。PY')
unittest.skip() :いくつかのケースで、ケースを操作するデコレータは、などは、一時的に装飾的なストリップテストをシールド使用することができたくない場合があります。この一般的な用途は、例えば、あるテストケースをデバッグする、デコレータで遮蔽することができる他のユースケースを遮蔽したいです。
@ Unittest.skip(理由):スキップ(理由)デコレータ:装飾無条件スキップテスト、およびテストがスキップさの理由。
@ Unittest.skipIf(理由):SKIPIF(条件、理由)デコレータ:条件が真であるが、テストは装飾、およびテストをスキップの理由をスキップされます。
@ Unittest.skipUnless(理由):skipUnless(条件、理由)デコレータ:条件が偽で、テストの装飾、およびテストを省略した理由をスキップします。
@ Unittest.expectedFailure():失敗したとしてexpectedFailure()テストがマークされています。
次のように2.TestCaseクラス属性は以下のとおりです。
[ '__call__'、 '__class__'、 '__delattr__'、 '__dict__'、 '__doc__'、 '__eq__'、 '__format__'、 '__getattribute__'、 '__hash__'、 '__init__'、 '__module__'、 '__ne__'、 ' __new__」、 '__reduce__'、 '__reduce_ex__'、 '__repr__'、 '__setattr__'、 '__sizeof__'、 '__str__'、 '__subclasshook__'、 '__weakref__'、 '_addSkip'、 '_baseAssertEqual'、 '_classSetupFailed'、 '_deprecate' 、 '_diffThreshold'、 '_formatMessage'、 '_getAssertEqualityFunc'、 '_truncateMessage'、 'addCleanup'、 'addTypeEqualityFunc'、 'assertAlmostEqual'、 'assertAlmostEquals'、 'assertDictContainsSubset'、 'assertDictEqual'、'assertEqual'、 'のassertEquals'、'assertFalse'、 'assertGreater'、 'assertGreaterEqual'、 'assertIn'、 'assertIs'、 ' assertIsInstance '、 ' assertIsNone '、 ' assertIsNot」、'assertIsNotNone'、 'assertItemsEqual'、 'assertLess'、 'assertLessEqual'、 'assertListEqual'、 'assertMultiLineEqual'、 'assertNotAlmostEqual'、 'assertNotAlmostEquals'、'assertNotEqual'、 'assertNotEquals'、'assertNotIn'、 'assertNotIsInstance'、 'assertNotRegexpMatches'、 'assertRaises'、 'assertRaisesRegexp'、 'assertRegexpMatches'、 'assertSequenceEqual'、 'assertSetEqual'、'いるassertTrue'、 'assertTupleEqual'、 'ASSERT_'、 'countTestCases'、 'デバッグ'、 'defaultTestResult'、「doCleanups 」、 ''、 '失敗failIf'、 'failIfAlmostEqual''failIfEqual'、 'failUnless'、 'failUnlessAlmostEqual'、 'failUnlessEqual'、 'failUnlessRaises'、 'たfailureException'、 'ID'、 'longmessageは'、 'maxDiff'、 '実行'、 ' のsetUp'、 'setUpClass'、 'shortDescription'、 'skipTest'、'TEARDOWN'、 'tearDownClass']
説明:
セットアップ() :試験前に行う初期のセットアップ()メソッド。テストケースは、データベースにアクセスする必要があるように、データベース接続は、セットアップ中に確立し、初期化することができます。テストケースは、ウェブをログに記録する必要があるとして、それは、ブラウザの最初のインスタンスかもしれません。
TEARDOWN() :ティアダウン()メソッドは、テストケースの実行直後後に使用されます。近くに接続。ブラウザを閉じます。
*をアサート():アサーションの数:一実施形態は、最終用途によって実行された場合にテストケースの実行中に、平等は、実際、得られた期待されるテスト結果を決定することによって決定されます。
assertEqual(A、B、[MSG = 'テスト障害情報を印刷']):aとbが等しいアサート、テストケースによって等しいです。
assertNotEqual(A、B、[MSG =「テスト障害情報を印刷」])及びbは、テストを通して、等しい、等しくないアサート。
いるassertTrue(X、[MSG =「テストが印刷された情報に失敗」]):真のXがアサートされている場合、テストが通って真です。
assertFalse(xは、[MSG = 'テストが印刷された情報に失敗']):試験に合格した場合はFalse、xがFalseでアサート。
assertIs(A、B、[MSG = 'テストが印刷された情報に失敗']):試験に合格し、その後、Bかどうかをアサート。
assertNotIs(A、B、[MSG = 'テストが印刷失敗情報が']):Bは、その後、試験に合格していないかどうかをアサート。
assertIsNone([MSG =「テスト情報を印刷失敗」] X):Xはなしアサートされていないが、試験のどれも渡されません。
assertIsNotNone([MSG =「テスト情報を印刷失敗」] X):Xはなしアサートされていないが、試験のいずれも渡されません。
assertIn(A、B、[MSG = 'テストが印刷された情報に失敗']):Bが合格試験において、アサートされ、Bです。
assertNotIn(A、B、[MSG = 'テストが印刷された情報に失敗']):Bは、Bアサートにある、テストが合格していません。
assertIsInstance(、bは、[MSG =「テスト障害情報を印刷」]):アサートBは一例であり、テストを通過します。
assertNotIsInstance(、bは、[MSG =「テスト障害情報を印刷」]):アサートbは一例であり、ない試験によるものです。
次のように3.TestSuiteクラスの属性は、:(例ときの組織)が必要
[ '__call__'、 '__class__'、 '__delattr__'、 '__dict__'、 '__doc__'、 '__eq__'、 '__format__'、 '__getattribute__'、 '__hash__'、 '__init__'、 '__iter__'、 '__module__'、 ' __ne__」、 '__new__'、 '__reduce__'、 '__reduce_ex__'、 '__repr__'、 '__setattr__'、 '__sizeof__'、 '__str__'、 '__subclasshook__'、 '__weakref__'、 '_addClassOrModuleLevelException'、 '_get_previous_module'、 '_handleClassSetUp' '_handleModuleFixture'、 '_handleModuleTearDown'、 '_tearDownPreviousClass'、 '_tests'、 ' addTest'、 'addTests'、 'countTestCases'、 'デバッグ'、 '実行']
説明:
addTestは():addTest()メソッドは、テストするテストスイートを追加するには、次の側で、テストスイートのカテゴリtest_baiduモジュール下BaiduTest test_baidu試験下で添加されます。
スイート= unittest.TestSuiteインスタンス() suite.addTest(test_baidu.BaiduTest( 'test_baidu'))
4.TextRunnerは特性が必要な以下の組織:(例)
[ '__class__'、 '__delattr__'、 '__dict__'、 '__doc__'、 '__format__'、 '__getattribute__'、 '__hash__'、 '__init__'、 '__module__'、 '__new__'、 '__reduce__'、 '__reduce_ex__'、 ' __repr__」、 '__setattr__'、 '__sizeof__'、 '__str__'、 '__subclasshook__'、 '__weakref__'、 '_makeResult'、 ''、 '説明'、 'フェイルファースト'、 'resultClassを'、バッファ'実行 '、 'ストリーム'を「冗長」]
説明:
RUN():run()メソッドのテストスイートは、基準テストスイートで、テストスイートを実行しています。
ランナー= unittest.TextTestRunner() runner.run(スイート)
第二に、テストケースを書くことunittestのフレームワークを使用してのアイデア
次のように基本的なデザインのアイデアは、次のとおりです。
#コーディング= UTF-8 一般に、第1行に、上記のように#1。第1のセットのエンコーディングは、UTF-8は、英語でサポートすることができます 。#2注:レコードの作成日時、作成、プロジェクト名が含まれています。 「「」 2016年7月27日に作成されました @author:ジェニファー プロジェクト:フレームワークをunittestの使用して書かれたテストのアイデア 「「」 #3.インポートユニットテストモジュール インポートユニットテスト #4。は、親クラスがたunittest.TestCaseで、テストクラスを定義します。 方法#継承たunittest.TestCaseそのようなセットアップおよびティアダウンメソッドが、この方法は、継承されたメソッドを覆う、サブクラスによってオーバーライドすることができます。 たunittest.TestCaseの#継承さまざまなアサーションメソッド。 クラスTest(たunittest.TestCase): 試験前に行う初期化のための#5の定義セットアップ()メソッド。 #(注)自己のための参照変数でなく、また、方法定義「自己。変数」すべてのクラスメソッド #あなたはint型の文字に値を入力する必要があります デフセットアップ(自己): self.number = raw_input( '番号を入力してください。') self.number = INT(self.number) #6。「TEST_」という名前のメソッドから始まる、テストケースを定義します。 #なお、自己参照方法 #たunittest.TestCaseクラス試験結果の種々のアサーションを決定するための以下の方法を用いて #複数のテストケースを定義します。 #最も重要なことは、その部分であります デフtest_case1(自己): 印刷self.number self.assertEqual(self.number、10、MSG = 'あなたの入力は10ではありません') デフtest_case2(自己): 印刷self.number self.assertEqual(self.number、20、MSG = 'あなたの入力は20ではありません') @ Unittest.skip( '例3のテストをスキップ') デフtest_case3(自己): 印刷self.number self.assertEqual(self.number、30、MSG = 'あなたの入力は30ではありません') テストケースの実行後のフォローアップ作業のための#7。定義ティアダウン()メソッド。 #なお、自己参照方法 デフティアダウン(自己): プリントは「オーバーテスト」 #8あなたは、直接ファイル(__name__値__main__)を実行すると、正常に機能するためにテストスクリプトで使用する場合は、次の文を実行します __name __ == '__ MAIN__' の場合: #8.1、次のようにテストケースを実行するためのプログラム。 #Unittest.main()メソッドは、テストで始まるすべてのメソッドをテストするために、モジュールを検索し、自動的に実行されるであろう。 #実行順序は順番です:最初の実行test_case1、その後、test_case2を実行します unittest.main() 「「」 #8.2オプションII、以下のようにテストケースを実行します。 テストセットを構築する#8.2.1 #8.2.1.1インスタンス化テストスイート スイート= unittest.TestSuiteインスタンス() #は、テストスイートに試験荷重を8.2.1.2。 test_case1を実行し、最初の実行test_case2:#実行順序は、ロード順序をインストールすることです suite.addTest(テスト( 'test_case2')) suite.addTest(テスト( 'test_case1')) テスト例#8.2.2実装 #8.2.2.1インスタンス化クラスTextTestRunner ランナー= unittest.TextTestRunner() テストスイートを実行するためのrun()メソッドを使用して、#8.2.2.2(すなわち、すべてのユースケースは、テストスイートを実行します) runner.run(スイート
)''」 「「」 次のようにテストプログラム3#8.3を実行します。 #テストセットの8.3.1構成(簡略化スキームIIは、最初のテストスイートを作成し、順次テストケースロード) プログラムと#実行順序:最初の実行test_case1、その後、test_case2を実行します。実行順序はこの順番であります TEST_DIR = "./" 発見= unittest.defaultTestLoader.discover(TEST_DIR、パターン= 'テスト_ *。PY') テスト例#8.3.2実装 #8.3.2.1インスタンス化クラスTextTestRunner ランナー= unittest.TextTestRunner() テストスイートを実行するためのrun()メソッドを使用して、#8.3.2.2(すなわち、すべてのユースケースは、テストスイートを実行します) runner.run(発見) 「「」
試験結果は以下のとおりであるプログラムの実行を使用:
番号を入力します:10
10
テストを超える
数値を入力します:0.10
Fsを
6.092sで3つのテストを実行しました
FAILED(失敗= 1、= 1スキップ)
10
上のテスト
リターンによって実行される最初入力10、第二の入力10は、通過しないように、第1の実行test_case1は、その後,, test_case2を実行するので、ケースが失敗した使用により、最終的にユースケースをF.を返し、ユースケースがありますスキップ(デコレータ)。
次のように2つのテスト結果を使用してプログラムの実行は、次のとおりです。
10:入り数
10
以上のテスト
:数入力F 10を
。
4.973sで2つのテストを実施しました
FAILED(失敗= 1)
10
テストを超えます
test_case2、最初に実行し、その後test_case1を行い、第1の入力10は、戻り、通過しないので、F. 、リターンによって実行される第2の入力10を、最終的にユースケースを介して、ユースケースは失敗します。
次のように3つの試験結果を使用して、プログラムの実行は、(プログラムをテストケースのシーケンスを実行します)。
番号を入力します:10
10
テストを超える
数値を入力します:0.10
Fsを
6.092sで3つのテストを実行しました
FAILED(失敗= 1、= 1スキップ)
10
上のテスト
リターンによって実行される最初入力10、第二の入力10は、通過しないように、第1の実行test_case1は、その後,, test_case2を実行するので、ケースが失敗した使用により、最終的にユースケースをF.を返し、ユースケースがありますスキップ(デコレータ)。
第三に、フレームワークunittestの使用は、テストケースの例を書き込みます
ディレクトリ構造:
Baiduの検索のテストケースのテストケース:
#コーディング= UTF-8 「「」 2016年7月22日に作成されました @author:ジェニファー プロジェクト:ログインBaiduのテスト 「「」 セレンインポートwebdriverをから インポートユニットテスト、時間 クラスBaiduTest(たunittest.TestCase): デフセットアップ(自己): self.driver = webdriver.Firefox() self.driver.implicitly_wait(30)#劣性待機時間は30秒です self.base_url = "https://www.baidu.com" デフtest_baidu(自己): ドライバ= self.driver driver.get(self.base_url + "/") driver.find_element_by_id( "KW")。(クリア) driver.find_element_by_id( "KW")。send_keys( "ユニットテスト") driver.find_element_by_id( "SU")。クリックしてください() time.sleep(3) タイトル= driver.title self.assertEqual(タイトル、U "unittest_ Baiduの検索") デフティアダウン(自己): self.driver.quit() __name__ == "__main__" の場合: unittest.main()
Youdao翻訳テストケースのテストケース:
#コーディング= UTF-8 「「」 2016年7月22日に作成されました @author:ジェニファー プロジェクト:適切な方法翻訳テスト 「「」 セレンインポートwebdriverをから インポートユニットテスト、時間 クラスYoudaoTest(たunittest.TestCase): デフセットアップ(自己): self.driver = webdriver.Firefox() self.driver.implicitly_wait(30)#劣性待機時間は30秒です self.base_url = "http://www.youdao.com" デフtest_youdao(自己): ドライバ= self.driver driver.get(self.base_url + "/") driver.find_element_by_id( "translateContent")。クリア() driver.find_element_by_id( "translateContent")。send_keys(U "你好") driver.find_element_by_id( "translateContent")。提出() time.sleep(3) page_source = driver.page_source self.assertIn( "こんにちは"、page_source) デフティアダウン(自己): self.driver.quit() __name__ == "__main__" の場合: unittest.main()
Webテスト:テストスイートのテストスイートの複数を組み合わせてテストケース。
#コーディング= UTF-8 「「」 2016年7月26日に作成されました @author:ジェニファー プロジェクト:ウェブ筆記テストケース 「「」 インポートユニットテスト test_case輸入test_baiduから test_case輸入test_youdaoから #構造テストセット スイート= unittest.TestSuiteインスタンス() suite.addTest(test_baidu.BaiduTest( 'test_baidu')) suite.addTest(test_youdao.YoudaoTest( 'test_youdao')) __name __ == '__ MAIN__' の場合: #は、テストを実行します ランナー= unittest.TextTestRunner() runner.run(スイート)
テスト結果:
説明:代表的な実施形態が実施された2つのユースケースによって表される2つの点を用いて行われます。例Fは通過しない表現しました。