Selenium は、開発者やテスターがブラウザーのアクションを自動化し、Web アプリケーションを検証できるようにする、広く使用されているオープンソース ツールです。 Selenium は複数のプログラミング言語やブラウザ プラットフォームとの互換性があるため、多くのソフトウェア テスト チームにとって頼りになる選択肢であることは驚くことではありません。
Selenium を使用すると、Java、 Python 、C#、Ruby などのさまざまなプログラミング言語で自動テスト スクリプトを作成できます。 Chrome、Firefox、Safari、IE などの複数のブラウザ プラットフォームをサポートします。
Selenium の課題の 1 つは、テスト ケースの実行に時間がかかることです。この実践的な Selenium チュートリアルでは、Launchable の予測テスト選択を適用する方法など、 Selenium を使用してテストの実行を高速化するのに役立つ標準および高度なヒントとテクニックを取り上げます。このため、Python 言語で Selenium を使用することに焦点を当てます。
開始するには、システムに Python と Selenium がインストールされていることを確認してください。次の bash コマンドを使用して Selenium をインストールできます: pip install selenium
Selenium テスト ケースの実行速度を向上させるには、次の 4 つの標準的なベスト プラクティスに従ってください。これらはすべて、テストの実行時間を大幅に短縮し、自動テスト プロセスの効率を高めることを目的としています。
テストケースを最適化する
テスト ケースに優先順位を付けて、最初に重要な機能に焦点を当てます。
大規模なテスト スイートを、より管理しやすい小さなチャンクに分割します。
冗長で古いテストを削除します。
効率的なコードを使用する
モジュール化、DRY (Don't Reply Yourself) 原則、適切なコメントなどのコーディングのベスト プラクティスに従ってください。
効率的なアルゴリズムとデータ構造を使用してコードを最適化します。
コードを定期的にレビューしてリファクタリングして、効率を維持します。
ページの読み込み時間を短縮する
重い画像、ビデオ、その他のメディア ファイルの使用は最小限に抑えます。
ページ上にすぐに表示されないコンテンツには遅延読み込みを使用します。
JavaScript および CSS ファイルを縮小および圧縮して最適化します。
並列テストの実装
複数のテスト ケースを同時に実行して、全体のテスト時間を短縮します。
Selenium Grid などのツールを使用して、複数のマシンまたはブラウザーにテストを分散します。
これら 4 つのベスト プラクティスはすべて Selenium テストの効率を高めますが、最適化できるのはある程度までです。多くのチームは、テスト時間を短縮するために、テストを同時に実行する並列テストに依存しています。一般的な慣行ではありますが、それは有限です。テストを並列化できるのは、マシンの可用性のしきい値に合わせてのみです。並列テストの力は 、動的テスト サブセットと組み合わせると真に発揮されます。
Selenium は Web アプリケーションの自動テストに広く使用されていますが、テスターはテスト実行速度の遅さに直面することがよくあります。 Selenium テストの実行の遅延は、アプリケーションのサイズや複雑さ、ネットワークの遅延、テスト スイートの肥大化など、さまざまな理由によって影響を受ける可能性があります。
これらの課題を克服するには、次の実践的なコード例を含む高度なテクニックを使用して Selenium テストを高速化し、独自の Selenium テストに実装することができます。
ヘッドレス ブラウザを使用する場合、物理的なブラウザ ウィンドウを開く必要がないため、使用されるシステム リソースが少なくなります。これにより、テスト時間が短縮され、システム全体のパフォーマンスが向上します。
ヘッドレス ブラウジング Python の例:
from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('--headless') driver = webdriver.Chrome(options=options)
ブラウザーのキャッシュにより Web サイトのデータがブラウザーのキャッシュ メモリに保存され、頻繁にアクセスする Web サイトの読み込みが高速化されることがわかっています。 Selenium テストでブラウザー キャッシュを有効にすると、静的コンテンツの読み込みにかかる時間が短縮され、テストがより高速かつ正確になると同時に、テストの全体的なコストも削減できます。
ブラウザーのキャッシュを有効にして、テスト中の静的コンテンツの読み込み時間を節約します。
ブラウザのオプションでキャッシュ設定を構成する
ブラウザキャッシュ設定の構成 Python の例:
options = webdriver.ChromeOptions() options.add_argument('--disk-cache-dir=/path/to/cache')
ページ オブジェクト モデルでこれらの手法を使用すると、Selenium テストの効率と保守性が向上し、その結果、テストの実行が高速になり、テスト結果の信頼性が高まります。
可能な場合は、一意で安定した要素識別子 (ID、名前、または CSS クラス) を使用してください。
必要に応じて XPath または CSS セレクターを使用しますが、過度に複雑な式や長い式の使用は避けてください。
ページ オブジェクト モデル (POM) を使用して、テストのロジックとコードを UI から分離する、再利用可能なモジュール式のテスト構造を作成します。
sleep() ステートメントはテスト サイクルに不必要な遅延を追加し、予測できない結果を引き起こす可能性があるため、使用は避けてください。
特にアプリケーションの UI が頻繁に変更される場合は、要素ロケーターを定期的に確認して更新し、要素ロケーターが依然として正確で安定していることを確認します。
ブラウザ開発者ツールを使用して、ページの HTML 構造を検査し、ロケーターとして使用できる一意の要素属性を特定します。
Selenium で明示的な待機を使用して、動的なページ待機を導入します。明示的な待機では、テストの次のステップに進む前に特定の条件を満たす必要があるため、タイミングの問題を回避し、テストの信頼性を向上させることができます。
固定スリープ時間を使用するのではなく、明示的な待機を使用して、特定の条件が満たされるまでテストの実行を一時停止します。
Selenium の WebDriverWait クラスと ExpectedConditions クラスを利用します。
動的ページ待機 Python の例:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "example_id")) )
これらの高度なテスト最適化手法は、Selenium テストの実行をより効率的にすることができますが、肥大化したテスト スイートを解決するものではありません。品質を犠牲にすることなく Selenium テストの実行時間を真に短縮するには、テストをより早く頻繁に行うことが唯一の解決策です。
Selenium テスト スイートは、さまざまな種類のソフトウェアの製品品質を保証するために不可欠な部分です。しかし、多くのチームは共通の問題に直面しています。それは、長時間にわたるテストに貴重な時間が費やされ、その結果、テスト頻度が減り、リリースが遅れるということです。
Selenium テストは複雑で実行速度が遅いため、通常、ソフトウェア配信ライフサイクルの後半で実行されます。これにより、開発者へのフィードバックが数時間から数日、場合によっては数週間も遅れることになります。テストが失敗するまでに、開発者は変更のコンテキストを忘れている可能性があり、問題の解決に余分な時間がかかります。さらに、そのようなテストを実行すると、チームのテスト予算が使い果たされる可能性があります。
Launchable は、動的テスト サブセットをインテリジェントに生成することで、 Selenium の実行時間を短縮します。より迅速でタイムリーなフィードバックを得るために、すべてのプル リクエストで実行する Selenium テストのサブセットを選択します。
Launchable のテスト インテリジェンス プラットフォームは、機械学習モデルを使用して、受信した変更に応じて、テスト スイート内のどのテストが失敗する可能性があるかを予測します。この実用的なリスクベースのアプローチにより、配信速度と品質を維持しながらテスト時間が短縮され、コストが削減されます。
チームはテストに優先順位を付けて、最も重要なテストをより頻繁に実行できるようにし、製品の品質を向上させ、リスクを軽減できます。
Launchable の主な統合ポイントは、テスト フレームワーク自体ではなく、チームのビルド ツールまたはテスト ランナーとの統合です。したがって、Selenium フレームワークを使用している場合は、テストの開始にどのツールを使用するかを決定することが重要です。
Launchable の予測テスト選択を利用するために、Selenium で特別に行う必要はありません。必要なのは、テスト ランナー用に Launchable をセットアップすることだけです。テストを変更する必要はありません。
起動可能なセットアップは簡単です。
https://app.launchableinc.com/signup で Launchable アカウントにサインアップします。
ユーザー アカウントを作成し、電子メール アドレスを確認した後 (必要な場合)、会社の組織とテスト スイートのワークスペースを作成するように求められます。
次に、テスト データを Launchable に送信し始めます。
Launchable を使用すると、品質を犠牲にすることなく、早期フィードバックと迅速なリリースのメリットを享受できます。今すぐ打ち上げ可能な宇宙飛行士とつながりましょう!
Selenium は強力なツールですが、Selenium テストは、その長さと複雑さのため、テスト パイプラインの後半にプッシュされることがよくあります。共有チュートリアルを使用して Selenium テストを最適化し、テスト サイクルの早い段階で適切な Selenium テストを実行すると、テスト時間が短縮されます。 Launchable は、使用しているテスト オーケストレーターに関係なく、Selenium テストとシームレスに統合するため、最も重要で関連性の高いテストの選択を開始し、テスト ワークフローを最適化し、今すぐにでも迅速なフィードバックを得ることができます。
この記事はもともとLaunchableinc.comで公開されたものです