まずPythonのユニットテストフレームワークを使用紹介
- 単体テスト
- pytest
- 鼻
次のハイライトpytest
1.概要
pytestは非常にフル機能のPythonのテストフレームワークを成熟され、主な機能は以下のとおりであります:
- 1、シンプルで、使いやすく、柔軟性の豊富なドキュメント。
- 図2は、パラメトリック、きめ細かく制御試験を試験することができるサポート。
- 図3に示すように、それは単純なユニットテストおよびテストの複雑な機能をサポートすることが可能であり、それはまた、セレン/ appniumテスト自動化、自動テストインターフェース(pytest +要求)のために使用することができます。
- 4、(完璧なテストレポート生成HTML)、pytest-htmlの多くのサードパーティ製プラグインとpytest、および、そのようなより良い品質のpytest - セレン(統合セレン)などのカスタム拡張、することができ、pytest-rerunfailures(ケースが繰り返し実行失敗)、pytest -xdist(マルチCPU分布)など。
- 図5に示すように、テストケースと処理をスキップXFAIL。
- 6、及びCIツールは結合、例えばジェンキンス良いこと
2.はじめに
2.1。インストール
ピップpytestをインストール
2.2。サンプルコード
書き込みルール
書き込みpytest試験試料は非常に簡単で、以下の規則に従ってください。
- テストファイルはTEST_(終了_test缶)を開始します
- テストクラスのテストを開始する、といないのinitメソッド
- TEST_そもそもテスト機能
- 基本を主張するアサーション
pytest1.py
#- * -コーディング:UTF-8 - * - 輸入pytest pytest.fixture @(範囲 = ' 機能を' ) DEF setup_function(リクエスト): デフteardown_function(): プリント(" teardown_functionと呼ばれる。" ) request.addfinalizer(teardown_function) #此内嵌函数做解体工作 印刷(' setup_functionと呼ばれる。' ) pytest.fixture(スコープ@ = ' モジュール' ) デフsetup_module(リクエスト): デフteardown_module(): 印刷(" と呼ばteardown_module。" ) request.addfinalizer(teardown_module)が 印刷(' setup_moduleと呼ばれる。' ) @ pytest.mark.website デフTEST_1(setup_function): 印刷(' TEST_1と呼ばれる。' ) デフTEST_2(setup_module ): プリント(' TEST_2と呼ばれます。')
スコープパラメータの固定具
デフォルトの機能として四スコープパラメータ、すなわち「関数」、「モジュール」、「クラス」、「セッション」、。
- 機能:各テスト実行は、デフォルトでは、スコープの関数であり、
- クラス:各クラスのために一度だけ実行するすべてのテスト
- モジュール:一度だけ実行し、各テストのためのすべてのモジュール
- セッション:各セッションは一度だけ実行されます
セットアップとティアダウンの操作
- などデータベース・リンク、テストデータ、開いているファイル、など、準備作業を関数やクラスの実行をテストする前に、セットアップ、
- TEARDOWNは、試験関数またはクラスを実行した後、最後の仕上げは、例えば、データベース・リンクは、メモリリソースがリサイクル、切断され
- 注:また、固定具に機能により、セットアップとティアダウン機能によって達成もたらすことができます
2.3。試験結果
どのように実行する方法
- pytest#は、現在のディレクトリ以下のすべてのテストを実行します
- モジュールファイルtest_mod.pyでpytest test_mod.py#ランテスト
- pytest somepath位./tests/ようsomepath以下のすべてのテストを実行します
- pytest -k stringexpr#名前が一致するだけで実行するテストの
「文字列式」#を、例えば「MyClassのない方法」
TestMyClass.test_somethingを選択します#
#はなくをTestMyClass.test_method_simple - 「ノードID」、一致pytest test_mod.py::test_func#のみに実行するテスト
#たとえば「test_mod.py::test_func」が選択されます
test_mod.pyで#のみ実行TEST_FUNCを
試験方法の区分の実行pytest.mark
テストは、テストを実行する前にpytest.mark.website @修飾増加として、実行する必要がそれを通してPytest.mark制御機能@
- -m「ウェブサイト」の試験方法は、ウェブサイトラベル付けを行ったことにより、
$ pytest -v -m " ウェブサイト" pytest1.py ====================================== ========================================テストセッションが開始さ======= ================================================== ====================== プラットフォームlinux2 - Pythonの2.7.14、pytest-3.0.0、PY-1.5.2、pluggy-0.3.1 - /ホーム/ケビン/ソフト/ anaconda2 / binに/ pythonの .cache:CACHEDIR 使用 --randomlyシード= 1522925202 ROOTDIRを: /ホーム/ケビン/学ぶ/のpython-ウェブ/ TOX / ケース2、INIFILE: プラグイン:ランダム -1.0.0 、モック1.2、COV-2.0 0.0 収集する 3つの項目が 合格pytest1.py::test_1 ================================================== =========================== pytest警戒概要=================== ================================================== ======== WC1なしpytest_funcarg__cov:使用して宣言する器具「pytest_funcarg__ 」接頭辞がされ、非推奨と削除される予定で 4.0 pytest。プレフィックスを削除してくださいし、代わりに@をpytest.fixtureデコレータを使用しています。 ================================================== ============================= 2つのテストは選択解除================== ================================================== =========== ================================================== ========= 1、2を選択解除、1 pytest-警告を渡さで 0.00秒============================ ================================
-mでマークされませんウェブサイト「ではないウェブサイト」のテストメソッドを実行します
$ pytest -v -m " ではないウェブサイト" pytest1.py ===================================== =========================================テストセッションが開始さ====== ================================================== ======================= プラットフォームlinux2 - Pythonの2.7.14、pytest-3.0.0、PY-1.5.2、pluggy-0.3.1 - - /ホーム/ケビン/ソフト/ anaconda2 / binに/ pythonの .cache:CACHEDIR 使用 --randomlyシード= 1522925192 ROOTDIRを: / homeは/ケビン/学ぶ/のpython-ウェブ/ TOX / ケース2、INIFILE: プラグイン:ランダム -1.0。 0、モック1.2、COV-2.0 0.0 収集する 3 項目が 合格pytest1.py::test_3 pytest1.py::test_2が経過します ================================================== =========================== pytest警戒概要=================== ================================================== ======== WC1なしpytest_funcarg__cov:使用して宣言する器具「pytest_funcarg__ 」接頭辞がされ、非推奨と削除される予定で 4.0 pytest。プレフィックスを削除してくださいし、代わりに@をpytest.fixtureデコレータを使用しています。 ================================================== ============================= 1つのテストは、選択解除================== ================================================== =========== ================================================== ========= 2、1を選択解除、1 pytest-警告を渡さで 0.00秒============================ ================================
コンソールパラメータが導入します
- 各テスト関数の実行結果を表示するための-v
- -qのみを表示し、全体的なテスト結果
- テストプリント()関数の出力を表示する-s機能
- -x、即座に最初のエラーや失敗したテストの--exitfirst、終了
- -hヘルプ
ケース1
$ pytest - Vのpytest1.py =========================================== ===================================テストセッションが開始さ============ ================================================== ================= プラットフォームlinux2 - Pythonの2.7.14、pytest-3.0.0、PY-1.5.2、pluggy-0.3.1 - /ホーム/ケビン/ソフト/ anaconda2 / binに/ pythonの CACHEDIR:.cache 使用 --randomlyシード= 1522920341 :ROOTDIR /ホーム/ケビン/学ぶ/のpython-ウェブ/ TOX / ケース2、INIFILE: プラグイン:ランダム -1.0.0、モック1.2を、 COV-2.0 0.0 収集する 3つの項目が 合格pytest1.py::test_1 pytest1.py::test_3合格 pytest1.py::test_2が経過 ================================================== =========================== pytest警戒概要=================== ================================================== ======== WC1なしpytest_funcarg__cov:使用して宣言する器具「pytest_funcarg__ 」接頭辞がされ、非推奨と削除される予定で 4.0 pytest。プレフィックスを削除してくださいし、代わりに@をpytest.fixtureデコレータを使用しています。 ================================================== ================ 3、1 pytest-警告を渡さで 0.01秒======================== ===========================================
ケース2
$ pytest - S pytest1.py =========================================== ===================================テストセッションが開始さ============ ================================================== ================= プラットフォームlinux2 -パイソン2.7.14、pytest-3.0.0、PY-1.5.2、pluggy-0.3.1 使用 --randomly-種子= 1522920508 ROOTDIR: /ホーム/ケビン/学ぶ/のpython-ウェブ/ TOX / ケース2、INIFILE: プラグイン:ランダム -1.0.0、モック1.2、COV-2.0 0.0は、 収集した 3つの項目を pytest1.py setup_functionと呼ばれます。 TEST_1と呼ばれます。 .teardown_functionと呼ばれます。 setup_moduleと呼ばれます。 TEST_2と呼ばれます。 .Test_3と呼ばれます。 .teardown_moduleと呼ばれます。 ================================================== =========================== pytest警戒概要=================== ================================================== ======== WC1なしpytest_funcarg__cov:使用して宣言する器具「pytest_funcarg__ 」接頭辞がされ、非推奨と削除される予定で 4.0 pytest。プレフィックスを削除してくださいし、代わりに@をpytest.fixtureデコレータを使用しています。 ================================================== ================ 3、1 pytest-警告を渡さで 0.01秒======================== ===========================================
3.拡張機能
3.1。テストレポート
インストールとサンプル
ピップpytest-COV#計算pytestカバレッジをインストールし、様々なフォーマットをサポートするテスト出力レポート
pytest --cov-レポート= htmlの--cov = 。/ test_code_target_dirを
コンソールパラメータが導入します
- --cov = [パス]、ファイルシステムパスの尺度カバレッジは、(マルチ可)、テストカバレッジを計算するため、テストオブジェクトを指定します
- --cov・レポート=タイプ、生成するレポートのタイプ:用語、用語欠損、注釈、HTML、XML型(マルチ可)、テストレポート
- --cov-config設定=パス、カバレッジのための設定ファイル、デフォルト:.coveragerc、カバレッジ配置文件
- --no-COVオンに失敗、テストの実行が失敗した場合にカバレッジを報告しない、デフォルト:Falseが、テストが失敗した場合、テストレポートを生成しません。
- --cov-フェイルの下MIN、失敗=合計カバレッジが少ないMIN以上である場合。テストカバレッジがMIN未満の場合は、失敗を考えます
コンソールの結果
-------------------------------------------------- --------------カバレッジ:プラットフォームlinux2、パイソン2.7.14-最終-0 ----------------------- ----------------------------------------- 名前STMTSミスカバー ----- --------------------------- pytest1.py 18 0 100%
HTML形式の結果
3.2。ランダム・テスト・シーケンス
ピップpytest、ランダムにインストール
3.3。分散テスト
ピップpytest-xdistをインストール
3.4。エラーリターン直後に
ピップpytest-instafailをインストール
4.リファレンス
-
PythonのテストツールDaquanの
https://wiki.python.org/moin/PythonTestingToolsTaxonomy -
Pythonの主流のテストツール水平比較
http://docs.python-guide.org/en/latest/writing/tests/
http://pythontesting.net/test-podcast/ -
はじめにPythonのユニットテストフレームワークpytest
https://blog.csdn.net/liuchunming033/article/details/46501653