伺服器模式

MTP 伺服器模式允許編輯器、IDE 或其他測試工具啟動測試應用程式,並透過 JSON-RPC 推動發現與執行。 當你圍繞 MTP 建構工具時,請使用伺服器模式。 對於一般的命令列與 CI 執行,請直接執行測試應用程式或使用 dotnet test

使用 --server jsonrpc--server 啟動公開的 JSON-RPC 伺服器。

Important

.NET SDK 透過 --server dotnettestcli 使用獨立的內部二進位通訊協定。 不要自行傳遞該值。 dotnet test 配置傳輸與協定參數。

使用純源碼用戶端

MTP 2.4 預覽版提供一個標準的 JSON-RPC 用戶端。 新增 Microsoft.Testing.Platform.ServerMode.Client.Sources 套件。 這個套件會把 C# 原始碼注入你的專案,而不是直接加入執行時的組合語言。

純源設計提供:

  • 沒有執行時的 DLL 或額外的部署依賴。
  • 原生 AOT 相容、無反射序列化。
  • 協定類型與序列化程式碼來自與 MTP 伺服器相同的儲存庫。

注入的 MtpServerClientIMtpServerClient和 協定類型可以初始化連線、發現測試、執行測試、請求伺服器退出,以及回報測試節點更新。 所有注入型態仍留 internal 在消費組件中。

滿足客戶需求

使用 C# 12 或更新版本。 當您的專案未指定語言版本時,套件會將 LangVersion 設為 12.0。 它也為 .NET Framework 4.6.2 和 netstandard2.0 提供內部相容性型別。

在新增套件前,請移除任何手寫的 MTP 用戶端副本,以避免內部類型重複。

選擇發射型號

若要啟動測試應用程式作為外部程序,請使用 MtpServerClient.LaunchAsync。 用戶端負責管理該子程序,並會在需要時於清理階段將其終止。

對於無法使用 Process.Start的嵌入式主機或 UI 執行緒環境,請使用 MtpServerClient.LaunchInProcessAsync。 此方法在當前程序中透過非同步回調執行測試應用程式。 不要封鎖啟動執行緒,因為回調和客戶端會共用流程。

兩款上市型號皆使用迴圈 TCP 傳輸。 瀏覽器 WebAssembly 無法建立所需的監聽器,因此啟動過程中會拋 PlatformNotSupportedException出 。 程序內啟動不提供替代的 WebAssembly 傳輸機制。

關閉客戶端

若要關閉客戶端及已啟動的應用程式而不阻擋呼叫執行緒,請呼叫 IMtpServerClient.ShutdownAsync()。 非同步方法避免了嵌入式主機中 UI 執行緒響應性及死鎖問題。

對於處理序內主機,MtpServerClientOptions.ServerShutdownTimeout 會控制用戶端關閉傳輸後,終止作業等待的時間。 預設值為 30 秒。 在關閉後讀取 ServerExitCode,以取得回呼的結束代碼。 該值在應用程式執行或失敗時保持不變 null ,而非回傳退出碼。

選擇連結行為

設定 MtpServerClientOptions.IsStateful 為告訴伺服器客戶端是否在請求間保持狀態:

  • 將該值 false 留給單一的發現或執行請求,然後退出。
  • 將值設為 , true 代表編輯器或 IDE 會在同一連線上發送多個請求。

用戶端透過實驗 capabilities.testing.isStateful 協定功能傳送此設定。

參見