Modo de servidor

O modo de servidor MTP permite que um editor, uma IDE ou outra ferramenta de teste inicie uma aplicação de teste e controle a descoberta e a execução via JSON-RPC. Use o modo de servidor ao criar ferramentas em torno de MTP. Para execuções normais de linha de comando e CI, execute o aplicativo de teste diretamente ou use dotnet test.

Inicie o servidor de JSON-RPC público com --server ou --server jsonrpc.

Importante

O SDK do .NET usa um protocolo binário interno separado por meio de --server dotnettestcli. Não passe esse valor você mesmo. dotnet test configura os argumentos de transporte e protocolo.

Use o cliente somente de origem

A versão prévia do MTP 2.4 fornece um cliente de JSON-RPC canônico. Adicione o pacote Microsoft.Testing.Platform.ServerMode.Client.Sources. O pacote injeta código-fonte em C# no seu projeto em vez de adicionar um assembly em tempo de execução.

O design baseado apenas na fonte fornece:

  • Nenhuma DLL de runtime ou dependência de implantação adicional.
  • Serialização sem reflexão compatível com AOT nativo.
  • Tipos de protocolo e código de serialização do mesmo repositório que o servidor MTP.

Os tipos injetados IMtpServerClient, MtpServerClient e de protocolo podem inicializar uma conexão, descobrir testes, executar testes, solicitar o encerramento do servidor e relatar atualizações do nó de teste. Todos os tipos injetados permanecem internal para o assembly consumidor.

Atender aos requisitos do cliente

Use C# 12 ou mais recente. O pacote define LangVersion como 12.0 quando seu projeto não especifica uma versão da linguagem. Ele também fornece tipos de compatibilidade interna para .NET Framework 4.6.2 e netstandard2.0.

Remova qualquer cópia escrita à mão do cliente MTP antes de adicionar o pacote para evitar tipos internos duplicados.

Escolher um modelo de inicialização

Para iniciar o aplicativo de teste como um processo externo, use MtpServerClient.LaunchAsync. O cliente é responsável por esse processo filho e o encerra durante a desinstalação, quando necessário.

Para um host incorporado ou um ambiente com thread de interface do usuário que não possa usar Process.Start, use MtpServerClient.LaunchInProcessAsync. O método executa o aplicativo de teste por meio de um callback assíncrono no processo atual. Não bloqueie a thread de inicialização porque o callback e o cliente estão no mesmo processo.

Ambos os modelos de inicialização usam um transporte TCP em loopback. O Navegador WebAssembly não pode criar o ouvinte necessário, portanto, a inicialização em processo gera PlatformNotSupportedException. A inicialização em processo não fornece um transporte WebAssembly alternativo.

Desligar o cliente

Para desinstalar o cliente e o aplicativo iniciado sem bloquear o thread de chamada, chame IMtpServerClient.ShutdownAsync(). O método assíncrono evita problemas de responsividade da thread da interface do usuário e de deadlock em hosts incorporados.

Para um host em processo, MtpServerClientOptions.ServerShutdownTimeout controla quanto tempo o teardown aguarda após o cliente fechar o transporte. O padrão é 30 segundos. Leia ServerExitCode após o encerramento para obter o código de saída do callback. O valor permanece null enquanto o aplicativo é executado ou quando o aplicativo falha em vez de retornar um código de saída.

Escolher o comportamento da conexão

Defina MtpServerClientOptions.IsStateful para informar ao servidor se o cliente preserva o estado entre solicitações:

  • Deixe o valor false para uma única solicitação de descoberta ou execução seguida de saída.
  • Defina o valor como true para uma sessão de editor ou de IDE que envia várias solicitações na mesma conexão.

O cliente envia essa configuração por meio da funcionalidade de protocolo experimental capabilities.testing.isStateful .

Consulte também