このガイドは、さまざまなフレームワークの種類、ソフトウェア テストにおける重要性、コンポーネントなどを含む、テスト自動化フレームワークの詳細な調査を提供することを目的としています。ここでは、よく知られている Selenium 自動化フレームワークとそのハイブリッド フレームワークについても説明します。
すべてのソフトウェアは、エンドユーザーの手に渡される前に、何らかのテストを受ける必要があります。したがって、ソフトウェア テストは、あらゆるソフトウェア開発プロセスにおいて不可欠な部分です。これにより、完璧で高品質なソフトウェア製品がユーザーに確実に提供されます。
ビジネス クリティカルなソフトウェアには、配信前に厳密なテストが必要です。多くの場合、テスト自動化フレームワークを利用した自動テストとして実施されます。これらのフレームワークは、自動テストに関して重要な役割を果たします。
テスト自動化フレームワークについて詳しく説明する前に、フレームワークの概念を理解しましょう。
フレームワークとは、期待される結果を達成するために体系的に従う必要がある、定義されたガイドラインとベスト プラクティスのセットです。したがって、自動化の目標を達成するには、特定の自動化フレームワークによって設定されたこれらのガイドラインと実践に対処する必要があります。
テスト自動化フレームワークは、テスト ケースの設計、作成、実行を支援するツールとガイドラインの集合です。これらのガイドラインには、自動テストに不可欠なテスト データの処理、オブジェクト リポジトリの処理などのコーディング標準、実践、プロセスが含まれています。
ソフトウェア開発は、特定のフェーズが繰り返し発生する継続的なサイクルです。テストも同様に行います。たとえば、開発者が新しいバージョンをリリースしたり、本番環境で発見されたバグを修正したりすると、ソフトウェアを再度テストする必要があります。その場合、同じテスト ケースのセット全体を手動で繰り返し実行するのは面倒な作業になります。自動化フレームワークには、手動テストの取り組みをプログラムとして簡単に体系化できる一連のツールが付属しています。したがって、特定の機能をテストする必要があるときはいつでも、そのプログラムを実行するだけで済みます。このように、自動化フレームワークは、コードの再利用性の高さ、移植性の向上、スクリプトのメンテナンスの労力とコストの削減など、ユーザーに大きなメリットをもたらします。
フレームワークは、自動テストの技術的な実装ガイドラインとして機能します。自動テスト フレームワークを利用すると、間違いなくテスト チームのテスト速度と効率が向上します。さらに、リスクを最小限に抑えながらテストの精度を向上させることができます。
コードの再利用性は、これらのテスト自動化フレームワークのもう 1 つの大きな利点です。これらにより、テスターはさまざまなシナリオでコードを再利用できるだけでなく、標準形式でテスト ケースを作成することもできます。
以下は、テスト自動化フレームワークを通じて得られる利点のリストです。
さまざまなテストスイート間で明確に定義された戦略を確立する
テスト速度の向上
コードの再利用性
URL またはアプリケーションを正確にテストする機能
テストコードを簡単に保守できる機能
コードのメンテナンスコストの削減
高いテストカバレッジ
最小限の手動介入
ソフトウェアの継続的なテストと配信を実現する能力
さまざまなテストスイート間で明確に定義された戦略を確立する
テスト自動化フレームワークの基本的な考え方は理解できたので、次に市場にあるさまざまなテスト自動化フレームワークの種類を見てみましょう。基本的に、自動化フレームワークには 6 種類あり、それぞれに異なるアーキテクチャ、長所、短所があります。
これは、小規模アプリケーションをテストするために最も単純で最も一般的に使用されるフレームワーク タイプです。これらのフレームワークは、記録および再生フレームワークとも呼ばれます。線形フレームワークを使用すると、テスト ケースごとに個別にテスト スクリプトを作成して実行できます。テスターは、ナビゲーションやユーザー入力などのユーザー行動の各ステップを手動で記録し、最初のラウンドでチェックポイントを追加します。その後、次のラウンドで記録されたスクリプトを再生します。
リニア オートメーション フレームワークでは、テスターがカスタム コードを作成する必要はありません。したがって、テスト自動化の専門知識があまりない人でも、誰でも使用できます。これらのフレームワークは、テスターがテスト スクリプトをより迅速に記録できるようにすることで、テスト スクリプトを作成する簡単な方法を提供します。さらに、テスト スクリプトが順番に配置されているため、テスト ワークフローはテストに関係する人にとって簡単に理解できます。
線形フレームワークの主な欠点は、テスト データがテスト スクリプト内でハードコーディングされており、異なるテスト データを使用してテスト ケースを再実行できないことです。アプリケーションの変更には多くの修正が必要となるため、テスト スクリプトの維持も困難です。
これらのフレームワークを使用すると、テスターはモジュールごとのテスト ケースを作成し、アプリケーション全体を小さなモジュールに分割できます。このようにテスト スクリプトをモジュールごとに分離することで、テスト コードのメンテナンスとスケーラビリティが容易になります。さらに、他のモジュールから独立して個別のテスト スクリプトを作成できます。
ただし、ユーザーは、モジュール型テスト フレームワークを使用してテスト ケースを分析し、再利用可能なフローを見つけるために、より多くの時間を費やす必要があります。さらに、テスト データがハードコードされているため、異なるテスト データ セットでテスト スクリプトを利用することができなくなります。これらのフレームワークを設定するには、コーディングの知識も必要です。
これらのフレームワークは、テスト スクリプトのロジックをテスト データから分離することを目的としています。したがって、ユーザーはさまざまなテスト データ セットを渡すことによって、自動テスト スクリプトを作成して実行できます。これらのテスト データは、スプレッドシート、XML ファイル、MS Access、SQL データベースなどの外部ファイルやリソースに保存できます。テスターは、テスト スクリプトをこれらの外部リソースに接続することでテスト データを取得できます。
データ駆動型フレームワークは、モジュール型フレームワークと比較して、必要なテスト スクリプトの数を大幅に削減します。さらに、テスト ケースを再利用できるため、テストの範囲が広がり、柔軟性が高まります。ユーザーはテストデータを変更するだけで、必要なときだけテストを実行できます。したがって、これらのフレームワークを使用すると、テストをより迅速に実行でき、時間を節約できます。
ただし、大きな欠点の 1 つは、これらのフレームワークを使用してテスト ケースを作成するには、適切なプログラミングの知識が必要なことです。さらに、これらの枠組みを構築するには多大な時間がかかります。
これらのフレームワークは、テーブル駆動テストとも呼ばれます。ここでは、実行可能なメソッドごとにキーワード/アクションワードを表形式を使用してスプレッドシートに定義します。次に、スプレッドシートで定義されたキーワードに基づいて自動テスト スクリプトが実行されます。キーワードを読み取り、必要なメソッドを呼び出すためのロジックは、メイン クラスに含まれています。
これらのフレームワークは、複数のテスト スクリプト間で 1 つのキーワードを使用できるようにすることで、コードの再利用性をサポートします。また、フレームワークを利用するには最小限のコーディング知識も必要です。さらに、テスト対象のアプリケーションとは独立してテスト スクリプトを作成できます。
ただし、このフレームワークの実装は複雑で時間がかかり、初期コストが高くなります。これらのフレームワークは、小規模なアプリとプロジェクトのみをテストするのに適しています。
名前が示すように、ハイブリッド フレームワークは、上記の 2 つ以上のフレームワーク タイプを組み合わせたものと呼ばれます。これらは、特定の種類のフレームワークの長所を活用しながら、欠点を軽減するのに役立ちます。
これらのハイブリッド フレームワークは、プログラミングの専門知識があまりない手動テスターによってよく使用されます。キーワード、テスト データ、オブジェクト リポジトリを参照するだけで、コーディングを必要とせずにテスト ケースの作成を進めることができます。
動作駆動型開発フレームワークは、開発者、ビジネス アナリスト、テスターを含む誰もがテスト プロセスに積極的に参加できるプラットフォームを作成することを目的としています。したがって、チームの開発者とテスター間のコラボレーションが強化されます。このフレームワーク タイプの主な利点は、非技術的な自然言語を使用してテスト仕様を作成できることです。
ただし、このタイプのフレームワークを利用するには、ユーザーが優れた技術スキルとテスト駆動開発の経験が必要です。ご覧のとおり、上記のテスト自動化フレームワークの種類には、それぞれ独自の長所と短所があります。したがって、自動化プロジェクトのテスト計画を準備する際には、適切なフレームワーク タイプを選択することが不可欠です。
Selenium は、Web アプリケーション テスト用の主要なオープンソース テスト自動化フレームワークです。このフレームワークは、JavaScript フレームワークに基づいて構築された一連のテスト自動化ツールで構成されます。
Selenium を使用すると、テスト スクリプトを作成するためのインターフェイスが提供されるため、テスト担当者はテストを高速化できます。これらのスクリプトは、C#、PHP、Python、Ruby、JavaScript などのさまざまな言語で作成できます。ユーザーは、Selenium を使用して、さまざまなブラウザと OS の組み合わせに対して独自の自動テストを作成できます。
Selenium エコシステムは、次の 4 つの主要なコンポーネントで構成されます。
Selenium Web ドライバーは、クロスブラウザー テストを実行できるブラウザー自動化ツールです。これは、Selenium テスト スイートの最も重要なコンポーネントです。
Web ドライバーはリクエストを受け取り、W3C 標準に準拠したプロトコル経由でブラウザに送信します。この通信は、ブラウザー固有のドライバーを介して行われます。このブラウザー固有のドライバーは、ブラウザーと直接通信してブラウザーを管理します。
Selenium Web ドライバーは、C#、Python、Java、PHP、JavaScript、Perl、Ruby などの複数のプログラミング言語と互換性があります。テスターは、Webdriver と Selenium グリッドを使用して、リモート システム上でテストを実行できます。
Selenium Grid は、Selenium RC とともに使用されるツールです。ブラウザと OS のさまざまな組み合わせでのテストの並行実行をサポートします。クライアントが送信するコマンドをリモート ブラウザ インスタンスにルーティングすることで、リモート マシン上で Web ドライバー スクリプトを実行できるようになります。
Selenium Grid は、Selenium RC とともに使用されるツールです。ブラウザと OS のさまざまな組み合わせでのテストの並行実行をサポートします。クライアントが送信するコマンドをリモート ブラウザ インスタンスにルーティングすることで、リモート マシン上で Web ドライバー スクリプトを実行できるようになります。
Selenium RC も、Selenium テスト スイートのもう 1 つの重要なコンポーネントです。これは Java で構築されたサーバーであり、HTTP 経由でブラウザーのコマンドを受け取ります。 Selenium RC を使用すると、テスターはさまざまなプログラミング言語でテスト ケースを作成できます。
Selenium RC は、Selenium IDE と Selenium Core の多くの欠点を克服するのに役立ちます。ただし、Selenium Core と呼ばれる追加の JavaScript レイヤーを介してブラウザと通信するため、Web ドライバーよりもパフォーマンスが遅くなります。
このフレームワークは高度にカスタマイズ可能で適応性があり、すべての主要なブラウザ、オペレーティング システム、およびテスト フレームワークと互換性があります。 Selenium は、発明から 16 年が経過した現在でも、自動テストに関しては事実上の選択肢となっています。
Selenium フレームワークのコード構造は、コードの再利用性をサポートし、コードのメンテナンスを容易にしながら、コードの可読性を高めます。また、複数のユーザーが同じソフトウェア モジュールで作業できるようになります。
さらに、Selenium には、テストの作成と実行を容易にするユーザーフレンドリーなインターフェイスがあります。オープンソースであるため、ユーザーはカスタマイズされたアクションの統合とそれらの操作を高レベルでサポートする独自の拡張機能を作成できます。 Selenium テストはブラウザ上で直接実行され、ユーザーは進行状況を監視できます。
以下に、Selenium フレームワークの注目すべき機能をいくつか示します。
ブラウザ間の互換性Selenium は、Google Chrome、Firefox、Safari、Opera などの主要なブラウザをほぼすべてサポートしています。簡単なコマンドを使用して任意のブラウザを起動できます。
複数のプログラミング言語のサポートSelenium を使用すると、ユーザーは C#、Java、Python、PHP、Perl などのさまざまなプログラミング言語でテスト ケースを作成できます。
高速かつ高速な実行Selenium は中間サーバーを必要とせず、ブラウザと直接通信します。したがって、自動テストにおいて優れたパフォーマンスを提供します。
さまざまなオペレーティング システムとの互換性Selenium Web ドライバーで作成されたテスト スクリプトは、Windows、Linux、macOS などのさまざまなオペレーティング システムで実行できます。
並列テストのサポート並列テストを実行できるため、テストにかかる時間が短縮されるだけでなく、テストの効率も向上します。
さまざまな種類のテストを実行できるSelenium では、回帰テスト、単体テスト、自動ブラウザ テストなど、多くの種類のテストを自動化できます。
移植性とオープンソースの性質Selenium のオープンソースの性質は、その最大の利点の 1 つです。 Selenium は公式 Web サイトから自由にダウンロードできます。
サーバーのインストールが不要Selenium Web ドライバーはブラウザと直接通信するため、サーバーのインストールが不要です。
CI/CD のサポートユーザーは、継続的インテグレーションおよび継続的デリバリー パイプラインを Selenium と統合して、自動テストに DevOps プラクティスを導入できます。
最小限のハードウェア リソース使用量Selenium は、QTP、SilkTest、UFT などの他の自動化フレームワークに比べて、ハードウェア リソースの使用量が非常に少なくなります。
Selenium には、最新リリースの Selenium 4 でさらに優れた機能が提供されています。Selenium は、TestNG、 WebDriver.IO 、Nightwatch、Junit など、他の多くの人気のあるフレームワークのベース フレームワークでもあります。
専門知識とリソースの必要性ユーザーは、Selenium とそのサブフレームワークを使用するために、適切な知識、技術スキル、および経験を持っている必要があります。さらに、テスターは、Selenium フレームワークの機能を最大限に活用するために、そのアーキテクチャに精通している必要があります。
デスクトップ アプリケーションのサポートなしSelenium は主に Web ドメインで動作し、デスクトップ アプリケーションの自動化をサポートしません。
モバイル オートメーションのサポートは組み込まれていません。 Selenium 自体はモバイル アプリケーションの自動化をサポートしていません。テスターは、WebDriver プロトコルを介して Selenium で Android および iOS アプリを自動化するには、Appium に依存する必要があります。
テスト管理ツールが提供されていないテスト管理ツールは、複雑な Web アプリケーションをテストする場合に、テスト ケースの実行を監視し、データを保存するのに役立ちます。多くのテスト自動化ツールには、複雑なアプリのテストを簡素化するためのテスト管理ツールが組み込まれています。しかし、Selenium にはそのようなテスト管理ツールがまだありません。
高度なスキルを持つテスターの必要性Selenium では、自動化を効果的に実行し、フレームワークの機能を最大限に活用するには、高度なスキル セットを備えたエンジニアが必要です。
レポート機能が組み込まれていないレポートは、テスト自動化フレームワークには必須の機能です。しかし、Selenium には依然として独自のレポート機能がなく、レポートの生成には Cucumber や TestNG などのサードパーティのフレームワークに依存しています。
動的 Web 要素で正確な結果を提供できない動的 Web 要素の中には、Web ページの読み込み時にすぐには表示されないものがあります。 Selenium では、この種の動的要素を処理するのが困難です。
Selenium はフレームとポップアップを処理するのが困難です。 Selenium は、Windows オペレーティング システムによって生成されるネイティブ ポップアップ ウィンドウの自動化をサポートしていません。
キャプチャとバーコードを自動化しないSelenium はキャプチャとバーコードを処理できません。キャプチャを自動化するために Selenium と統合するサードパーティ ツールがいくつかありますが、正確な結果は保証されません。
イメージテストの限定的なサポート
効果的なテスト自動化フレームワークを構築して維持することが、テスト自動化プロジェクトの成功の鍵となります。テスト自動化フレームワークは、自動テストを正常に実行するための 6 つの主要コンポーネントで構成されます。それらが何であるかを見てみましょう:
テスト対象のシステム ターゲット システムは、テスト フレームワークの最初のコンポーネントです。ただし、自動テストから目的の出力を得るには、システムのサブシステムが安定している必要があります。さらに、自動テストを開始する前に、これらのサブシステムが全体として適切に機能する必要があります。
テスト プラットフォームテスト プラットフォームは、アプリケーションがテストされるネットワーク インフラストラクチャです。自動化テストを実行するには、適切なネットワーク設定を実装する必要があります。これには、テスト環境のセットアップとテスト ケースの実行に不可欠なサーバー、ルーター、スイッチ、ハブ、および構成管理ユーティリティが含まれます。
テスト ケース ライブラリテスト ケースを作成するには、さまざまなツールが必要です。これらのツールの例には、テスト自動化ツール、サポート ツール、トラフィック生成、監視ツールなどが含まれます。失敗したテスト ケースで捕捉された欠陥を自動的に報告するには、テスト自動化ツールとサポート ツールを統合することが重要です。 Test Factory と呼ばれるサポート ツールは、自動テストの傾向と結果パターンを提供できます。
自動テストの実践テスト ケース ライブラリとツールを利用してテスト ケースを自動化する方法を文書化することが重要です。自動テスト用の標準テスト ケース テンプレートを維持することもお勧めします。これにより、さまざまなテスターが作成したすべての自動テスト ケースにわたる一貫性が確保されます。すべてのユーティリティのリストとその使用方法のガイドラインを作成すると、テストの効率が向上します。さらに、テスト ケース ライブラリを保守する手順を文書化する必要があります。
テストツールテストケースを作成するには、さまざまなツールが必要です。これらのツールの例には、テスト自動化ツール、サポート ツール、トラフィック生成、監視ツールなどが含まれます。テスト自動化ツールとサポート ツールを統合することは、失敗したテスト ケースで捕捉された欠陥を自動的にレポートするために重要です。 Test Factory と呼ばれるサポート ツールは、自動テストの傾向と結果パターンを提供できます。
試験管理者
テスト管理者は、自動テストの実行を担当する人です。彼は次のタスクを担当します。
テストプラットフォームの管理
ツールとテスト ケース ライブラリ。
テストのガイドラインを提供する
テンプレートのコレクションを維持する
テスト ケース ライブラリを使用してテスト スクリプトを作成するテスターを支援します。
ツールの新規ユーザーにドキュメント ガイドを提供し、ツールのベンダーやユーザーと協力します。
Selenium には、さまざまな自動化プロジェクトのニーズを満たすさまざまなタイプのフレームワークがあります。
Selenium Web ドライバーには、テスト ケースを自動化するための 3 種類のフレームワークがあります。
このセクションでは、Selenium のハイブリッド フレームワークについてのみ説明します。
ハイブリッド フレームワークは、データ駆動型フレームワークとキーワード駆動型フレームワークを組み合わせたもので、前述したフレームワーク タイプのいずれかを含む場合もあります。これらの個々のフレームワークの異なる構造を利用し、それらを統合してより効果的なフレームワークを構築します。
ここでは、キーワードとテスト データの両方が外部ソースから取得されます。ユーザーは、スプレッドシートを使用してテスト ケースを管理しながら、別の Java クラス ファイルでキーワードを管理します。 TestNG フレームワークをテスト データのデータ プロバイダーとして使用できます。
Selenium のこのハイブリッド フレームワークは、キーワード駆動のフレームワークによく似ています。 ExecuteTest.java ファイルを HybridExecuteTest.java ファイルに置き換えるだけで、更新する必要はありません。この HybridExecuteTest.java ファイルには、キーワードのすべてのコードとデータ プロバイダーの概念が含まれています。
現在のペースの速いソフトウェア開発ライフサイクルでは、テスト自動化が重要な役割を果たしています。
ソフトウェアテストの速度と生産性を維持する上で不可欠な役割を果たします。自動化フレームワークは、テスト ケースの開発と実行に理想的な環境を提供することで、この作業をさらに簡素化します。プロジェクトの自動化フレームワークを選択するときは、柔軟性が高く、広範なアプリケーションと言語をサポートするフレームワークを探す必要があります。これにより、チーム メンバーは、背景やスキル セットに関係なく、テスト プロセスに効果的に貢献できるようになります。