Tryb serwera

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

Wersja zapoznawcza MTP 2.4 udostępnia kanonicznego klienta 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 ustawia wartość LangVersion , 12.0 gdy projekt nie określa wersji językowej. 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.

Wybieranie zachowania połączenia

Ustaw MtpServerClientOptions.IsStateful, aby wskazać serwerowi, czy klient zachowuje stan między żądaniami:

  • Pozostaw wartość false dla pojedynczego żądania wykrywania lub wykonania, po którym nastąpi zakończenie działania.
  • Ustaw wartość na true dla edytora lub sesji IDE, która wysyła wiele żądań za pośrednictwem tego samego połączenia.

Klient wysyła to ustawienie za pośrednictwem możliwości protokołu eksperymentalnego capabilities.testing.isStateful .

Zobacz także