Modalità server

La modalità server MTP consente a un editor, all'IDE o ad altri strumenti di test di avviare un'applicazione di test e di eseguire l'individuazione e l'esecuzione tramite JSON-RPC. Usare la modalità server quando si compilano strumenti intorno a MTP. Per le normali esecuzioni da riga di comando e CI, eseguire direttamente l'applicazione di test oppure usare dotnet test.

Avviare il server JSON-RPC pubblico con --server o --server jsonrpc.

Importante

L'SDK di .NET usa un protocollo binario interno separato tramite --server dotnettestcli. Non passare questo valore manualmente. dotnet test configura gli argomenti del trasporto e del protocollo.

Usare il client di sola origine

L'anteprima di MTP 2.4 fornisce un client JSON-RPC canonico. Aggiungere il pacchetto Microsoft.Testing.Platform.ServerMode.Client.Sources. Il pacchetto inserisce il codice sorgente C# nel tuo progetto anziché aggiungere un assembly di runtime.

La progettazione basata esclusivamente sulla sorgente fornisce:

  • Nessuna DLL di runtime o dipendenza di distribuzione aggiuntiva.
  • Serializzazione nativa compatibile con AOT e priva di reflection.
  • Tipi di protocollo e codice di serializzazione dallo stesso repository del server MTP.

I tipi di protocollo inseriti MtpServerClient, IMtpServerCliente possono inizializzare una connessione, individuare test, eseguire test, richiedere l'uscita del server e segnalare gli aggiornamenti del nodo di test. Tutti i tipi inseriti rimangono internal nell'assembly che utilizza.

Soddisfare i requisiti del client

Usare C# 12 o versione successiva. Il pacchetto viene impostato su LangVersion12.0 quando il progetto non specifica una versione della lingua. Fornisce inoltre tipi di compatibilità interni per .NET Framework 4.6.2 e netstandard2.0.

Rimuovere qualsiasi copia scritta a mano del client MTP prima di aggiungere il pacchetto per evitare tipi interni duplicati.

Scegliere un modello di avvio

Per avviare l'applicazione di test come processo esterno, usare MtpServerClient.LaunchAsync. Il client è proprietario del processo figlio e lo termina durante l'disinstallazione quando necessario.

Per un host incorporato o un ambiente thread dell'interfaccia utente che non può usare Process.Start, usare MtpServerClient.LaunchInProcessAsync. Il metodo esegue l'applicazione di test tramite un callback asincrono nel processo corrente. Non bloccare il thread di avvio perché il callback e il client condividono il processo.

Entrambi i modelli di avvio usano un trasporto TCP loopback. Browser WebAssembly non è in grado di creare il listener necessario, quindi l'avvio nel processo genera PlatformNotSupportedException. L'avvio nel processo non fornisce un trasporto WebAssembly alternativo.

Arresta il client

Per rimuovere il client e avviare l'applicazione senza bloccare il thread chiamante, chiamare IMtpServerClient.ShutdownAsync(). Il metodo asincrono evita la velocità di risposta del thread dell'interfaccia utente e i problemi di deadlock negli host incorporati.

Per un host in-process, MtpServerClientOptions.ServerShutdownTimeout controlla il tempo di attesa dell'disinstallazione dopo che il client chiude il trasporto. Il valore predefinito è 30 secondi. Leggi ServerExitCode dopo lo spegnimento per ottenere il codice di uscita del callback. Il valore rimane null durante l'esecuzione dell'applicazione o quando l'applicazione non riesce anziché restituire un codice di uscita.

Scegliere il comportamento di connessione

Impostare MtpServerClientOptions.IsStateful per indicare al server se il client mantiene lo stato tra le richieste:

  • Lasciare il valore false per una singola richiesta di individuazione o esecuzione seguita da exit.
  • Impostare il valore su true per un editor o una sessione IDE che invia più richieste sulla stessa connessione.

Il client invia questa impostazione tramite la funzionalità del protocollo sperimentale capabilities.testing.isStateful .

Vedere anche