序文
今日は、Python 単体テスト フレームワークについて話したいと思います。Python 単体テスト フレームワークがたくさんあることは誰もが知っています。私たちが通常使用するのは、比較的基本的なものであり、二次開発に使用できるため、unittest です。開発レベルの場合非常に高い、自動テストプラットフォームの統合開発も可能です。この記事では主に、unittest と pytest の違いについて説明しますが、pytest は、unittest に比べて、コードがシンプルで、便利で柔軟に使用でき、プラグインが豊富です。早速、本題に入りましょう。
1. ユースケースの作成ルール
1. Unittest は、テストをより明確、便利、および制御可能にするために、テスト ケース、テスト スイート、テスト フィクスチャ、およびテスト ランナー関連のクラスを提供します。Unittest を使用してユースケースを作成する場合は、次のルールに従う必要があります。
(1) テスト ファイルは、まず、unittest をインポートする必要があります。
(2) テスト クラスは、unittest.TestCase を継承する必要があります。
(3) テスト メソッドは、「test_」で始まる必要があります。
(4) テスト クラスには、unittest.main() メソッドが必要です。
2. Pytest は、Python 用のサードパーティのテスト フレームワークであり、unittest に基づいた拡張フレームワークであり、unittest よりもシンプルで効率的です。pytest を使用してユースケースを作成する場合は、次のルールに従う必要があります。
(1) テスト ファイル名は「test_」で始まるか、「_test」で終わる必要があります (例: test_ab.py)。
(2) テスト メソッドは「test_」で始まる必要があります。
(3) テストクラス名は「Test」で始まります。
概要: pytest は、単体テスト ケースのコードを変更せずに単体テスト スタイルのテスト ケースを実行でき、優れた互換性を備えています。エラー発生時にユースケースを再実行するために使用できる flask プラグインや、デバイスの並列実行に使用できる xdist プラグインなど、多くの pytest プラグインがあります。
2. 使用前および使用後のケース
1.unittest は setUp/tearDown を提供しますが、これはすべてのユースケースでのみ使用できます。
2.pytest は、モジュール レベル、関数レベル、クラス レベル、およびメソッド レベルのセットアップ/ティアダウンを提供します。これは、unittest の setUp/tearDown よりも柔軟です。
モジュール レベル (setup_module/teardown_module) はモジュールの最初と最後から始まります。グローバル
関数レベル (setup_function/teardown_function) は関数のユース ケース (クラス内ではない) に対してのみ有効です。
クラス レベル (setup_class/teardown_class) のみです。 (クラス内) クラスの前後に 1 回実行されます。
メソッド レベル (setup_method/teardown_method) は (クラス内) メソッドの最初と最後で開始され、
クラス内の (setup/teardown) は、メソッドの呼び出しの前後に実行されます。方法。
3.pytest は、関数の前に @pytest.fixture() デコレータを追加し、テスト ケースのフィクスチャ関数にインストールすることもできます。フィクスチャの使用範囲は、関数、モジュール、クラス、セッションです。
Firture には、セットアップと分解に比べて次の利点があります。
命名方法は柔軟であり、 setup と Teardown の命名に限定されません
。データ共有は conftest.py 構成で実現できます。一部の構成はインポートせずに自動的に検索でき、複数の py ファイルから呼び出すことができます。
scope="module" は、プレフィックスscope="session" を使用して複数の .py クロスファイル共有を実現できます
。複数の .py クロスファイルを実現するには、1 つのセッションを使用します。
ティアダウンの実行をウェイクアップするには、yield を使用します。
3. アサーション
1.unittest は、assertEqual、assertIn、assertTrue、およびassertFalseを提供します。
2.pytest は、assert 式を直接使用します。
4. 報告
1.unittest は HTMLTestRunnerNew ライブラリを使用します。
2.pytestにはpytest-HTMLとallureプラグインがあります。
5. 失敗後の再実行
1. Unittest にはこの機能はありません。
2. Pytest は、ユースケースの実行が失敗した場合の再実行 (pytest-rerunfailures プラグイン) をサポートしています。
6. パラメータ化
1. Unittest は ddt ライブラリに依存する必要があります。
2. Pytest は @pytest.mark.parametrize デコレーターを直接使用します。
7. ユースケース分類の実行
1. Unittest はデフォルトですべてのユースケースを実行しますが、テストスーツをロードすることで一部のユースケースを実行することもできます。
2. Pytest は @pytest.mark を通じてクラスとメソッドをマークできます。pytest.main にパラメータ (「-m」) を追加すると、マークされたクラスとメソッドのみを実行できます。
8. 見た目が良くない場合は、次の表を見てください。
一般に、単体テストのユースケース形式は複雑で、互換性がなく、プラグインがほとんどないため、二次開発に便利です。pytest はより便利で高速です。ユース ケースの形式はシンプルです。unittest ユース ケースのコードを変更することなく、unittest スタイルのテスト ケースを実行できます。互換性が優れています。エラーが発生したときにユースケースを再実行するために使用できる flask プラグインや、デバイスの並列実行に使用でき、より効率的である xdist プラグインなど、多くの pytest プラグインがあります。
最後に: 以下はサポート学習資料です。[ソフトウェア テスト] を行っている人にとって、これは最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅にも同行してくれました。また、お役に立てれば幸いです。
ソフトウェアテストインタビューアプレット
何百万人もの人々が使用しているソフトウェア テストの質問バンクです。!!誰が知っているのか!!!インターネット上で最も包括的な面接テスト ミニ プログラムです。携帯電話を使用して質問に答えたり、地下鉄やバスに乗ったり、試験に参加したりすることができます。
次のインタビューの質問セクションをカバーします。
1. ソフトウェアテストの基礎理論、2. Web、アプリ、インターフェース機能テスト、3. ネットワーク、4. データベース、5. Linux
6. Web、アプリ、インターフェイスの自動化、7. パフォーマンス テスト、8. プログラミングの基本、9. 人事面接の質問、10. 公開テストの質問、11. セキュリティ テスト、12. コンピューターの基本