Python単体テストフレームワークのunittestとpytestの違い

序文

今日は、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. コンピューターの基本

  完全な情報を入手する方法: 下の小さなカードをクリックしてご自身で入手してください

おすすめ

転載: blog.csdn.net/weixin_57794111/article/details/132900758