UI 测试注意事项

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

在 CI/CD 管道中运行自动测试时,可能需要特殊配置才能运行 UI 测试,例如 Selenium、Appium 或已编码的 UI 测试。 本文章介绍运行 UI 测试时的典型注意事项。

先决条件

熟悉代理以及如何在 Windows 上部署代理

使用无外设模式还是可见 UI 模式?

针对 Web 应用运行 Selenium 测试时,可以通过两种方式启动浏览器:

  1. 无外设模式。 在此模式下,浏览器可正常运行,但不会显示任何 UI 组件。 虽然这种模式对于浏览 Web 没有用处,但对于在 CI/CD 管道中以无人值守的方式运行自动测试却很有用。 ChromeFirefox 浏览器可以在无外设模式下运行。

    由于不呈现 UI,此模式通常在计算机上消耗的资源较少,而且测试运行速度更快。 因此,有时可以在同一台计算机上并行运行更多测试,以减少总测试执行时间。

    在此模式下可以捕获屏幕截图并将其用于故障排除。

    注意

    Microsoft Edge 浏览器目前无法在无外设模式下运行。

  2. 可见 UI 模式。 在此模式下,浏览器可正常运行并且会显示 UI 组件。 在 Windows 上以此模式运行测试时,需要对代理进行特殊配置

如果你正在针对桌面应用程序运行 UI 测试,例如使用 WinAppDriver 运行 Appium 测试或运行编码的 UI 测试,则需要对代理进行特殊配置

提示

端到端 UI 测试通常运行时间较长。 使用可见 UI 模式时,根据测试框架,你可能无法在同一台计算机上并行运行测试,因为应用必须聚焦才能接收键盘和鼠标事件。 在这种情况下,可以通过在不同的计算机上并行运行测试来加速测试周期。 请参阅对任何测试运行程序并行运行测试使用 Visual Studio 测试任务并行运行测试

在可见 UI 模式下进行 UI 测试

需要对代理进行特殊配置才能在可见 UI 模式下运行 UI 测试。

使用 Microsoft 托管代理进行可见 UI 测试

Microsoft托管代理不支持的可见 UI 测试。 测试失败,并显示错误消息“元素不可交互”。 Microsoft托管代理支持无外设浏览器测试。

使用Microsoft托管代理的无外设模式 UI 测试

Microsoft托管代理已预配置用于 UI 测试和 Web 应用的 UI 测试。 Microsoft 托管的代理还预配置了可用于运行 Selenium 测试的流行浏览器和匹配的 Web 驱动程序版本。 浏览器和相应的 Web 驱动程序会定期更新。 要详细了解如何运行 Selenium 测试,请参阅使用 Selenium 进行 UI 测试

使用自托管 Windows 代理进行可见 UI 测试

配置为作为服务运行的代理只能使用无外设浏览器运行 Selenium 测试。 如果未使用无外设浏览器,或者正在针对桌面应用运行 UI 测试,则必须将 Windows 代理配置为作为启用了自动登录的交互式进程运行。

配置代理时,如果系统提示是否将其作为服务运行,请选择“否”。 然后,可以在后续步骤中为代理配置自动登录。 运行 UI 测试时,应用程序和浏览器将在自动登录设置中指定的用户上下文中启动。

如果使用远程桌面访问以自动登录方式运行代理的计算机,则直接断开连接远程桌面会导致计算机锁定,并且在此代理上运行的任何 UI 测试都可能会失败。 为避免故障,请在远程计算机上使用 tscon 命令从远程桌面断开连接。 例如:

%windir%\System32\tscon.exe 1 /dest:console

在此示例中,数字“1”是远程桌面会话的 ID。 此数字在不同的远程会话中可能不同,但可以在任务管理器中查看。 或者,若要自动查找当前会话 ID,请创建一个包含以下代码的批处理文件:

for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
  %windir%\System32\tscon.exe %%s /dest:console
)

保存该批处理文件并为其创建桌面快捷方式,然后将快捷方式属性更改为“以管理员身份运行”。 通过此快捷方式运行该批处理文件会从远程桌面断开连接,但会保留 UI 会话并允许 UI 测试运行。

为 Azure VM 中的代理预配 UI 测试

如果你正在 Azure 上预配虚拟机 (VM),可以通过开发测试实验室的代理工件获取用于 UI 测试的代理配置。

agentArtifactDTL

设置屏幕分辨率

在运行 UI 测试之前,可能需要调整屏幕分辨率,使应用可正常呈现。 为此,市场中提供了一个屏幕分辨率实用工具任务。 在管道中使用此任务可将屏幕分辨率设置为代理计算机支持的值。 默认情况下,此实用工具将分辨率设置为代理计算机支持的最佳值。

如果在使用屏幕分辨率任务时遇到故障,请确保将代理配置为在启用自动登录的情况下运行,并确保使用上述 tscon 命令安全断开连接所有远程桌面会话。

注意

屏幕分辨率实用工具任务在统一的生成/发布/测试代理上运行,无法与已弃用的运行功能测试任务配合使用。 解析 util 任务也不适用于 Azure 虚拟机。

UI 测试故障排除

以无人值守的方式运行 UI 测试时,捕获屏幕截图视频等诊断数据将有助于了解在遇到故障时应用程序所处的状态。

捕获屏幕截图

大多数 UI 测试框架都提供捕获屏幕截图的功能。 将测试结果发布到服务器时,收集的屏幕截图可用作这些结果的附件。

如果使用 Visual Studio 测试任务来运行测试,则必须将捕获的屏幕截图添加为结果文件,才能在测试报告中使用这些屏幕截图。 为此,请使用以下代码:

首先,确保在测试类中定义了 TestContext。 例如: public TestContext TestContext { get; set; }

使用 TestContext.AddResultFile(fileName); //Where fileName is the name of the file. 添加屏幕截图文件

如果使用发布测试结果任务来发布结果,则仅当使用 VSTest (TRX) 结果格式或 NUnit 3.0 结果格式时才能发布测试结果附件。

如果使用 JUnit 或 xUnit 测试结果,则无法发布结果附件。 这是因为,这些测试结果格式在结果架构中没有附件的正式定义。 可以改用以下方法之一发布测试附件。

  • 如果在生成 (CI) 管道中运行测试,可以使用复制和发布生成工件任务来发布在测试中创建的任何其他文件。 这些工件会显示在生成摘要的工件页中。

  • 使用 REST API 发布所需的附件。 可以在此 GitHub 存储库中找到代码示例。

捕获视频

如果使用 Visual Studio 测试任务来运行测试,可以捕获测试视频并将其作为测试结果的附件自动提供。 为此,必须在 .runsettings 文件中配置视频数据收集器,并且必须在任务设置中指定该文件。

runSettings

帮助和支持