Selenium を使用した UI テスト
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
リリース パイプラインの一部としてユーザー インターフェイス (UI) テストを実行することは、予期しない変更を検出する効果的な方法であり、決して難しくはありません。 この記事では、Selenium を使用して、継続的デプロイのリリースとテスト自動化中に Web サイトをテストする方法について説明します。 UI テストの実行時に適用される特別な考慮事項については、「UI テストの考慮事項」を参照してください。
通常は、ビルド ワークフローで単体テストを実行し、アプリをデプロイした後 (通常は QA 環境に) リリース ワークフローで機能 (UI) テストを実行します。
Selenium ブラウザーの自動化の詳細については、次を参照してください。
テスト プロジェクトを作成する
Selenium テスト用のテンプレートがないため、開始する最も簡単な方法は、単体テスト テンプレートを使用することです。 これにより、テスト フレームワークの参照が自動的に追加され、Visual Studio Test Explorer から結果を実行して表示できるようになります。
Visual Studio で [ファイル] メニューを開き、[新しいプロジェクト]、[テスト]、[単体テスト プロジェクト] の順に選択します。 または、ソリューションのショートカット メニューを開き、[追加] 、[新しいプロジェクト]、[単体テスト プロジェクト] の順に選択します。
プロジェクトが作成されたら、テストを実行するためにブラウザーで使用される Selenium およびブラウザー ドライバーの参照を追加します。 単体テスト プロジェクトのショートカット メニューを開き、[NuGet パッケージの管理] を選択します。 次のパッケージをご利用のプロジェクトに追加します。
- Selenium.WebDriver
- Selenium.Firefox.WebDriver
- Selenium.WebDriver.ChromeDriver
- Selenium.WebDriver.IEDriver
テストを作成します。 たとえば、次のコードでは、Bing.com Web サイトで単純なテストを実行する MySeleniumTests という名前の既定のクラスを作成します。 TheBingSearchTest 関数の内容を、Web アプリまたは Web サイトのテストに必要な Selenium コードに置き換えます。 SetupTest 関数のブラウザーの割り当てを、テストに使用するブラウザーに変更します。
using System; using System.Text; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Firefox; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.IE; namespace SeleniumBingTests { /// <summary> /// Summary description for MySeleniumTests /// </summary> [TestClass] public class MySeleniumTests { private TestContext testContextInstance; private IWebDriver driver; private string appURL; public MySeleniumTests() { } [TestMethod] [TestCategory("Chrome")] public void TheBingSearchTest() { driver.Navigate().GoToUrl(appURL + "/"); driver.FindElement(By.Id("sb_form_q")).SendKeys("Azure Pipelines"); driver.FindElement(By.Id("sb_form_go")).Click(); driver.FindElement(By.XPath("//ol[@id='b_results']/li/h2/a/strong[3]")).Click(); Assert.IsTrue(driver.Title.Contains("Azure Pipelines"), "Verified title of the page"); } /// <summary> ///Gets or sets the test context which provides ///information about and functionality for the current test run. ///</summary> public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } [TestInitialize()] public void SetupTest() { appURL = "http://www.bing.com/"; string browser = "Chrome"; switch(browser) { case "Chrome": driver = new ChromeDriver(); break; case "Firefox": driver = new FirefoxDriver(); break; case "IE": driver = new InternetExplorerDriver(); break; default: driver = new ChromeDriver(); break; } } [TestCleanup()] public void MyTestCleanup() { driver.Quit(); } } }
テスト エクスプローラーを使用して Selenium テストをローカルで実行し、動作することをチェックします。
ビルド パイプラインを定義する
Selenium テストをビルドする継続的インテグレーション (CI) ビルド パイプラインが必要です。 詳細については、「Windows用 .NETデスクトップ アプリを構築する」を参照してください。
Web アプリを作成する
テストするには Web アプリが必要です。 既存のアプリを使用することも、継続的デプロイ (CD) リリース パイプラインにデプロイすることもできます。 前のコード例では、Bing.com に対してテストを実行します。 独自のリリース パイプラインを設定して Web アプリをデプロイする方法の詳細については、Azure Web Apps へのデプロイに関するページを参照してください。
アプリのデプロイ方法とテスト方法を決定する
Azure の Microsoft ホステッド エージェントを使用するか、ターゲット サーバーにインストールするセルフホステッド エージェントを使用して、アプリをデプロイしてテストできます。
Microsoft ホステッド エージェントを使用する場合は、Microsoft ホステッド エージェント イメージにインストールされているブラウザ バージョンと互換性があるため、Windows エージェント (Hosted VS 20xx という名前のエージェント) にプレインストールされているSelenium Web ドライバーを使用する必要があります。 これらのドライバーを含むフォルダーへのパスは、
IEWebDriver
(Internet Explorer)、ChromeWebDriver
(Google Chrome)、およびGeckoWebDriver
(Firefox) という名前の環境変数から取得できます。 ドライバは、Linux、Ubuntu、macOS エージェントなどの他のエージェントにはプリインストールされていません。 「UI テストの考慮事項」も参照してください。ターゲット サーバーに展開するセルフホステッド エージェントを使用する場合は、自動ログオンを有効にして対話形式で実行するようにエージェントを構成する必要があります。 ビルド エージェントとリリース エージェントに関するページと「UI テストの考慮事項」を参照してください。
リリースにテストを含める
Web アプリをデプロイする既存のリリース パイプラインがない場合は、次の手順を実行します。
Azure DevOps の [Azure Pipelines] セクションまたは TFS の [ビルド リリース] ハブの [リリース] ページを開き (Web ポータルのナビゲーションに関するページを参照)、+ アイコンを選択し、[リリース パイプラインの作成] を選択します。
[Azure App Service デプロイ] テンプレートを選択し、[適用] を選択します。
[パイプライン] タブの [成果物] セクションで、[+ 追加] を選択します。 ビルド成果物を選び、[追加] を選択します。
[パイプライン] タブの [成果物] セクションにある [継続的デプロイ トリガー] アイコンを選択します。[継続的デプロイ トリガー] ウィンドウでトリガーを有効にして、すべてのビルドから新しいリリースが作成されるようにします。 既定のブランチのフィルターを追加します。
[タスク] タブを開いて [ステージ 1] セクションを選択し、アプリとテストをデプロイする Web アプリのサブスクリプション情報と名前を入力します。 これらの設定は、Azure App Service のデプロイ タスクに適用されます。
エージェントをホストする対象のコンピューターに Visual Studio がインストールされていない環境にアプリとテストをデプロイする場合:
リリース パイプラインの [タスク] タブで、[エージェントで実行] セクションの + アイコンを選択します。 Visual Studio テスト プラットフォームインストーラー タスクを選択し、[追加] を選択します。 その他すべての設定は既定値のまま残しておきます。
検索テキストボックスを使用すると、タスクをより簡単に見つけることができます。
リリース パイプラインの [タスク] タブで、[エージェントで実行] セクションの + アイコンを選択します。 Visual Studio テスト タスクを選び、[追加] を選択します。
パイプラインに Visual Studio テスト プラットフォーム インストーラー タスクを追加した場合は、Visual Studio テスト タスクの [実行オプション] セクションの [テスト プラットフォームのバージョン] 設定を [ツール インストーラーによってインストール] に変更します。
リリース パイプラインを保存し、新しいリリースを開始します。 これを行うには、新しい CI ビルドをキューに入れるか、リリース パイプラインの [リリース] ドロップダウン リストから [リリースの作成] を選択します。
テスト結果を表示するには、[リリース] ページから リリースの概要を開き、[テスト] リンクを選択します。