Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met de MTP-servermodus kan een editor, IDE of een ander testhulpprogramma een testtoepassing starten en detectie en uitvoering via JSON-RPC stimuleren. Gebruik de servermodus wanneer u hulpprogramma's rond MTP bouwt. Voor normale opdrachtregel- en CI-runs voert u de testtoepassing direct uit of gebruikt u dotnet test.
Start de openbare JSON-RPC server met --server of --server jsonrpc.
Belangrijk
De .NET SDK maakt gebruik van een afzonderlijk intern binair protocol via --server dotnettestcli. Geef die waarde niet zelf door.
dotnet test hiermee configureert u de transport- en protocolargumenten.
De bronclient gebruiken
MTP 2.4 biedt een canonieke JSON-RPC client. Voeg het pakket Microsoft.Testing.Platform.ServerMode.Client.Sources toe. Het pakket injecteert C#-bron in uw project in plaats van een runtime-assembly toe te voegen.
Het alleen-bronontwerp biedt:
- Geen runtime-DLL of aanvullende implementatieafhankelijkheid.
- Systeemeigen AOT-compatibele, reflectievrije serialisatie.
- Protocoltypen en serialisatiecode uit dezelfde opslagplaats als de MTP-server.
De geïnjecteerde MtpServerClienten IMtpServerClientprotocoltypen kunnen een verbinding initialiseren, tests detecteren, tests uitvoeren, afsluiten van de server aanvragen en updates van testknooppunten rapporteren. Alle geïnjecteerde typen blijven internal aan de verbruikende assembly over.
Voldoen aan clientvereisten
Gebruik C# 12 of hoger. Het pakket respecteert de taalversie-instelling van uw project. Als uw doelframework standaard is ingesteld op een eerdere C#-versie, stelt u 12.0 in op LangVersion of hoger. Het pakket levert ook interne compatibiliteitstypen voor .NET Framework 4.6.2 en netstandard2.0.
Verwijder een handgeschreven kopie van de MTP-client voordat u het pakket toevoegt om dubbele interne typen te voorkomen.
Een startmodel kiezen
Als u de testtoepassing als een extern proces wilt starten, gebruikt u MtpServerClient.LaunchAsync. De client is eigenaar van dat onderliggende proces en beëindigt het tijdens het afbreken wanneer dat nodig is.
Voor een embedded host of omgeving met een UI-thread die geen gebruik kan maken van Process.Start, gebruikt u MtpServerClient.LaunchInProcessAsync. De methode voert de testtoepassing uit via een asynchrone callback in het huidige proces. Blokkeer de startthread niet omdat de callback en client het proces delen.
Beide lanceringsmodellen maken gebruik van een loopback TCP-transport. WebAssembly van browser kan de vereiste listener niet maken, dus het starten van het proces genereert PlatformNotSupportedException. Starten in het proces biedt geen alternatief voor WebAssembly-transport.
De client afsluiten
Als u de client en de gestarte toepassing wilt afsluiten zonder de aanroepende thread te blokkeren, roept u IMtpServerClient.ShutdownAsync() aan. De asynchrone methode vermijdt problemen met de responsiviteit van de UI-thread en deadlocks in ingebedde hosts.
Voor een in-process host MtpServerClientOptions.ServerShutdownTimeout bepaalt u hoe lang de teardown wacht nadat de client het transport heeft gesloten. De standaardwaarde is 30 seconden. Lees ServerExitCode na het afsluiten om de exitcode van de callback op te halen. De waarde blijft null behouden terwijl de toepassing wordt uitgevoerd of wanneer de toepassing mislukt in plaats van een afsluitcode te retourneren.
Statusbehoud van client declareren
Vanaf MTP 2.4.1 stelt u de nullable-optie MtpServerClientOptions.IsStateful in om te beschrijven hoe de client testknooppuntupdates verbruikt:
| Value | Verklaring |
|---|---|
true |
De client behoudt een adresseerbare set testknooppunten voor de sessie en behoudt de laatst bekende status van elk knooppunt totdat een andere update deze wijzigt, zoals een IDE-testverkenner dat zou kunnen doen. |
false |
De client ontvangt updates zonder de status van dat testknooppunt te behouden. |
null (standaard) |
De client declareert de capaciteit niet. De initialisatie-handshake laat het veld weg. |
De client verzendt een expliciete Booleaanse waarde via de experimentele capabilities.testing.isStateful protocolcapaciteit. Statefulness is onafhankelijk van de levensduur van de verbinding en de mogelijkheid van de server MultiRequestSupport. Een client wordt niet stateful alleen omdat de client meerdere aanvragen via dezelfde verbinding verstuurt.
MTP 2.4.0 maakt gebruik van een niet-nullable Booleaanse optie met een standaardwaarde van false. Als u een niet-gedeclareerde mogelijkheid wilt behouden, gebruikt u MTP 2.4.1 of hoger.
Gebruik binnen een framework of extensie de experimentele IClientInfo service om de declaratie-instructie te inspecteren. Lees clientInfo.Capabilities.IsStateful voor een conservatief Booleaans resultaat, wat false is wanneer de capaciteit niet wordt aangegeven. In MTP 2.4.1 of hoger behoudt ClientCapabilitiesExtensions.GetIsStateful() het onderscheid tussen niet-gedeclareerde, expliciet staatloze en stateful clients.
Compatibiliteit van protocollen onderhandelen
Vanaf MTP 2.4 is de servermodus protocolonderhandeling onafhankelijk van de MTP NuGet-pakketversie. Een client declareert de protocolversies die worden ondersteund en de server selecteert een gemeenschappelijke versie. Wanneer geen enkele ondersteunde versie overeenkomt, wordt de testtoepassing beëindigd met de ProtocolError exitcode (12) in plaats van door te gaan met een incompatibel wireprotocolcontract.
Gebruik het geversioneerde JSON-schema voor servermodus 1.0 om berichten te valideren. De System.Text.Json- en Jsonite-serializers hanteren hetzelfde schema en dezelfde foutstructuur.