paint-brush
コード品質の向上とフィードバックの高速化のために Pytest のパフォーマンスを加速する@launchable
79,541 測定値
79,541 測定値

コード品質の向上とフィードバックの高速化のために Pytest のパフォーマンスを加速する

Launchable7m2023/04/26
Read on Terminal Reader

長すぎる; 読むには

Pytest の優雅さとシンプルさにより、開発者はテスト、アサーション、フィクスチャ、およびプラグインをシームレスに記述できます。ただし、他のツールと同様に、制限があります。 Launchable を pytest テスト ワークフローに統合すると、時間とリソースを大幅に節約できるため、開発サイクルを加速し、高品質のコードをより効率的に提供できます。 コードの品質を犠牲にすることなくリリースを高速化するために、Pytest と Launchable を簡単に統合するためのコード例と実践的な手順を調べます。
featured image - コード品質の向上とフィードバックの高速化のために Pytest のパフォーマンスを加速する
Launchable HackerNoon profile picture

Launchable の予測テスト選択を Pytest と統合する

進化し続けるソフトウェア開発の世界では、スケーラブルで効果的なテスト プロセスの必要性がかつてないほど重要になっています。アプリケーションの複雑さが増すにつれて、高速で信頼性の高いテスト ワークフローを維持することがますます困難になります。 pytest を入力してください。これは、開発者がテストを簡単に作成および整理できるようにする、Python 用の人気のあるテスト フレームワークです。


しかし、pytest をさらに改善できるとしたらどうでしょうか?


Launchable は機械学習を活用して潜在的な欠陥を検出する可能性が最も高いテストを予測し、無関係なテストの実行に費やす時間を大幅に削減します。 pytest のシンプルさと柔軟性を Launchable の強力な予測機能と組み合わせることで、新しいレベルのテスト効率と精度を実現できます。


Launchable の Predictive Test Selection で pytest を使用する利点を掘り下げ、セットアップ プロセスを順を追って説明し、これらのツールがどのように連携して動作し、テスト ワークフローに革命をもたらすかを確認してください。 Python アプリケーションのテスト方法を変革する準備をしましょう!

Pytest の基本を理解する (実践的なコード例付き): Pytest でのテスト、アサーション、フィクスチャ、およびプラグインの記述

Pytest の優雅さとシンプルさにより、開発者はテスト、アサーション、フィクスチャ、およびプラグインをシームレスに記述できます。その直感的な構文と強力な機能により、理解しやすく保守しやすい、 あらゆる種類のソフトウェア テスト用のテストを作成できます。これらの概念をさらに詳しく調べて、テスト ワークフローでどのように利用できるかを見てみましょう。

Pytest テストとアサーション

Pytest を使用すると、標準の Python assert ステートメントを使用してテスト関数を記述できるため、テストがクリーンで読みやすくなります。テストを作成するには、 test_で始まる名前の関数を定義し、アサーションを使用して期待される動作が満たされているかどうかを確認します。簡単な例を次に示します。


 def add(a, b): return a + b def test_add(): assert add(2, 3) == 5 assert add(-1, 5) == 4 assert add(0, 0) == 0


Pytest フィクスチャ

pytest のフィクスチャは、データベース接続、一時ファイル、テスト データなどの再利用可能なリソースを設定および破棄するための便利な方法を提供します。それらは、クリーンなモジュール式のテスト スイートを維持するのに役立ちます。フィクスチャを作成するには、以下の例に示す @pytest.fixture デコレータを使用します。


 import pytest @pytest.fixture def sample_data(): return {"name": "John Doe", "age": 30} def test_sample_data(sample_data): assert sample_data["name"] == "John Doe" assert sample_data["age"] == 30


上記の例では、 sample_dataフィクスチャは、それをパラメーターとして要求するすべてのテスト関数に自動的に渡され、テスト スイート全体で一貫したテスト データが保証されます。

Pytest プラグイン

Pytest のプラグイン システムを使用すると、その機能を拡張したり、他のツールと統合したりして、さらに汎用性を高めることができます。既存のプラグインを使用することも、独自のプラグインを作成することもできます。既存のプラグインをインストールするには、pip パッケージ マネージャーを使用します。たとえば、コマンド ラインで次のコマンドを実行して、pytest-cov プラグインをインストールします。


pip install pytest-cov


カスタム プラグインを作成するには、新しい Python モジュール (例ではmy_plugin_moduleという名前) を定義します。そこから、モジュールを setup.py ファイルのエントリ ポイントとして登録します。


 # setup.py from setuptools import setup setup( ... entry_points={"pytest11": ["my_plugin = my_plugin_module"]}, ... )


Pytest の利点と制限事項

テストはソフトウェア開発の重要な側面であり、コードが堅牢で信頼性が高く、バグがないことを保証します。 Pytest は、そのシンプルさ、柔軟性、および強力な機能により、Python 開発者の間で人気のある選択肢として浮上しています。ただし、他のツールと同様に、制限があります。

パイテストの利点

  1. 使いやすい - シンプルな構文、簡単なテスト、テストの自動化: Pytest はシンプルで直感的な構文を提供するため、初心者でも簡単にテストを作成できます。組み込みのテスト検出により、pytest はテストを自動的に検出して実行し、開発者の時間と労力を節約します。


  2. 包括的な機能: パラメータ化されたテスト、フィクスチャ、アサーション: Pytest は、パラメータ化されたテスト、フィクスチャ、高度なアサーション機能などの強力な機能のスイートを提供し、包括的で保守可能なテストを簡単に記述できるようにします。


  3. 拡張性: プラグイン、機能を拡張する機能: Pytest のプラグイン システムにより、開発者はその機能を拡張したり、他のツールと統合したりして、汎用性を高めることができます。


  4. 包括的なドキュメント: わかりやすい手順と例: Pytest のよく整理されたドキュメントには明確な手順と例が記載されているため、開発者はフレームワークを簡単に学習して習得できます。 pytest の Launchable 統合は、コード サンプルで文書化されています。これは、pytest と Launchable を使い始めるときに役立ちます。


  5. クロスプラットフォームの互換性: Windows、Linux、および MacOS で実行: Pytest はクロスプラットフォームの互換性があります。つまり、Windows、Linux、MacOS などのさまざまなオペレーティング システムで実行できるため、スムーズなテスト エクスペリエンスが保証されます。


  6. コミュニティ サポート: 大規模で役立つユーザー コミュニティへのアクセス: Pytest には大規模で支援的なコミュニティがあり、問題のトラブルシューティング、知識の共有、最新の開発状況の維持に関して非常に貴重です。

Pytest の制限事項

多くの利点があるにもかかわらず、pytest には、開発者が考慮すべきいくつかの制限もあります。


  1. Python 以外の言語に対する限定的なサポート: Pytest は Python を念頭に置いて設計されているため、他の言語に対する広範なサポートはありません。これは、Python 以外の言語で記述されたコードをテストする必要がある場合に問題になる可能性があります。


  2. 複雑なテストのデバッグが難しい:複雑なテストを扱う場合、Pytest はデバッグが難しい場合があります。テストに複数のコンポーネントが含まれる場合や、テスト対象のコードを深く理解する必要がある場合、これは特に困難になる可能性があります。


  3. すべてのプロジェクトに常に適しているとは限りません: pytest は単体テストには適していますが、すべてのプロジェクトに適しているとは限りません。たとえば、プロジェクトで統合テストまたはエンド ツー エンド テストが必要な場合、pytest は最適なオプションではない可能性があります。


幸いなことに、Launchable の Predictive Test Selection を使用すれば、複雑な統合テスト スイートを何時間も実行する必要はありません。

Launchable と Pytest の連携方法

今日のペースの速い開発環境では、毎分が重要です。テストの実行に時間がかかると、生産性が低下し、展開が遅れ、開発者のエクスペリエンスが低下し、コストが増加する可能性があります。幸いなことに、Launchable pytest 統合により、予測テスト選択の力を活用して、テスト ワークフローを最適化し、テストを高速化し、開発者エクスペリエンスを向上させることができます。


テスト インテリジェンス プラットフォームである Launchable は、機械学習を使用して、潜在的な欠陥を検出する可能性が最も高いテストを予測しますLaunchable の pytest 統合により、最も関連性の高いテストの実行を優先して、貴重なマシン時間を節約し、開発者に迅速なフィードバックを提供できます。


Launchable を pytest に追加すると、開発者と DevOps チームは次のことができるようになります。


  1. テスト実行時間の短縮: 最も関連性の高いテストのみを実行することで、テストの実行にかかる時間を大幅に短縮し、反復と展開を高速化できます。


  2. 最適化されたリソース使用率: Launchable のインテリジェントなテスト選択により、コンピューティング リソースが効率的に使用され、テストの全体的なコストが削減され、他のタスクのためにリソースが解放されます。


  3. テスト スイートの信頼性の向上:欠陥を検出する可能性が最も高いテストを優先することで、開発サイクルの早い段階で問題を検出して修正し、コードベースの全体的な品質と信頼性を向上させることができます。

Pytest と Launchable のハンズオン チュートリアル

Launchable pytest プラグインを使い始めるには、4 つの簡単な手順が必要です。


✅ 起動可能な Pytest プラグインをインストールする

Launchable pytest プラグインをインストールします: pip3 install pytest-launchable


✅ 起動可能な API キーを設定する

https://app.launchableinc.com/signup/で Launchable アカウントにサインアップし (まだ登録していない場合)、API キーを作成します。 CI スクリプトでキーを環境変数としてエクスポートします。 export LAUNCHABLE_TOKEN=<your_launchable_api_key>

このキーは安全な場所に保存してください。ソース コード内に残して、すべての人に見られるのは避けてください。


✅ テストデータを記録して Launchable に送信:

Launchable が実行するテストを予測するには、過去のテスト データが必要です。テスト データを記録して送信するには、起動可能な構成をセットアップします。

pip: launchable-config --createを介して実行することで Launchable 構成を生成できます。または、この例を.launchable.d/config.ymlという名前の新しいファイルにコピーすることもできます。


 # Launchable test session configuration file # See https://docs.launchableinc.com/resources/cli-reference for detailed usage of these options # schema-version: 1.0 build-name: commit_hash record-build: # Put your git repository location here source: . max_days: 30 record-session: subset: # mode can be subset, subset-and-rest, or record-only mode: record-only # if mode is subset or subset-and-rest, you must specify one of target/confidence/time # examples: # target: 30% # Create a variable time-based subset of the given percentage. (0%-100%) # confidence: 30% # Create a confidence-based subset of the given percentage. (0%-100%) # time: 30m # Create a fixed time-based subset. Select the best set of tests that run within the given time bound. (eg 10m for 10 minutes, 2h30m for 2.5 hours, 1w3d for 7+3=10 days. ) confidence: 99 record-tests: # The test results are placed here in JUnit XML format result_dir: launchable-test-result


✅ 予測テストの選択を有効にする:

十分なテスト データを送信したら、Launchable の予測テスト セレクションの使用を開始できます。


config.ymlファイルを更新するだけです。 subset modesubsetに変更し、最適化ターゲット ( targettime 、またはconfidenceのいずれか) を設定して、ファイルを保存します。これにより、 pytest --launchableを実行したときにサブセット化が有効になります。


簡単ピージー、レモン絞り!


その後、Launchable は最も重要で関連性の高いテストを選択し、テスト ワークフローを最適化し、開発チームに迅速なフィードバックを提供します。


包括的なドキュメントについては、 pytest (統合) |を参照してください。起動可能なドキュメント.


Pytest と予測テストの選択に関する最終的な注意事項

Launchable を pytest テスト ワークフローに統合すると、時間とリソースを大幅に節約できるため、開発サイクルを加速し、高品質のコードをより効率的に提供できます。


最も関連性の高いテストを優先することで、マシン時間を節約できるだけでなく、開発チームがより迅速にフィードバックを受け取ることができるようになり問題の迅速な解決と全体的なコード品質の向上につながります。