Implantação do host de teste

Essas extensões controlam como e onde o MTP implanta e inicia o host de teste. Eles usam o ponto de extensão experimental ITestHostLauncher para controlar a implantação e a inicialização do host de teste.

Dica

Quando você usa Microsoft. Testing.Platform.MSBuild, instale o pacote NuGet de uma extensão para registrar a extensão automaticamente. Os executores MSTest, NUnit e xUnit incluem Microsoft.Testing.Platform.MSBuild transitivamente. Se você desativar o ponto de entrada gerado, chame AddSelfRegisteredExtensions para registrar os pacotes fornecidos pelo MSBuild.

Implantação de aplicativo empacotado

A extensão Microsoft.Testing.Extensions.PackagedApp registra um host de teste do Windows empacotado a partir do layout de saída da compilação e o ativa por ID de Modelo de Usuário do Aplicativo (AUMID).

O pacote foi introduzido no MTP 2.3. A partir do MTP 2.5, passa a dar suporte, de ponta a ponta, a hosts empacotados de confiança total e AppContainer, incluindo:

  • Aplicativos WinUI 3 de confiança total empacotados.
  • Aplicativos UWP modernos que usam UseUwp.
  • Aplicativos UWP clássicos direcionados a uap10.0.
  • Hosts WinUI 3 packagedClassicApp que definem TrustLevel="appContainer".

O MSTest.Sdk 4.5 ou versão posterior configura automaticamente esta extensão e o sidecar necessário do modelo de aplicativo de confiança total. Para comandos de instalação e execução de aplicativos, consulte Testar aplicativos UWP e WinUI 3 com MSTest e MTP.

Caution

A partir do MTP 2.4, Microsoft.Testing.Extensions.PackagedApp segue a versão de lançamento do MTP e sua API de registro público não é mais experimental. O ponto de extensão genérico ITestHostLauncher permanece experimental e pode mudar em uma versão futura.

Atender aos requisitos

Atenda a esses requisitos antes de usar a extensão:

  • Defina como destino a versão da plataforma Windows 10.0.19041.0 ou posterior para um aplicativo WinUI 3 empacotado.
  • Para registrar um layout de saída de compilação não assinado, habilite o Modo de Desenvolvedor ou configure o carregamento lateral.
  • Para UWP, use o MSBuild para desktop do Visual Studio com a carga de trabalho UWP e o SDK do Windows necessário.
  • Executar hosts de teste do AppContainer a partir de um processo controlador sem privilégios elevados.

Entender a ativação do pacote

Para um aplicativo empacotado, o inicializador:

  1. Localiza o AppxManifest.xml que descreve o executável de teste.
  2. Registra o layout da saída da compilação para o usuário atual.
  3. Resolve o AUMID do aplicativo de manifesto selecionado.
  4. Ativa o aplicativo e o conecta ao controlador MTP.

Para packagedClassicApp e win32App hosts, Windows fornece argumentos MTP por meio da matriz de argumentos de processo normal. Esse comportamento também se aplica a um packagedClassicApp que usa AppContainer.

Para uma UWP windowsApp, o Windows fornece uma cadeia de caracteres de ativação opaca por meio de LaunchActivatedEventArgs.Arguments. Em OnLaunched, chame PackagedAppExtensions.GetTestApplicationArguments antes de criar o builder de MTP.

Conectar um host AppContainer

Um token AppContainer inclui um SID de pacote restrito. Um pipe nomeado que autoriza apenas o usuário atual rejeita o processo AppContainer mesmo quando ele pertence ao mesmo usuário conectado.

No MTP 2.5 ou em versões posteriores, o iniciador de aplicativo empacotado determina o SID exato do pacote do aplicativo selecionado e solicita ao MTP que conceda a esse SID os direitos mínimos de cliente nos pipes de controlador e extensão. A extensão não concede ALL APPLICATION PACKAGES, reduz o nível de integridade do pipe nem exige uma isenção de loopback de rede.

O sidecar transfere metadados do controlador por meio do pacote LocalState. Ele também copia os artefatos TRX, dump, diagnostic e retry do armazenamento de propriedade do pacote para o diretório de resultados solicitado após a saída do host em área restrita.

Controlar a ativação automática

Por padrão, o inicializador só se habilita quando encontra um manifesto de pacote que descreve o aplicativo de teste. Um aplicativo WinUI 3 não empacotado ou um aplicativo comum de teste de console continua usando o caminho de inicialização direta.

Use TESTINGPLATFORM_PACKAGEDAPP_LAUNCHER para ignorar a detecção de pacote:

Valor Behavior
auto ou não definido Habilitar somente para um layout empacotado.
always Habilite para qualquer layout, incluindo um layout flexível que você deseja implantar antes da inicialização.
never Desabilite o inicializador de aplicativo empacotado.

Use TESTINGPLATFORM_PACKAGEDAPP_PIPEAUTHORIZATION para substituir a autorização do package-SID:

Valor Behavior
auto ou não definido Autorize o SID do pacote somente quando o manifesto indicar um aplicativo AppContainer.
always Solicite a autorização do package-SID para qualquer layout empacotado.
never Mantenha a autorização do pipe somente para o usuário atual.

Registrar a extensão manualmente

Se você não usar o registro automático do MSBuild, registre a extensão no construtor do MTP:

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

Não chame AddPackagedAppDeployment se o aplicativo já chama AddSelfRegisteredExtensions e referencia o pacote. Uma execução do MTP pode registrar apenas um inicializador do host de teste.