다음을 통해 공유


원격 테스트(실험적 미리 보기)

원격 테스트를 통해 개발자는 Visual Studio 2022를 원격 환경에 연결하여 테스트를 실행하고 디버깅할 수 있습니다. 이 기능은 다양한 Windows 또는 Linux 운영 체제 등 서로 다른 여러 대상 환경에 코드를 배포하는 플랫폼 간 개발자에게 유용합니다. 예를 들어, 일반적으로 개발자는 Linux에서 실행 중인 테스트에서 피드백을 받기 위해 CI 파이프라인에 변경 사항을 푸시합니다. 원격 테스트 기능을 사용하면 테스트 탐색기를 원격 환경에 연결하여 Visual Studio에서 바로 Linux 테스트를 실행할 수 있습니다.

요구 사항

다음 요구 사항은 원격 테스트의 실험적 버전에 적용됩니다:

  • Visual Studio 2022 업데이트 17.0 프리뷰 3 이상을 실행 중이어야 합니다.

  • 현재 이 기능은 .NET 및 .NET Framework 테스트만 지원합니다.

  • 현재 이 기능은 원격 환경에서 윈도우, 우분투, 데비안 이미지를 지원합니다. .NET Framework의 경우 원격 Windows 환경만 지원됩니다.

  • 현재 환경 프로비저닝의 대부분은 사용자의 사양에 맡겨져 있습니다.

    사용자는 대상 환경에 필요한 종속성을 설치해야 합니다. 예를 들어 테스트가 .NET 6.0을 대상으로 하는 경우 Dockerfile을 통해 컨테이너에 .NET 6.0이 설치되어 있는지 확인해야 합니다. 격으로 테스트를 실행하고 검색하는 데 필요한 .NET Core를 원격 환경에 설치하라는 메시지가 표시될 수 있습니다.

  • 출력>테스트 창을 사용하여 원격 환경에 대한 연결 상태를 모니터링할 계획입니다.

    예를 들어, 컨테이너가 중지되면 Output>Tests 창에 메시지가 나타납니다. 이 기능이 모든 시나리오를 감지하지 못할 수도 있으므로 연결이 끊어진 것처럼 보이는 경우 출력을 확인하시기 바랍니다. 특히 출력 창이 "테스트"로 설정되어 있지 않은 경우 메시지가 즉시 표시되지 않을 수 있습니다. 연결이 끊어진 경우 테스트 탐색기의 환경 드롭다운을 사용하여 연결을 로컬 환경으로 다시 설정한 다음 원격 환경을 다시 선택하여 다시 연결할 수 있습니다.

원격 테스트 환경 설정

환경은 솔루션의 루트에 있는 testenvironments.json 파일을 사용하여 지정합니다. json 파일 구조는 다음 스키마를 구현합니다:

{
    "version": "1", // value must be 1
    "environments": [
        { "name": "<unique name>", ... },
        ...
    ]
}

testenvironments.json의 환경 속성

testenvironments.json 파일에는 다음과 같은 환경 속성이 있습니다.

속성 Type 설명
name string 테스트 탐색기에 표시되는 사용자에게 친숙한 환경 이름입니다. testEnvironments.json 파일 내에서 고유해야 합니다.
localRoot string [선택 사항] 원격 환경에 프로젝션되는 로컬 컴퓨터의 경로(절대 또는 솔루션 디렉터리에 상대적)입니다. 지정하지 않으면 기본값은 git 리포지토리 컨텍스트 내의 리포지토리 루트입니다(Visual Studio 2022 버전 17.1 이상에서). git 리포지토리 외부의 기본값은 솔루션 디렉터리입니다.
type enum 원격 환경의 유형을 나타냅니다. 값은 docker, wsl 또는 ssh 중 하나일 수 있습니다.
dockerImage string Docker 환경에서 로드할 Docker 이미지의 이름입니다.
환경 typedocker인 경우 이 값은 필수입니다.
dockerFile string Docker 환경에서 이미지를 빌드 및 로드하기 위한 Docker 파일의 솔루션 디렉터리에 상대적인 경로입니다.
환경 typedocker인 경우 이 값은 필수입니다.
wslDistribution string 테스트 환경을 실행할 로컬 WSL 배포의 이름입니다.
환경 typewsl인 경우 이 값이 필요합니다.
remoteUri string 원격 컴퓨터에 대한 연결을 지정하는 URI입니다. 예들 들어 ssh://user@hostname:22입니다.
환경 typessh인 경우 이 값이 필요합니다.

참고 항목

dockerImage 또는 dockerFile 속성 중 하나만 지정해야 하며 두 속성을 모두 지정할 수는 없습니다.

로컬 컨테이너 연결

로컬에서 실행되는 컨테이너에 연결하려면 로컬 컴퓨터에 Docker Desktop이 있어야 합니다. 필요에 따라 성능을 향상시키기 위해 WSL2 통합을 사용하도록 설정합니다.

Docker파일의 경우, 환경은 솔루션 루트의 testEnvironments.json 파일에서 지정할 수 있습니다. 다음 속성을 사용합니다.

{
    "name": "<name>",
    "type": "docker",
    "dockerImage": "<docker image tag>",
}

다음 예는 <mcr.microsoft.com/dotnet/sdk>이라는 로컬 컨테이너 이미지에 대한 testenvironments.json 파일을 보여줍니다.

{
    "version": "1",
    "environments": [
        {
            "name": "linux dotnet-sdk-5.0",
            "type": "docker",
            "dockerImage": "mcr.microsoft.com/dotnet/sdk"
        }
    ]
}

다음 예제에서는 .NET 5.0을 대상으로 하는 테스트를 실행하기 위한 Dockerfile을 보여 줍니다. 두 번째 줄은 디버거가 컨테이너에서 연결 및 실행될 수 있도록 합니다.

FROM mcr.microsoft.com/dotnet/sdk:5.0

RUN wget https://aka.ms/getvsdbgsh && \
    sh getvsdbgsh -v latest  -l /vsdbg

컨테이너는 로컬 머신에 빌드된 이미지가 있어야 합니다. docker build -t <docker image name> -f <path to Dockerfile> . 명령으로 컨테이너를 빌드할 수 있습니다. 명령 끝에 마침표 .를 포함해야 합니다.

다음 예는 dockerFile 속성 대신 dockerImage 속성입니다.

{
    "version": "1",
    "environments": [
        {
            "name": "GitServiceUnix",
            "type": "docker",
            "dockerFile": "Dockerfile.test"
        }
    ]
}

로컬 WSL2 연결

WSL2에서 원격으로 테스트를 실행하려면 로컬 머신에서 WSL2 통합을 사용하도록 설정해야 합니다.

환경은 다음 스키마를 사용하여 솔루션 루트에 있는 testEnvironments.json 파일에 지정할 수 있습니다. wslDistribution 속성의 <Ubuntu> 값을 WSL2 배포를 설치한 환경으로 바꿉니다.

{
    "version": "1",
    "environments": [
        {
            "name": "WSL-Ubuntu",
            "type": "wsl",
            "wslDistribution": "Ubuntu"
        }
    ]
}

SSH 연결

도구 > 옵션 > 플랫폼 간 > 연결 관리자에서 SSH 연결을 추가하거나 제거할 수 있습니다. 추가를 선택하여 호스트 이름, 포트 및 필요한 자격 증명을 입력합니다.

환경은 다음 스키마를 사용하여 솔루션 루트에 있는 testEnvironments.json 파일에 지정할 수 있습니다. remoteUri 속성의 <ssh://user@hostname:22> 값을 SSH 값으로 바꿉니다.

{
    "version": "1",
    "environments": [
        {
            "name": "ssh-remote",
            "type": "ssh",
            "remoteUri": "ssh://user@hostname:22"
        }
    ]
}

원격 Windows 환경 사전 요구 사항

관리자 PowerShell 창에서 다음 코드를 실행하여 활성화할 수 있습니다:격 Windows 환경에 대한 다음 사전 요구 사항을 검토합니다.

  1. 원격 시스템에서 Windows 프로젝션된 파일 시스템이 활성화되어 있는지 확인합니다. 관리자 PowerShell 창에서 다음 코드를 실행하여 활성화할 수 있습니다:

     Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart
    

    필요에 따라 환경을 다시 시작합니다.

  2. SSH가 설정되어 있는지 확인합니다. OpenSSH 설치에서 단계를 검토할 수 있습니다. 관리자 PowerShell 창에서 다음 명령을 실행하여 SSH 서버를 시작합니다.

    Start-Service sshd
    
  3. 테스트에 필요한 적절한 .NET 런타임이 설치되어 있는지 확인합니다. Windows용 .NET을 다운로드할 수 있습니다.

  4. 테스트 디버깅을 위한 환경을 준비합니다:

    1. 원격 환경에 원격 도구 SKU를 설치합니다.

    2. 원격 디버거를 관리자로 시작하고 Visual Studio 사용자에게 연결 권한이 있는지 확인합니다.

원격 Linux 환경의 전제 조건

원격 Linux 환경을 위한 다음 사전 요구 사항을 검토하세요.

  1. SSH가 구성되었고 실행 중인지 확인합니다.

  2. 패키지 관리자를 사용하여 fuse3을 설치합니다.

  3. 테스트에 필요한 적절한 .NET 런타임이 원격 Linux 환경에 설치되어 있는지 확인합니다.

테스트 탐색기를 사용하여 원격 테스트 실행 및 디버그

테스트 탐색기를 사용하여 원격 환경 테스트를 실행하고 디버깅하는 방법은 다음과 같습니다.

  • 활성 환경은 테스트 탐색기 도구 모음의 드롭다운을 통해 선택됩니다. 현재 한 번에 하나의 테스트 환경만 활성화할 수 있습니다.

    테스트 탐색기의 원격 테스트 환경 드롭다운

  • 환경을 선택하면 테스트가 새 환경에서 검색되고 실행됩니다.

    테스트가 원격 환경에서 검색되고 실행됨

  • 이제 원격 내에서 테스트를 실행하고 환경에서 테스트를 디버그할 수 있습니다.

    테스트 탐색기에서 원격 환경의 테스트 결과 보기

  • 테스트 탐색기는 누락된 환경 필수 구성 요소를 설치하라는 메시지를 표시하고 누락된 종속성을 설치하려고 시도할 수 있습니다. 그러나 원격 환경 프로비저닝의 대부분은 사용자의 사양에 따라 달라집니다.