서버 모드

MTP 서버 모드를 사용하면 편집기, IDE 또는 기타 테스트 도구가 테스트 애플리케이션을 시작하고 JSON-RPC를 통해 검색 및 실행을 구동할 수 있습니다. MTP를 중심으로 도구를 빌드할 때 서버 모드를 사용합니다. 일반 명령줄 및 CI 실행의 경우 테스트 애플리케이션을 직접 실행하거나 사용합니다 dotnet test.

--server 또는 --server jsonrpc로 공용 JSON-RPC 서버를 시작합니다.

Important

.NET SDK는 별도의 내부 이진 프로토콜을 사용합니다--server dotnettestcli. 그 가치를 직접 전달하지 마십시오. dotnet test 는 전송 및 프로토콜 인수를 구성합니다.

원본 전용 클라이언트 사용

MTP 2.4 미리 보기는 정식 JSON-RPC 클라이언트를 제공합니다. Microsoft.Testing.Platform.ServerMode.Client.Sources 패키지를 추가합니다. 패키지는 런타임 어셈블리를 추가하는 대신 C# 원본을 프로젝트에 삽입합니다.

원본 전용 디자인은 다음을 제공합니다.

  • 런타임 DLL 또는 추가 배포 종속성이 없습니다.
  • 네이티브 AOT 호환, 리플렉션 없는 직렬화
  • MTP 서버와 동일한 리포지토리의 프로토콜 형식 및 serialization 코드입니다.

삽입된 MtpServerClientIMtpServerClient프로토콜 유형은 연결을 초기화하고, 테스트를 검색하고, 테스트를 실행하고, 서버 종료를 요청하고, 테스트 노드 업데이트를 보고할 수 있습니다. 삽입된 모든 형식은 사용하는 어셈블리에는 internal 상태로 유지됩니다.

클라이언트 요구 사항 충족

C# 12 이상을 사용합니다. 패키지는 프로젝트에서 언어 버전을 지정하지 않으면 LangVersion을 12.0(으)로 설정합니다. 또한 .NET Framework 4.6.2 및 netstandard2.0에 대한 내부 호환성 유형도 제공합니다.

중복된 내부 형식을 방지하기 위해 패키지를 추가하기 전에 MTP 클라이언트의 손으로 쓴 복사본을 제거합니다.

시작 모델 선택

테스트 애플리케이션을 외부 프로세스로 시작하려면 .를 사용합니다 MtpServerClient.LaunchAsync. 클라이언트는 해당 자식 프로세스를 관리하며, 필요할 경우 정리 과정에서 이를 종료합니다.

Process.Start를 사용할 수 없는 임베디드 호스트 또는 UI 스레드 환경의 경우 MtpServerClient.LaunchInProcessAsync를 사용하세요. 메서드는 현재 프로세스에서 비동기 콜백을 통해 테스트 애플리케이션을 실행합니다. 콜백과 클라이언트가 프로세스를 공유하므로 시작 스레드를 차단하지 마세요.

두 시작 모델 모두 루프백 TCP 전송을 사용합니다. 브라우저의 WebAssembly는 필요한 리스너를 만들 수 없으므로 in-process 시작 시 PlatformNotSupportedException 예외가 발생합니다. 동일 프로세스 실행은 WebAssembly에 대한 대체 전송 방식을 제공하지 않습니다.

클라이언트 종료

호출 스레드를 차단하지 않고 클라이언트를 해체하고 애플리케이션을 시작하려면 .를 호출합니다 IMtpServerClient.ShutdownAsync(). 비동기 메서드는 포함된 호스트에서 UI 스레드 응답성 및 교착 상태 문제를 방지합니다.

인프로세스 호스트의 경우 MtpServerClientOptions.ServerShutdownTimeout는 클라이언트가 전송을 닫은 후 분해가 얼마나 오래 대기할지 제어합니다. 기본값은 30초입니다. 종료 후 읽어 ServerExitCode 콜백의 종료 코드를 가져옵니다. 이 값은 애플리케이션이 실행되는 동안 또는 종료 코드를 반환하는 대신 애플리케이션이 실패할 때 유지 null 됩니다.

연결 동작 선택

클라이언트가 요청 간에 상태를 유지하는지 여부를 서버에 알리도록 설정합니다 MtpServerClientOptions.IsStateful .

  • 단일 검색 또는 실행 요청에 대한 값을 false 그대로 두고 종료합니다.
  • 동일한 연결을 통해 여러 요청을 보내는 편집기 또는 IDE 세션의 값을 true 설정합니다.

클라이언트는 실험적 capabilities.testing.isStateful 프로토콜 기능을 통해 이 설정을 보냅니다.

참고하십시오