Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Tryb serwera MTP pozwala edytorowi, środowisku IDE lub innemu narzędziu testowemu na uruchomienie aplikacji testowej oraz sterowanie wykrywaniem i wykonywaniem za pośrednictwem protokołu JSON-RPC. Użyj trybu serwera podczas kompilowania narzędzi wokół protokołu MTP. W przypadku standardowych uruchomień z wiersza polecenia i w CI uruchom aplikację testową bezpośrednio lub użyj dotnet test.
Uruchom publiczny serwer JSON-RPC za pomocą polecenia --server lub --server jsonrpc.
Ważna
Zestaw SDK .NET używa oddzielnego wewnętrznego protokołu binarnego za pomocą metody --server dotnettestcli. Nie przekazuj tej wartości samodzielnie.
dotnet test Konfiguruje argumenty transportu i protokołu.
Użyj klienta zawierającego tylko kod źródłowy
Usługa MTP 2.4 udostępnia klienta kanonicznego JSON-RPC. Dodaj pakiet Microsoft.Testing.Platform.ServerMode.Client.Sources. Pakiet wprowadza źródło języka C# do projektu zamiast dodawać zestaw środowiska uruchomieniowego.
Projekt zawierający wyłącznie kod źródłowy zapewnia:
- Brak biblioteki DLL środowiska uruchomieniowego ani dodatkowej zależności wdrożenia.
- Natywna serializacja zgodna z AOT, bezrefleksyjna.
- Typy protokołów i kod serializacji z tego samego repozytorium co serwer MTP.
Wstrzyknięte elementy MtpServerClient, IMtpServerClient oraz typy protokołów mogą inicjować połączenie, wykrywać testy, uruchamiać testy, żądać zamknięcia serwera i zgłaszać aktualizacje węzłów testowych. Wszystkie wstrzyknięte typy pozostają internal dla korzystającego zestawu.
Spełnianie wymagań klienta
Użyj języka C# 12 lub nowszego. Pakiet uwzględnia ustawienie wersji językowej projektu. Jeśli platforma docelowa jest domyślnie ustawiona na starszą wersję języka C#, ustaw LangVersion na 12.0 lub nowszą. Pakiet dostarcza również wewnętrzne typy zgodności dla platformy .NET Framework 4.6.2 i netstandard2.0.
Usuń każdą ręcznie napisaną kopię klienta MTP przed dodaniem pakietu, aby uniknąć duplikowania typów wewnętrznych.
Wybieranie modelu uruchamiania
Aby uruchomić aplikację testową jako proces zewnętrzny, użyj polecenia MtpServerClient.LaunchAsync. Klient jest właścicielem tego procesu podrzędnego i kończy go podczas usuwania w razie potrzeby.
W przypadku hosta osadzonego lub środowiska wątku interfejsu użytkownika, które nie może używać Process.Start, użyj MtpServerClient.LaunchInProcessAsync. Metoda uruchamia aplikację testową za pomocą asynchronicznego wywołania zwrotnego w bieżącym procesie. Nie blokuj wątku uruchamiającego, ponieważ funkcja zwrotna i klient działają w tym samym procesie.
Oba modele uruchomienia korzystają z transportu TCP typu loopback. Zestaw WebAssembly przeglądarki nie może utworzyć wymaganego odbiornika, więc uruchamianie w procesie zgłasza błąd PlatformNotSupportedException. Uruchamianie w ramach procesu nie zapewnia alternatywnego transportu WebAssembly.
Zamykanie klienta
Aby zamknąć klienta i uruchomioną aplikację bez blokowania wątku wywołującego, wywołaj IMtpServerClient.ShutdownAsync(). Metoda asynchroniczna pozwala uniknąć problemów z responsywnością wątku interfejsu użytkownika i zakleszczeniami w hostach osadzonych.
W przypadku hosta w procesie określa, MtpServerClientOptions.ServerShutdownTimeout jak długo czeka zerwanie po zamknięciu transportu przez klienta. Wartość domyślna to 30 sekund. Odczytaj ServerExitCode po zamknięciu systemu, aby uzyskać kod wyjścia funkcji wywołania zwrotnego. Wartość pozostaje null podczas uruchamiania aplikacji lub gdy aplikacja kończy się niepowodzeniem zamiast zwracać kod zakończenia.
Zadeklaruj stanowość klienta
Począwszy od wersji MTP 2.4.1, ustaw opcję nullable MtpServerClientOptions.IsStateful, aby opisać sposób, w jaki klient korzysta z aktualizacji test-node:
| Value | Deklaracja |
|---|---|
true |
Klient zachowuje adresowalny zestaw węzłów testowych dla sesji i przechowuje ostatni znany stan każdego węzła do momentu zmiany go przez inną aktualizację, podobnie jak może to robić eksplorator testów środowiska IDE. |
false |
Klient przetwarza aktualizacje bez zachowywania tego stanu węzła testowego. |
null (ustawienie domyślne) |
Klient nie deklaruje obsługi tej funkcji. Uzgadnianie inicjalizujące pomija pole. |
Klient wysyła jawną wartość logiczną za pośrednictwem eksperymentalnej funkcji protokołu capabilities.testing.isStateful. Stanowość jest niezależna od okresu istnienia połączenia i zdolności MultiRequestSupport serwera. Klient nie staje się utrzymujący stan tylko dlatego, że wysyła kilka żądań za pośrednictwem tego samego połączenia.
MTP 2.4.0 używa opcji logicznej bez wartości null z wartością domyślną false. Aby zachować niezadeklarowaną funkcję, użyj protokołu MTP 2.4.1 lub nowszego.
Wewnątrz frameworka lub rozszerzenia użyj eksperymentalnej IClientInfousługi, aby sprawdzić deklarację. Przeczytaj clientInfo.Capabilities.IsStateful, aby uzyskać konserwatywny wynik logiczny, czyli false wtedy, gdy funkcja nie jest zadeklarowana. W przypadku protokołu MTP 2.4.1 lub nowszego ClientCapabilitiesExtensions.GetIsStateful() zachowywane jest rozróżnienie między niezadeklarowanym, jawnie bezstanowym i stanowym klientem.
Negocjuj zgodność protokołu
Począwszy od wersji MTP 2.4 negocjowanie protokołu w trybie serwera jest niezależne od wersji pakietu NuGet MTP. Klient deklaruje obsługiwane wersje protokołu, a serwer wybiera wspólną wersję. Jeśli żadna obsługiwana wersja nie nakłada się na siebie, aplikacja testowa kończy działanie z ProtocolError kodem zakończenia (12) zamiast kontynuować niezgodną umowę o komunikacji sieciowej.
Użyj schematu JSON w trybie serwera w wersji 1.0 , aby zweryfikować komunikaty. Serializatory System.Text.Json i Jsonite są zgodne z tym samym schematem i kopertą błędów.