テストハーネスとは何ですか? (例)

⚡ スマートサマリー

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

  • 🧩 定義: ハーネスは、テストケース、スタブ、ドライバ、ターゲット展開ポートの詳細、およびテスト対象のソースファイルを1つの実行可能な単位にまとめたものです。
  • 🎯 なぜ重要なのか: データベース、ゲートウェイ、バックエンドモジュールが存在する前にテストを開始するため、欠陥は早期に発見され、修復コストを最小限に抑えることができます。
  • 🔧 コアパーツ: 実行エンジン、スクリプトリポジトリ、テストデータストア、スタブ、ドライバ、出力バリデータ、およびレポートレイヤーはそれぞれ1つの責任を担います。
  • 🔁 ワークフロー: スクリプトをロードし、テスト対象アプリケーションを起動し、不足しているモジュールを置き換え、出力を取得し、期待値と比較し、レポートを公開します。
  • 🛠 ツーリング: JUnit フィット JavaNUnitは.NETに適合し、 Selenium, TestNGPyTest、および JMeter ハーネスの適用範囲をウェブ、パラレル、および負荷作業にまで拡大します。
  • 📈 最適化: スタブは実際のモジュールの動作と整合させ、テストデータはスクリプトの外に保存し、継続的インテグレーションのビルドごとにハーネスを実行してください。

ソフトウェアテストにおけるテストハーネス

ソフトウェアテストにおけるテストハーネス は、テスト実行を自動化するために必要なスタブ、ドライバー、およびその他のサポート ツールのコレクションです。 テスト ハーネスは、テスト ライブラリを使用してテストを実行し、テスト レポートを生成します。 テスト ハーネスには、テスト ケース、ターゲット デプロイメント ポート (TDP)、テスト対象のソース ファイル、スタブなど、テストのコンパイルと実行に必要なすべての情報が含まれています。

簡単に言うと、ハーネスとは、検証対象のコンポーネントを制御された環境内に組み込むものです。不足している隣接モジュールは小さなダミープログラムに置き換えられ、入力は固定データセットから取得され、すべての結果は画面から読み取るのではなくログに書き込まれます。以降のセクションでは、チームがハーネスを構築する理由、構成要素、動作原理、そして設置場所について説明します。

テストハーネスを使用する理由

テストサイクルから待ち時間をなくすためにハーネスが存在します。まだ準備ができていないものをシミュレートするため、 ソフトウェアテスト チームは、最終的な統合が完了する前、最初のスプリントから動作検証を開始できます。下の図は、テストスクリプトとテスト対象アプリケーションの間にハーネスが配置​​される位置を示しています。

テストハーネス

  • テストプロセスを自動化する
  • テストケースのテストスイートを実行する
  • 関連するテストレポートを生成する
  • デバッグのサポート
  • 各テストのテスト結果を記録するには
  • 開発者がコードレベルでコードカバレッジを測定できるようにします
  • 自動化によりシステムの生産性を向上
  • ソフトウェアコンポーネントとアプリケーションの品質を向上させる
  • テスターがシミュレートするのが難しい複雑な条件を処理するため

これらのメリットは、リリースサイクルが短い場合に最も重要になります。コードが週に数回出荷される場合、統合段階まで残った欠陥は、はるかに大きなコストがかかります。 trac書かれたその日に、ただ単に台無しにされただけではない。しかし、その見返りは、適切な部品からハーネスが組み立てられたときに初めて得られる。

テストハーネスの主要構成要素

ハーネスとは単一のプログラムではなく、複数の部品の集合体であり、それぞれの部品は、そうでなければ無人でのテスト実行を妨げるであろう障害を一つずつ取り除く役割を果たします。

  • テストスクリプト: 実行する手順と期待される結果を記載した自動化された指示書は、 テストスクリプト コンベンション。
  • テスト実行エンジン: スクリプトを順番に読み込み、依存関係を解決し、逐次実行または並列実行をトリガーするランナー。
  • テストデータリポジトリ: スクリプト外のCSV、JSON、XML、またはシード済みデータベースに保持される入力値は、多くの場合、 テストデータ生成ツール.
  • ドライバ: ユーザーインターフェースなどの実際の上位レイヤーが未完成の場合に、テスト対象のコンポーネントを呼び出すダミー呼び出しモジュール。
  • スタブ: ダミーの呼び出しモジュールは、例えば銀行に連絡せずに「支払い成功」と応答する決済サービスなど、定型的な応答を返します。
  • 出力検証ツール: 実際の出力と期待値を比較し、各ケースを合格または不合格として判定するアサーションロジック。
  • ログ記録およびレポート作成レイヤー: タイムスタンプ、スクリーンショット、コンソール出力、および実行概要により、すべての失敗が記録されます tracその後食べられる。

部品を一つでも取り外すと、ハーネスは自動ではなくなり、毎回手動で部品を供給しなければならなくなる。

テストハーネスはどのように機能するのですか?

ハーネスは実行ごとに同じループを繰り返します。そのループを知ることで、自分の 自動化テスト アセットがプラグインされ、実行が赤色になったときにどのステップが失敗しているかを確認します。

  1. 環境を準備します。 ハーネスは環境設定を解決し、接続を開き、フィクスチャをロードするため、すべての実行が同じ既知の状態から開始されます。
  2. テストスクリプトを読み込む: スクリプト、パラメータ、および期待される結果はリポジトリから読み込まれます。実行時に何も入力されないため、2回目の実行結果は1回目の実行結果と完全に一致します。
  3. 不足しているモジュールを置き換えてください。 ドライバーはまだ存在しない発信者の代わりを務め、スタブは未完成、不安定、または通話料金が高いサービスの代わりを務める。
  4. テスト対象アプリケーションを起動します。 実行エンジンは、スクリプトで記述されたワークフローをトリガーします。それがメソッド呼び出しであろうと、 API リクエスト、またはブラウザの操作。
  5. 実際の出力を取得する: 戻り値、レスポンスペイロード、データベース行、ログ行、画面状態はすべて、生成された時点で記録されます。
  6. 予想結果と比較する: 出力バリデーターは、取得した各値に対して検証を行います。不一致があった場合は、そのケースを失敗とみなし、期待値と観測値の両方を記録します。
  7. ログとレポート: ハーネスはタイムスタンプ付きのデータを書き込む trac実行結果を表示し、開発者が再実行することなく確認できる合否レポートを生成します。
  8. 取り壊す: 一時的なデータ、接続、およびスタブ状態はクリアされるため、次のケースはこのケースから残存物を継承することができません。

💡ヒント: 実際のモジュールが変更されたら、スタブも更新してください。前四半期のフォーマットで応答しているスタブは、本番環境での統合が既に壊れているにもかかわらず、正常に実行されたと報告してしまいます。

具体的な例を挙げると、このループがより明確になります。チェックアウトページは準備完了だが、決済ゲートウェイが準備できていないとします。ドライバがインターフェースが通常送信するリクエストを発行し、スタブが最初に「支払い成功」と応答し、次にタイムアウトを応答します。バリデーターは、一方のケースでは注文を確認し、もう一方のケースでは再試行を促します。ゲートウェイチームがコードを記述する前に、両方のパスが検証されます。

テスト ハーネスが使用されるコンテキストは XNUMX つあります

その同じ仕組みは2つの異なる目的を果たしており、どちらの目的に関わっているかによって語彙が若干変化する。

  1. 自動化テスト: 含まれています テストスクリプト、これらのスクリプトを実行し、結果を収集して分析するために必要なパラメータ
  2. 統合テスト: 相互に作用する XNUMX つのコードまたはモジュールをまとめて、組み合わせた動作が期待どおりであるかどうかを確認するために使用されます。

ユーザー トークンを交換する必要があるログイン モジュールとプロファイル モジュールを考えてみましょう。統合コンテキストでは、ドライバがログイン成功をシミュレートし、トークンをプロファイル ロジックに渡すため、データ マップping権限チェックと画面レンダリングは、実際の認証サービスが完了する前にすべて検証できます。自動化のコンテキストでは、同じ2つのケースがスイートに追加され、誰も手を加えることなく、ビルドごとに再実行されます。

テストハーネスの種類

ソフトウェアは階層構造で構築されているため、テストハーネスは通常、検証対象の階層に特化して設計されます。4種類のテストハーネスは、ほぼすべてのプロジェクトに対応しています。

A ユニットテストハーネス 単一の関数やメソッドなど、最小のコード単位で実行し、すべての依存関係をスタブに置き換えます。実行速度が最も速く、メンテナンスコストが最も安いため、 単体テスト スイートは通常、チームが最初に構築するハーネスです。請求モジュールに手を加えずに税金計算をテストすることは、典型的な使用例です。

An 統合テストハーネス 2 つ以上のモジュールが正しく連携しているかどうかをチェックし、データの不一致や呼び出しの失敗が表面化するレイヤーです。これは、 統合テスト 上記の文脈では、例えば、注文サービスが正しいペイロードを決済サービスに渡していることを確認する場合などが挙げられます。

A システムテストハーネス インターフェース、サービス、データベース全体にわたる完全なエンドツーエンドの流れを推進するため システムテスト すべてのレイヤーが存在すれば、ビジネスルールが成り立つことを確認できます。 回帰テストハーネス そして、変更のたびに蓄積されたスイートを再実行します。 回帰試験 数百ものシナリオをマージのたびに繰り返さなければならない場合に実用的です。

テストハーネスツール

これらのタイプはいずれも、通常はゼロから構築するのではなく、既存のツールをベースに構築されます。古典的な選択肢としては、ユニットレベルのフレームワークが2つあります。

これら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 駆動型テスト
動作主導型テスト

よくあるご質問

テストベッドとは、テストを実行するハードウェア、オペレーティングシステム、ネットワーク、およびデータベース構成のことです。ハーネスとは、その上位にあるソフトウェア層で、スタブ、ドライバ、データ、およびレポートを提供します。一方は場所、もう一方は仕組みを表しています。

録音と再生は利用できないため、スクリプトスキルは Java, Pythonまたは.NETが必要です。初期設定にはかなりの労力が必要で、放置するとスタブが実際のモジュールから乖離し、過剰なモックは統合の欠陥を後になってから隠してしまう可能性があります。

パイプラインはコミットごとにハーネスを呼び出す。 JenkinsGitHub Actions、またはGitLab CIが実行をトリガーし、ハーネスがスタブに対してスクリプトを実行し、アサーションが成立しない場合はビルドが自動的に失敗します。

AI モデルはインターフェースの変更を読み取り、壊れたロケーターやアサーションを自動的に修復するため、ハーネスはリファクタリング後も存続します。自己修復機能は不安定なケースも検出するため、従来ビルドごとに必要だった手動メンテナンスが不要になります。 Selenium スイート。

はい。生成モデルは、API仕様からスタブ応答を生成し、モジュールシグネチャからドライバコードをドラフトし、現実的なデータセットを合成します。 Rev使用前に出力を確認してください。もっともらしく見えるスタブでも、実際の構成と矛盾する可能性があるためです。tract.