使用 Selenium 执行 UI 测试
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
作为发布管道的一部分执行用户界面 (UI) 测试是检测意外更改最佳方法,并且不会很困难。 本文介绍如何在持续部署发布和测试自动化期间使用 Selenium 测试网站。 UI 测试注意事项中介绍了运行 UI 测试时适用的特殊注意事项。
通常,在生成工作流中运行单元测试,并在应用部署到 QA 环境后在发布工作流中运行功能 (UI) 测试。
有关 Selenium 浏览器自动化的详细信息,请参阅:
创建测试项目
由于没有用于 Selenium 测试的模板,因此最简单的入门方法是使用单元测试模板。 这会自动添加测试框架引用,使你能够从 Visual Studio 测试资源管理器中运行和查看结果。
在 Visual Studio 中,打开“文件”菜单并选择“新建项目”,然后选择“测试”,然后选择“单元测试项目”。 或者,打开解决方案的快捷菜单,依次选择“添加”、“新建项目”和“单元测试项目”。
创建项目后,添加浏览器用于执行测试的 Selenium 和浏览器驱动程序引用。 打开单元测试项目的快捷菜单,然后选择“管理 NuGet 包”。 将以下包添加到项目:
- Selenium.WebDriver
- Selenium.Firefox.WebDriver
- Selenium.WebDriver.ChromeDriver
- Selenium.WebDriver.IEDriver
创建测试。 例如,以下代码创建一个名为 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(); } } }
使用测试资源管理器在本地运行 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 测试注意事项。
在发布中包含测试
如果没有用于部署 Web 应用的现有发布管道:
在 Azure DevOps 的 Azure Pipelines 部分中打开“发布”页,或在 TFS 中打开“生成和发布”中心(请参阅 Web 门户导航),选择 + 图标,然后选择“创建发布管道”。
选择“Azure 应用服务部署”模板,然后选择“应用”。
在“管道”选项卡的“工件”部分中,选择“+ 添加”。 选择生成工件,然后选择“添加”。
在“管道”选项卡的“工件”部分选择“连续部署触发器”图标。在“持续部署触发器”窗格中,启用触发器,以便从每个生成创建新发布。 为默认分支添加筛选器。
打开“任务”选项卡,选择“阶段 1”部分,并输入订阅信息以及要在其中部署应用和测试的 Web 应用的名称。 这些设置将应用于部署 Azure 应用服务任务。
如果要将应用和测试部署到托管代理的目标计算机未安装 Visual Studio 的环境:
在发布管道的“任务”选项卡中,选择“在代理上运行”部分中的 + 图标。 选择“Visual Studio 测试平台安装程序”任务,然后选择“添加”。 将所有设置保留为默认值。
可以使用搜索文本框更轻松地查找任务。
在发布管道的“任务”选项卡中,选择“在代理上运行”部分中的 + 图标。 选择“Visual Studio 测试”任务,然后选择“添加”。
如果将“Visual Studio 测试平台安装程序”任务添加到管道,请将“Visual Studio 测试”任务的“执行选项”部分中的“测试平台版本”设置更改为“由工具安装程序安装”。
保存发布管道并启动新发布。 为此,可以排队新的 CI 生成,或者从发布管道中的“发布”下拉列表中选择“创建发布”。
要查看测试结果,请从“发布”页打开发布摘要,然后选择“测试”链接。