测试主机部署

这些扩展控制 MTP 部署和启动测试主机的方式和位置。 它们使用实验性 ITestHostLauncher 扩展点来控制测试主机的部署和启动。

小窍门

使用 Microsoft.Testing.Platform.MSBuild 时,安装该扩展的 NuGet 包以自动注册该扩展。 MSTest、NUnit 和 xUnit 运行器会以传递方式包含 Microsoft.Testing.Platform.MSBuild。 如果禁用生成的入口点,请调用 AddSelfRegisteredExtensions 以注册 MSBuild 贡献的包。

打包的应用部署

Microsoft.Testing.Extensions.PackagedApp 扩展根据其生成输出布局注册一个打包的 Windows 测试主机,并通过应用程序用户模型 ID (AUMID) 将其激活。

包在 MTP 2.3 中引入。 从 MTP 2.5 开始,它支持打包的完全信任主机和 AppContainer 主机端到端,包括:

  • 已打包的完全受信任 WinUI 3 应用。
  • 使用 UseUwp的新式 UWP 应用。
  • 面向 uap10.0的经典 UWP 应用。
  • 设置了 TrustLevel="appContainer" 的 WinUI 3 packagedClassicApp 主机。

MSTest.Sdk 4.5 或更高版本会自动配置此扩展和所需的完全信任应用模型 sidecar。 有关应用程序设置和运行命令,请参阅 使用 MSTest 和 MTP 测试 UWP 和 WinUI 3 应用。

Caution

从 MTP 2.4 开始, Microsoft.Testing.Extensions.PackagedApp 遵循 MTP 版本,其公共注册 API 不再具有实验性。 泛型 ITestHostLauncher 扩展点仍然是实验性的,将来的版本中可能会更改。

满足要求

在使用扩展之前,请满足以下要求:

  • 对于 WinUI 3 打包应用,将目标 Windows 平台版本设置为 10.0.19041.0 或更高版本。
  • 若要注册未签名的生成输出布局文件,请启用开发人员模式或配置侧载。
  • 对于 UWP,请使用 Visual Studio 中的桌面版 MSBuild,并安装 UWP 工作负载和所需的 Windows SDK。
  • 从非提升权限的控制器进程运行 AppContainer 测试主机。

了解包激活

对于打包的应用,启动器:

  1. 定位用于描述测试可执行文件的 AppxManifest.xml。
  2. 注册当前用户的生成输出布局。
  3. 解析所选清单应用程序的 AUMID。
  4. 激活应用程序并将其连接到 MTP 控制器。

对于packagedClassicApp和win32App主机,Windows通过正常进程参数数组提供 MTP 参数。 此行为也适用于使用 AppContainer 的 packagedClassicApp。

对于 UWP windowsApp,Windows 会通过 LaunchActivatedEventArgs.Arguments 提供一个不透明的激活字符串。 在 OnLaunched 中,在创建 MTP 生成器之前调用 PackagedAppExtensions.GetTestApplicationArguments。

连接 AppContainer 主机

AppContainer 令牌包含受限包 SID。 仅允许当前用户访问的命名管道会拒绝 AppContainer 进程,即使该进程属于同一已登录用户也是如此。

在 MTP 2.5 或更高版本中,打包应用启动器派生所选应用程序的确切包 SID,并要求 MTP 向该 SID 授予控制器和扩展管道的最低客户端权限。 该扩展不会授予 ALL APPLICATION PACKAGES 权限、降低该管道的完整性级别,也不需要网络环回豁免。

sidecar 通过软件包 LocalState 传输控制器元数据。 它还会在沙盒主机退出后,将 TRX、转储、诊断和重试文件从程序包专属存储复制到所请求的结果目录中。

控制自动激活

默认情况下,仅当启动器找到描述测试应用程序的包清单时,启动器才启用自身。 未打包的 WinUI 3 应用或普通控制台测试应用保留在直接启动路径上。

使用 TESTINGPLATFORM_PACKAGEDAPP_LAUNCHER 来覆盖包检测:

Value Behavior
auto 或取消设置 仅对打包布局启用。
always 为任何布局启用,包括你希望在启动前部署的松散布局。
never 禁用打包的应用启动器。

使用 TESTINGPLATFORM_PACKAGEDAPP_PIPEAUTHORIZATION 来覆盖 package-SID 授权:

Value Behavior
auto 或取消设置 仅当清单声明 AppContainer 应用程序时,才授权包 SID。
always 为任何打包布局请求 package-SID 授权。
never 保留仅限当前用户的管道授权。

手动注册扩展

如果不使用自动 MSBuild 注册,请在 MTP 生成器中注册扩展:

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddPackagedAppDeployment();

如果应用程序已经调用了 AddSelfRegisteredExtensions 并引用了该包,则不要调用 AddPackagedAppDeployment。 MTP 运行只能注册一个测试主机启动器。