이러한 확장은 MTP가 테스트 호스트를 배포하고 시작하는 방법과 위치를 제어합니다. 실험적 ITestHostLauncher 확장 지점을 사용하여 테스트 호스트 배포 및 시작을 제어합니다.
팁
Microsoft.Testing.Platform.MSBuild를 사용하는 경우 확장 기능의 NuGet 패키지를 설치하여 해당 확장 기능을 자동으로 등록합니다. MSTest, NUnit 및 xUnit 실행기에는 Microsoft.Testing.Platform.MSBuild가 간접적으로 포함됩니다. 생성된 진입점을 사용하지 않도록 설정하면 MSBuild가 기여하는 패키지를 등록하도록 호출 AddSelfRegisteredExtensions 합니다.
패키지된 앱 배포
Microsoft. Testing.Extensions.PackagedApp 확장은 빌드 출력 레이아웃에서 패키지된 Windows 테스트 호스트를 등록하고 AUMID(애플리케이션 사용자 모델 ID)로 활성화합니다.
이 패키지는 MTP 2.3에서 도입되었습니다. MTP 2.5부터는 다음을 포함하여 패키지된 완전 신뢰 및 AppContainer 호스트를 엔드투엔드 지원합니다.
- 패키지된 완전 신뢰 WinUI 3 앱.
-
UseUwp를 사용하는 최신 UWP 앱 -
uap10.0를 대상으로 하는 클래식 UWP 앱 -
packagedClassicApp를 설정하는 WinUI 3TrustLevel="appContainer"호스트.
MSTest.Sdk 4.5 이상에서는 이 확장과 필요한 완전 신뢰 앱 모델 사이드카를 자동으로 구성합니다. 애플리케이션 설정 및 실행 명령은 MSTest 및 MTP를 사용하여 UWP 및 WinUI 3 앱 테스트를 참조하세요.
Caution
MTP 2.4 Microsoft.Testing.Extensions.PackagedApp 부터 MTP 릴리스 버전을 따르고 공용 등록 API는 더 이상 실험적이 아닙니다. 제네릭 ITestHostLauncher 확장 지점은 실험적인 상태로 유지되며 향후 릴리스에서 변경될 수 있습니다.
요구 사항 충족
확장을 사용하기 전에 다음 요구 사항을 충족합니다.
- WinUI 3 패키지 앱의 대상 Windows 플랫폼 버전을
10.0.19041.0이상으로 설정합니다. - 서명되지 않은 빌드 출력 레이아웃을 등록하려면 개발자 모드를 사용하도록 설정하거나 사이드로드를 구성합니다.
- UWP의 경우 UWP 워크로드 및 필수 Windows SDK와 함께 Visual Studio 데스크톱 MSBuild를 사용합니다.
- 권한 상승되지 않은 컨트롤러 프로세스에서 AppContainer 테스트 호스트를 실행합니다.
패키지 활성화 이해
패키지된 앱의 경우 실행 프로그램:
-
AppxManifest.xml테스트 실행 파일을 설명하는 위치를 찾습니다. - 현재 사용자의 빌드 출력 레이아웃을 등록합니다.
- 선택한 매니페스트 애플리케이션의 AUMID를 확인합니다.
- 애플리케이션을 활성화하고 MTP 컨트롤러에 연결합니다.
win32App 및 packagedClassicApp 호스트의 경우 Windows는 일반적인 프로세스 인수 배열을 통해 MTP 인수를 제공합니다. 이 동작은 AppContainer를 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 또는 설정 취소 |
매니페스트가 AppContainer 애플리케이션을 선언하는 경우에만 패키지 SID에 권한을 부여합니다. |
always |
패키지된 레이아웃에 대한 패키지 SID 권한 부여를 요청합니다. |
never |
현재 사용자 전용 파이프 권한 부여를 유지합니다. |
수동으로 확장 등록
자동 MSBuild 등록을 사용하지 않는 경우 MTP 작성기에서 확장을 등록합니다.
var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddPackagedAppDeployment();
애플리케이션이 이미 AddPackagedAppDeployment을 호출하고 패키지를 참조하는 경우 AddSelfRegisteredExtensions을 호출하지 마세요. MTP 실행은 하나의 테스트 호스트 시작 관리자만 등록할 수 있습니다.
.NET