Selenium を使用した UI テスト

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

リリース パイプラインの一部としてユーザー インターフェイス (UI) テストを実行することは、予期しない変更を検出する効果的な方法であり、決して難しくはありません。 このトピックでは、Selenium を使用して、継続的デプロイのリリースとテストの自動化中に Web サイトをテストする方法について説明します。 UI テストの実行時に適用される特別な考慮事項については、「UI テストの考慮事項」を参照してください。

通常は、ビルド ワークフローで単体テストを実行し、アプリをデプロイした後 (通常は QA 環境に) リリース ワークフローで機能 (UI) テストを実行します。

Selenium ブラウザーの自動化の詳細については、次を参照してください。

テスト プロジェクトを作成する

Selenium テスト用にはテンプレートがないため、単体テスト テンプレートを使用するのが最も簡単です。 これにより、テスト フレームワークの参照が自動的に追加され、Visual Studio テスト エクスプローラーからテストを実行し、結果を表示できるようになります。

  1. Visual Studio で [ファイル] メニューを開き、[新しいプロジェクト][テスト][単体テスト プロジェクト] の順に選択します。 または、ソリューションのショートカット メニューを開き、[追加][新しいプロジェクト][単体テスト プロジェクト] の順に選択します。

  2. プロジェクトが作成されたら、テストを実行するためにブラウザーで使用される Selenium およびブラウザー ドライバーの参照を追加します。 単体テスト プロジェクトのショートカット メニューを開き、[NuGet パッケージの管理] を選択します。 次のパッケージをご利用のプロジェクトに追加します。

    • Selenium.WebDriver
    • Selenium.Firefox.WebDriver
    • Selenium.WebDriver.ChromeDriver
    • Selenium.WebDriver.IEDriver

    ブラウザー ドライバー パッケージをソリューションに追加

  3. テストを作成します。 たとえば、次のコードでは、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();
        }
      }
    }
    
  4. テスト エクスプローラーを使用して Selenium テストをローカルで実行し、動作することをチェックします。

ビルド パイプラインを定義する

Selenium テストをビルドする継続的インテグレーション (CI) ビルド パイプラインが必要です。 詳細については、Windows 向け .NET デスクトップ アプリのビルドに関するページを参照してください。

Web アプリを作成する

テストする Web アプリが必要です。 既存のアプリを使用することも、継続的デプロイ (CD) リリース パイプラインにデプロイすることもできます。 上記のコード例では、Bing.com に対してテストを実行します。 独自のリリース パイプラインを設定して Web アプリをデプロイする方法の詳細については、Azure Web Apps へのデプロイに関するページを参照してください。

アプリをデプロイしてテストする方法を決定する

Azure の Microsoft ホステッド エージェントを使用するか、ターゲット サーバーにインストールするセルフホステッド エージェントを使用して、アプリをデプロイしてテストできます。

  • Microsoft ホステッド エージェントを使用する場合は、Windows エージェント (Hosted VS 20xx という名前のエージェント) にプレインストールされている Selenium Web ドライバーを使用する必要があります。これは、Microsoft ホステッド エージェント イメージにインストールされているブラウザーバージョンと互換性があるためです。 これらのドライバーを含むフォルダーへのパスは、IEWebDriver (Internet Explorer)、ChromeWebDriver (Google Chrome)、および GeckoWebDriver (Firefox) という名前の環境変数から取得できます。 ドライバーは、Linux、Ubuntu、macOS エージェントなどの他のエージェントにはプレインストール されていません 。 「UI テストの考慮事項」も参照してください。

  • ターゲット サーバーにデプロイするセルフホステッド エージェントを使用する場合、自動ログオンを有効にして対話形式で実行するようにエージェントを構成する必要があります。 ビルド エージェントとリリース エージェントに関するページと「UI テストの考慮事項」を参照してください。

リリースにテストを含める

  1. Web アプリをデプロイする既存のリリース パイプラインがない場合は、次の手順を実行します。

    • Azure DevOps の [Azure Pipelines] セクションまたは TFS の [ビルド リリース] ハブの [リリース] ページを開き (Web ポータルのナビゲーションに関するページを参照)、+ アイコンを選択し、[リリース パイプラインの作成] を選択します。

      新しいリリース パイプラインを作成

    • [Azure App Service デプロイ] テンプレートを選択し、[適用] を選択します。

    • [パイプライン] タブの [成果物] セクションで、[+ 追加] を選択します。 ビルド成果物を選び、[追加] を選択します。

      成果物を選ぶ

    • [パイプライン] タブの [成果物] セクションにある [継続的デプロイ トリガー] アイコンを選択します。[継続的デプロイ トリガー] ウィンドウでトリガーを有効にして、すべてのビルドから新しいリリースが作成されるようにします。 既定のブランチのフィルターを追加します。

      継続的デプロイを構成

    • [タスク] タブを開いて [ステージ 1] セクションを選択し、アプリとテストをデプロイする Web アプリのサブスクリプション情報と名前を入力します。 これらの設定は、Azure App Service のデプロイ タスクに適用されます。

      変数を構成

  2. エージェントをホストするターゲット マシンに Visual Studio がインストールされていない環境にアプリとテストをデプロイする場合には、次の手順を実行します。

    • リリース パイプラインの [タスク] タブで、[エージェントで実行] セクションの + アイコンを選択します。 Visual Studio テスト プラットフォームインストーラー タスクを選択し、[追加] を選択します。 その他すべての設定は既定値のまま残しておきます。

      Visual Studio テスト プラットフォーム インストーラー タスクを追加

      検索テキストボックスを使用すると、タスクをより簡単に見つけることができます。

  3. リリース パイプラインの [タスク] タブで、[エージェントで実行] セクションの + アイコンを選択します。 Visual Studio テスト タスクを選び、[追加] を選択します。

    Visual Studio テスト タスクを追加

  4. パイプラインに Visual Studio テスト プラットフォーム インストーラー タスクを追加した場合は、Visual Studio テスト タスク[実行オプション] セクションの [テスト プラットフォームのバージョン] 設定を [ツール インストーラーによってインストール] に変更します。

    テスト プラットフォーム バージョンを設定

    ビルド パイプラインからテスト コードにパラメーターを渡すにはどうすればよいですか?

  5. リリース パイプラインを保存し、新しいリリースを開始します。 これを行うには、新しい CI ビルドをキューに入れるか、リリース パイプラインの [リリース] ドロップダウン リストから [リリースの作成] を選択します。

    新しいリリースを作成

  6. テスト結果を表示するには、[リリース] ページから リリースの概要を開き、[テスト] リンクを選択します。

次のステップ