テストハーネスとは何ですか? (例)
⚡ スマートサマリー
ソフトウェアテストにおけるテストハーネスは、スタブ、ドライバ、テストデータ、実行ツールを統合することで、チームがすべての依存関係が存在する前にモジュールを検証できるようにし、ブロックされていたテストサイクルを、手作業を必要とせずに結果を報告できる、再現可能で自動化された検証へと変えます。

ソフトウェアテストにおけるテストハーネス
ソフトウェアテストにおけるテストハーネス は、テスト実行を自動化するために必要なスタブ、ドライバー、およびその他のサポート ツールのコレクションです。 テスト ハーネスは、テスト ライブラリを使用してテストを実行し、テスト レポートを生成します。 テスト ハーネスには、テスト ケース、ターゲット デプロイメント ポート (TDP)、テスト対象のソース ファイル、スタブなど、テストのコンパイルと実行に必要なすべての情報が含まれています。
簡単に言うと、ハーネスとは、検証対象のコンポーネントを制御された環境内に組み込むものです。不足している隣接モジュールは小さなダミープログラムに置き換えられ、入力は固定データセットから取得され、すべての結果は画面から読み取るのではなくログに書き込まれます。以降のセクションでは、チームがハーネスを構築する理由、構成要素、動作原理、そして設置場所について説明します。
テストハーネスを使用する理由
テストサイクルから待ち時間をなくすためにハーネスが存在します。まだ準備ができていないものをシミュレートするため、 ソフトウェアテスト チームは、最終的な統合が完了する前、最初のスプリントから動作検証を開始できます。下の図は、テストスクリプトとテスト対象アプリケーションの間にハーネスが配置される位置を示しています。
- テストプロセスを自動化する
- テストケースのテストスイートを実行する
- 関連するテストレポートを生成する
- デバッグのサポート
- 各テストのテスト結果を記録するには
- 開発者がコードレベルでコードカバレッジを測定できるようにします
- 自動化によりシステムの生産性を向上
- ソフトウェアコンポーネントとアプリケーションの品質を向上させる
- テスターがシミュレートするのが難しい複雑な条件を処理するため
これらのメリットは、リリースサイクルが短い場合に最も重要になります。コードが週に数回出荷される場合、統合段階まで残った欠陥は、はるかに大きなコストがかかります。 trac書かれたその日に、ただ単に台無しにされただけではない。しかし、その見返りは、適切な部品からハーネスが組み立てられたときに初めて得られる。
テストハーネスの主要構成要素
ハーネスとは単一のプログラムではなく、複数の部品の集合体であり、それぞれの部品は、そうでなければ無人でのテスト実行を妨げるであろう障害を一つずつ取り除く役割を果たします。
- テストスクリプト: 実行する手順と期待される結果を記載した自動化された指示書は、 テストスクリプト コンベンション。
- テスト実行エンジン: スクリプトを順番に読み込み、依存関係を解決し、逐次実行または並列実行をトリガーするランナー。
- テストデータリポジトリ: スクリプト外のCSV、JSON、XML、またはシード済みデータベースに保持される入力値は、多くの場合、 テストデータ生成ツール.
- ドライバ: ユーザーインターフェースなどの実際の上位レイヤーが未完成の場合に、テスト対象のコンポーネントを呼び出すダミー呼び出しモジュール。
- スタブ: ダミーの呼び出しモジュールは、例えば銀行に連絡せずに「支払い成功」と応答する決済サービスなど、定型的な応答を返します。
- 出力検証ツール: 実際の出力と期待値を比較し、各ケースを合格または不合格として判定するアサーションロジック。
- ログ記録およびレポート作成レイヤー: タイムスタンプ、スクリーンショット、コンソール出力、および実行概要により、すべての失敗が記録されます tracその後食べられる。
部品を一つでも取り外すと、ハーネスは自動ではなくなり、毎回手動で部品を供給しなければならなくなる。
テストハーネスはどのように機能するのですか?
ハーネスは実行ごとに同じループを繰り返します。そのループを知ることで、自分の 自動化テスト アセットがプラグインされ、実行が赤色になったときにどのステップが失敗しているかを確認します。
- 環境を準備します。 ハーネスは環境設定を解決し、接続を開き、フィクスチャをロードするため、すべての実行が同じ既知の状態から開始されます。
- テストスクリプトを読み込む: スクリプト、パラメータ、および期待される結果はリポジトリから読み込まれます。実行時に何も入力されないため、2回目の実行結果は1回目の実行結果と完全に一致します。
- 不足しているモジュールを置き換えてください。 ドライバーはまだ存在しない発信者の代わりを務め、スタブは未完成、不安定、または通話料金が高いサービスの代わりを務める。
- テスト対象アプリケーションを起動します。 実行エンジンは、スクリプトで記述されたワークフローをトリガーします。それがメソッド呼び出しであろうと、 API リクエスト、またはブラウザの操作。
- 実際の出力を取得する: 戻り値、レスポンスペイロード、データベース行、ログ行、画面状態はすべて、生成された時点で記録されます。
- 予想結果と比較する: 出力バリデーターは、取得した各値に対して検証を行います。不一致があった場合は、そのケースを失敗とみなし、期待値と観測値の両方を記録します。
- ログとレポート: ハーネスはタイムスタンプ付きのデータを書き込む trac実行結果を表示し、開発者が再実行することなく確認できる合否レポートを生成します。
- 取り壊す: 一時的なデータ、接続、およびスタブ状態はクリアされるため、次のケースはこのケースから残存物を継承することができません。
💡ヒント: 実際のモジュールが変更されたら、スタブも更新してください。前四半期のフォーマットで応答しているスタブは、本番環境での統合が既に壊れているにもかかわらず、正常に実行されたと報告してしまいます。
具体的な例を挙げると、このループがより明確になります。チェックアウトページは準備完了だが、決済ゲートウェイが準備できていないとします。ドライバがインターフェースが通常送信するリクエストを発行し、スタブが最初に「支払い成功」と応答し、次にタイムアウトを応答します。バリデーターは、一方のケースでは注文を確認し、もう一方のケースでは再試行を促します。ゲートウェイチームがコードを記述する前に、両方のパスが検証されます。
テスト ハーネスが使用されるコンテキストは XNUMX つあります
その同じ仕組みは2つの異なる目的を果たしており、どちらの目的に関わっているかによって語彙が若干変化する。
- 自動化テスト: 含まれています テストスクリプト、これらのスクリプトを実行し、結果を収集して分析するために必要なパラメータ
- 統合テスト: 相互に作用する XNUMX つのコードまたはモジュールをまとめて、組み合わせた動作が期待どおりであるかどうかを確認するために使用されます。
ユーザー トークンを交換する必要があるログイン モジュールとプロファイル モジュールを考えてみましょう。統合コンテキストでは、ドライバがログイン成功をシミュレートし、トークンをプロファイル ロジックに渡すため、データ マップping権限チェックと画面レンダリングは、実際の認証サービスが完了する前にすべて検証できます。自動化のコンテキストでは、同じ2つのケースがスイートに追加され、誰も手を加えることなく、ビルドごとに再実行されます。
テストハーネスの種類
ソフトウェアは階層構造で構築されているため、テストハーネスは通常、検証対象の階層に特化して設計されます。4種類のテストハーネスは、ほぼすべてのプロジェクトに対応しています。
A ユニットテストハーネス 単一の関数やメソッドなど、最小のコード単位で実行し、すべての依存関係をスタブに置き換えます。実行速度が最も速く、メンテナンスコストが最も安いため、 単体テスト スイートは通常、チームが最初に構築するハーネスです。請求モジュールに手を加えずに税金計算をテストすることは、典型的な使用例です。
An 統合テストハーネス 2 つ以上のモジュールが正しく連携しているかどうかをチェックし、データの不一致や呼び出しの失敗が表面化するレイヤーです。これは、 統合テスト 上記の文脈では、例えば、注文サービスが正しいペイロードを決済サービスに渡していることを確認する場合などが挙げられます。
A システムテストハーネス インターフェース、サービス、データベース全体にわたる完全なエンドツーエンドの流れを推進するため システムテスト すべてのレイヤーが存在すれば、ビジネスルールが成り立つことを確認できます。 回帰テストハーネス そして、変更のたびに蓄積されたスイートを再実行します。 回帰試験 数百ものシナリオをマージのたびに繰り返さなければならない場合に実用的です。
テストハーネスツール
これらのタイプはいずれも、通常はゼロから構築するのではなく、既存のツールをベースに構築されます。古典的な選択肢としては、ユニットレベルのフレームワークが2つあります。
- ジュニット:使用時に使用するツール Java
- 単位: 使用する際に使用するツール 。ネットフレームワーク
これら2つに加えて、ほとんどのチームは、ハーネスをブラウザ、APIレイヤー、またはロードプロファイルに拡張するツールを追加します。以下の表は、一般的なオプションとそれぞれの役割を対応付けたものです。
| ツール | に最適 | ハーネス内部の役割 |
|---|---|---|
| JUnit | Java ユニットおよび統合スイート | 供給ドライバー、固定具、および主張 |
| Nユニット | .NETプラットフォーム上のC#およびVB.NETコード | 同じ役割 JUnit .NET言語の場合 |
| Selenium | ブラウザベースのエンドツーエンドフロー | ユーザーインターフェース層のドライバとして機能します。 |
| TestNG | L Java グループが必要なスイートping および並行走行 | テスト実行エンジンとして機能する |
| パイテスト | Python サービスおよびAPIレベルのチェック | 照明器具はスタブとデータプロバイダーの両方の役割を果たします。 |
| Apache JMeter | 負荷、ストレス、およびパフォーマンスのシナリオ | テスト対象アプリケーションに対して合成トラフィックを生成します。 |
| Postman | REST API コンソールtract検証 | 未完成のエンドポイントの代わりとなるモックサーバーを提供します。 |
どの組み合わせを選んでも、ハーネスは無人で稼働したときに初めて元が取れるので、 継続的インテグレーション 早めに仕事に就く。より幅広い選択肢は、 Guru99 テストツール まとめ。まだ混乱を招く点が1つあるので、何かを選択する前にそれを解決しておく価値があります。
テストハーネスとテストフレームワーク
テストハーネスと自動化フレームワークはしばしば同じものとして扱われますが、実際には異なる目的のために設計されています。テストハーネスはテストを実行するものであり、フレームワークはテストが設計される枠組みとなる構造です。以下の表は、両者を並べて比較したものです。
| テストハーネス | テスト自動化フレームワーク |
|---|---|
| テスト ハーネスは、テスト対象のソフトウェアと対話する小さなダミー プログラムであるドライバーとスタブで構成されます。 | それは一連のプロセス、手順、絶対trac自動テストが設計および実装されるコンセプトと環境 |
| テストハーネスではスクリプトを「記録して再生」することはできません | テスターは、このフレームワークでスクリプトを手動で「記録および再生」できます。 |
| テスト ハーネスには、テスト ケース、ターゲット デプロイメント ポート (TDP)、テスト対象のソース ファイル、スタブなど、テストのコンパイルと実行に必要なすべての情報が含まれています。 | テスト自動化フレームワークには、テスト ライブラリ、テスト ツール、自動テストの実践、テスト プラットフォームなどの情報が含まれています。 |
| テストハーネスは次のように分類されます。 自動化テスト 統合テスト |
自動化フレームワーク 例 データ駆動型テスト キーワード駆動テスト モジュール性主導のテスト ハイブリッドテスト モデルベースのテスト Code 駆動型テスト 動作主導型テスト |

