使用 Selenium 执行 UI 测试

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

作为发布管道的一部分执行用户界面 (UI) 测试是检测意外更改最佳方法,并且不会很困难。 本文介绍如何在持续部署发布和测试自动化期间使用 Selenium 测试网站。 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. 创建测试。 例如,以下代码创建一个名为 MySeleniumTests 的默认类,该类在 Bing.com 网站上执行简单测试。 将 TheBingSearchTest 函数的内容替换为测试 Web 应用或网站所需的 Selenium 代码。 将 SetupTest 函数中的 browser 赋值更改为要用于测试的浏览器。

    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 测试,并检查其是否正常工作。

定义生成管道

需要持续集成 (CI) 生成管道来生成 Selenium 测试。 有关详细信息,请参阅生成适用于 Windows 的 .NET 桌面应用

创建 Web 应用

需要 Web 应用才能进行测试。 可以使用现有应用,也可以在持续部署 (CD) 发布管道中部署一个应用。 前面的代码示例针对 Bing.com 运行测试。 有关如何设置自己的发布管道以部署 Web 应用的详细信息,请参阅部署到 Azure Web 应用

决定如何部署和测试应用

可以使用 Azure 中的 Microsoft 托管代理或安装在目标服务器上的自托管代理来部署和测试应用。

  • 使用 Microsoft 托管代理时,应使用 Windows 代理上预安装的 Selenium Web 驱动程序(名为 Hosted VS 20xx 的代理),因为它们与 Microsoft 托管代理映像上安装的浏览器版本兼容。 可以从名为 IEWebDriver (Internet Explorer)、ChromeWebDriver (Google Chrome) 和 GeckoWebDriver (Firefox) 的环境变量中获取包含这些驱动程序的文件夹的路径。 其他代理(如 Linux、Ubuntu 和 macOS 代理)上预先安装驱动程序。 另请参阅 UI 测试注意事项

  • 使用在目标服务器上部署的自托管代理时,必须将代理配置为在启用自动登录的情况下以交互方式运行。 请参阅生成和发布代理UI 测试注意事项

在发布中包含测试

  1. 如果没有用于部署 Web 应用的现有发布管道:

    • 在 Azure DevOps 的 Azure Pipelines 部分中打开“发布”页,或在 TFS 中打开“生成和发布”中心(请参阅 Web 门户导航),选择 + 图标,然后选择“创建发布管道”。

      创建新的发布管道

    • 选择“Azure 应用服务部署”模板,然后选择“应用”。

    • 在“管道”选项卡的“工件”部分中,选择“+ 添加”。 选择生成工件,然后选择“添加”。

      选择工件

    • 在“管道”选项卡的“工件”部分选择“连续部署触发器”图标。在“持续部署触发器”窗格中,启用触发器,以便从每个生成创建新发布。 为默认分支添加筛选器。

      配置连续部署

    • 打开“任务”选项卡,选择“阶段 1”部分,并输入订阅信息以及要在其中部署应用和测试的 Web 应用的名称。 这些设置将应用于部署 Azure 应用服务任务。

      配置变量

  2. 如果要将应用和测试部署到托管代理的目标计算机未安装 Visual Studio 的环境:

    • 在发布管道的“任务”选项卡中,选择“在代理上运行”部分中的 + 图标。 选择“Visual Studio 测试平台安装程序”任务,然后选择“添加”。 将所有设置保留为默认值。

      添加 Visual Studio 测试平台安装程序任务

      可以使用搜索文本框更轻松地查找任务。

  3. 在发布管道的“任务”选项卡中,选择“在代理上运行”部分中的 + 图标。 选择“Visual Studio 测试”任务,然后选择“添加”。

    添加 Visual Studio 测试任务

  4. 如果将“Visual Studio 测试平台安装程序”任务添加到管道,请将“Visual Studio 测试”任务的“执行选项”部分中的“测试平台版本”设置更改为“由工具安装程序安装”。

    设置测试平台版本

    如何将参数从生成管道传递给测试代码?

  5. 保存发布管道并启动新发布。 为此,可以排队新的 CI 生成,或者从发布管道中的“发布”下拉列表中选择“创建发布”。

    创建新的发布

  6. 要查看测试结果,请从“发布”页打开发布摘要,然后选择“测试”链接。

后续步骤