這些擴充控制 MTP 如何、在哪裡部署並啟動測試主機。 他們利用實驗 ITestHostLauncher 擴展點來控制測試主機的部署與啟動。
提示
當您使用 Microsoft.Testing.Platform.MSBuild 時,請安裝擴充功能的 NuGet 套件,以自動註冊該擴充功能。 MSTest、NUnit 和 xUnit 執行器包含 Microsoft.Testing.Platform.MSBuild 傳遞性。 如果你停用產生的入口點,請呼叫 AddSelfRegisteredExtensions 註冊 MSBuild 貢獻的套件。
封裝式應用程式部署
Microsoft。Testing.Extensions.PackagedApp 擴充功能會根據 Windows 的建置輸出配置註冊已打包的測試主機,並透過應用程式使用者模型 ID(AUMID)來啟用。
此套件於 MTP 2.3 中首次亮相。 從 MTP 2.5 開始,即可端對端支援已封裝的完整信任和 AppContainer 主機,包括:
- 已封裝的全信任 WinUI 3 應用程式。
- 使用
UseUwp的現代 UWP 應用程式。 - 以
uap10.0為目標的傳統 UWP 應用程式。 - 設定
TrustLevel="appContainer"的 WinUI 3packagedClassicApp主機。
MSTest.Sdk 4.5 或更新版本自動配置此擴充功能及所需的全信任應用模型副車。 關於應用程式設定與執行指令,請參考 MSTest 和 MTP 測試 UWP 和 WinUI 3 應用程式。
注意事項
從 MTP 2.4 開始, Microsoft.Testing.Extensions.PackagedApp 遵循 MTP 版本,其公開註冊 API 已不再是實驗性質。 通用 ITestHostLauncher 擴充點仍處於實驗階段,未來版本可能會有所變動。
符合要求
在使用擴充功能前,請先符合以下要求:
- 將目標 Windows 平台版本設為
10.0.19041.0或更新版本,以用於 WinUI 3 封裝應用程式。 - 若要註冊未簽名的建置輸出配置,請啟用開發者模式或設定側載。
- 對於 UWP,請使用 Visual Studio 的桌面版 MSBuild,搭配 UWP 工作負載和所需的 Windows SDK。
- 從未提升權限的控制器處理程序執行 AppContainer 測試主機。
了解套件啟動
對於打包式應用程式,啟動器:
- 找到描述測試執行檔的
AppxManifest.xml。 - 註冊目前使用者的建置輸出配置。
- 解析所選資訊清單應用程式的 AUMID。
- 啟動應用程式並將其連接到 MTP 控制器。
對於 packagedClassicApp 和 win32App hosts,Windows 透過一般的程序參數陣列提供 MTP 參數。 這種行為同樣適用於使用 AppContainer 的 App packagedClassicApp 。
對於 UWP 應用程式 windowsApp,Windows 會透過 LaunchActivatedEventArgs.Arguments 提供一個不透明的啟用字串。 在 OnLaunched建立 MTP 建構器之前先先呼叫 PackagedAppExtensions.GetTestApplicationArguments 。
連接一個 AppContainer 主機
AppContainer 權杖包含受限的封裝 SID。 僅授權當前使用者的命名管線會拒絕 AppContainer 程序,即使該程序屬於同一登入使用者。
在 MTP 2.5 或更新版本中,打包的應用程式啟動器會推導出所選應用程式的精確套件 SID,並請求 MTP 授予該 SID 對控制器與擴展管線的最小用戶端權限。 此擴充功能不會授與 ALL APPLICATION PACKAGES、降低管道的完整性等級,或要求網路迴路豁免。
側車透過套件 LocalState傳輸控制器元資料。 它也會在沙箱主機退出後,將 TRX、傾印、診斷和重試成品從套件所擁有的儲存體複製到所要求的結果目錄。
控制自動啟動
預設情況下,啟動器只有在找到描述測試應用程式的套件清單時才會自動啟用。 未封裝的 WinUI 3 應用程式或一般的控制台測試應用程式會維持在直接啟動路徑上。
使用 TESTINGPLATFORM_PACKAGEDAPP_LAUNCHER 來覆寫套件偵測:
| Value | 行為 |
|---|---|
auto 或未設定 |
僅針對封裝配置啟用。 |
always |
可針對任何版面配置啟用,包括您想在啟動前部署的鬆散配置。 |
never |
關閉打包的應用程式啟動器。 |
使用 TESTINGPLATFORM_PACKAGEDAPP_PIPEAUTHORIZATION 覆寫套件 SID 授權:
| Value | 行為 |
|---|---|
auto 或未設定 |
只有當 manifest 宣告 AppContainer 應用程式時,才授權套件 SID。 |
always |
請求對任何封裝版面的 package-SID 授權。 |
never |
保留目前使用者專用的管道授權。 |
手動註冊擴充功能
如果您未使用自動 MSBuild 註冊,請在您的 MTP 建置器中註冊該擴充功能:
var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddPackagedAppDeployment();
如果應用程式已經呼叫 AddPackagedAppDeployment 並參考該套件,就不要呼叫 AddSelfRegisteredExtensions。 MTP 執行只能註冊一個測試主機啟動器。