Поделиться через


Удаленное тестирование (экспериментальная предварительная версия)

Удаленное тестирование позволяет разработчикам подключать Visual Studio 2022 к удаленным средам для запуска и отладки тестов. Эта функция полезна для разработчиков на разных платформах, которые развертывают код в нескольких целевых средах, таких как разные операционные системы Windows или Linux. Например, разработчик обычно отправляет изменения в конвейер CI, чтобы получить отзыв от тестового запуска в Linux. С помощью функции удаленного тестирования вы можете выполнять тесты Linux прямо из Visual Studio, подключив обозреватель тестов к удаленной среде.

Требования

Следующие требования применяются к экспериментальной версии удаленного тестирования:

  • Необходимо запустить Visual Studio 2022 с обновлением 17.0 ( предварительная версия 3 или более поздняя версия).

  • В настоящее время эта функция поддерживает только тесты .NET и платформа .NET Framework.

  • В настоящее время функция поддерживает образы Windows, Ubuntu и Debian в удаленной среде. Для платформа .NET Framework поддерживаются только удаленные среды Windows.

  • В настоящее время основная часть подготовки среды остается в спецификации пользователя.

    Пользователь должен установить необходимые зависимости в целевой среде. Например, если тесты предназначены для .NET 6.0, необходимо убедиться, что ваш Dockerfile устанавливает в контейнере .NET 6.0. Может возникнуть запрос на установку .NET Core в удаленной среде, которая необходима для удаленного выполнения и обнаружения тестов.

  • Запланируйте мониторинг состояния подключения к удаленной среде с помощью области "Выходные>тесты".

    Например, если контейнер останавливается, в области выходных>тестов появится сообщение. Эта функция может не обнаруживать все сценарии, поэтому планируется проверить выходные данные, если подключение будет потеряно. В частности, если в области вывода не задано значение Test, вы можете не сразу увидеть сообщение. Если подключение потеряно, можно использовать раскрывающийся список среды в обозревателе тестов, чтобы вернуть подключение к локальной среде, а затем снова выбрать удаленную среду для повторного подключения.

Настройка среды удаленного тестирования

Среды задаются с помощью файла testenvironments.json в корне решения. Структура файла JSON реализует следующую схему:

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

Свойства среды в файле testenvironments.json

Файл testenvironments.json имеет следующие свойства среды.

Свойство Type Описание:
name строка Понятное имя среды, отображаемое в Обозревателе тестов. Он должен быть уникальным в testEnvironments.json файле.
localRoot строка [Необязательно] Путь на локальном компьютере (абсолютный или относительно каталога решения), который проецируется в удаленную среду. Если не указано, значение по умолчанию является корневым репозиторием в контексте репозитория Git (в Visual Studio 2022 версии 17.1 и более поздних версиях). Вне репозитория Git значение по умолчанию — каталог решения.
type перечисление Указывает тип удаленной среды. Значение может быть либо docker, wslлибо ssh.
dockerImage строка Имя образа Docker для загрузки в среде Docker.
Это значение необходимо, если среда type имеет значение docker.
dockerFile строка Путь к файлу Docker, заданному относительно каталога решения, для создания образа и загрузки в среду Docker.
Это значение необходимо, если среда type имеет значение docker.
wslDistribution строка Имя локального распределения WSL, в котором будет выполняться тестовая среда.
Это значение необходимо, если среда type имеет значение wsl.
remoteUri строка URI, указывающий подключение к удаленному компьютеру. Например, ssh://user@hostname:22.
Это значение необходимо, если среда type имеет значение ssh.

Примечание.

Необходимо указать либо dockerImage dockerFile свойство, но не оба свойства.

Подключения к локальному контейнеру

Чтобы подключиться к контейнеру, запущенному локально, необходим Docker Desktop на локальном компьютере. При необходимости включите интеграцию WSL2 для повышения производительности.

Для Файла Dockerfile среда может быть указана в файле testEnvironments.json в корневом каталоге решения. В нем используются следующие свойства:

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

В следующем примере показан файл testenvironments.json для локального образа контейнера с именем <mcr.microsoft.com/dotnet/sdk>.

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

В следующем примере показан Dockerfile для выполнения тестов, предназначенных для .NET 5.0. Вторая строка гарантирует, что отладчик сможет подключиться к контейнеру и запустить его.

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 в корне решения с помощью следующей схемы. Замените <Ubuntu> значение wslDistribution свойства установкой дистрибутива WSL2.

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

SSL-подключения

Вы можете добавлять или удалять SSH-подключения в разделе Инструменты > Параметры > Кросс-платформенные > Диспетчер подключений. Выберите "Добавить ", чтобы ввести имя узла, порт и необходимые учетные данные.

Среда может быть указана в файле testEnvironments.json в корне решения с помощью следующей схемы. Замените <ssh://user@hostname:22> значение свойства значением remoteUri SSH.

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

Необходимые условия для удаленной среды Windows

Ознакомьтесь со следующими предварительными условиями для удаленной среды Windows.

  1. Убедитесь, что файловая система Windows Projected включена на удаленном компьютере. Чтобы включить его, можно запустить следующий код из окна PowerShell администратора:

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

    Перезапустите среду по мере необходимости.

  2. Убедитесь, что SSH настроен. См. сведения в статье Установка OpenSSH. Запустите сервер SSH, выполнив следующую команду в окне администрирования PowerShell:

    Start-Service sshd
    
  3. Убедитесь, что соответствующая среда выполнения .NET, необходимая для тестов. Вы можете скачать .NET для Windows.

  4. Подготовьте среду для отладки тестов:

    1. Установите номер SKU удаленных средств в удаленной среде.

    2. Запустите удаленный отладчик от имени администратора и убедитесь, что у пользователя Visual Studio есть разрешения на подключение.

Предварительные требования для удаленной среды Linux

Ознакомьтесь со следующими предварительными условиями для удаленной среды Linux.

  1. Убедитесь, что протокол SSH настроен и работает.

  2. Установите fuse3 с помощью диспетчера пакетов.

  3. Убедитесь, что соответствующая среда выполнения .NET, необходимая для тестов, установлена в удаленной среде Linux.

Использование обозревателя тестов для запуска и отладки удаленных тестов

Вот как можно использовать обозреватель тестов для запуска и отладки тестов удаленной среды.

  • Активная среда выбирается с помощью раскрывающегося списка на панели инструментов обозревателя тестов. В настоящее время может быть активна только одна тестовая среда.

    Раскрывающийся список удаленных сред тестирования в Обозревателе тестов

  • После выбора среды тесты обнаруживаются и выполняются в новой среде.

    Обнаружение и выполнение тестов в удаленных средах

  • Теперь вы можете выполнять и отлаживать тесты в удаленных средах.

    Просмотр результатов теста из удаленной среды в Обозревателе тестов

  • Обозреватель тестов может предложить установить некоторые отсутствующие предварительные требования среды и попытаться установить отсутствующие зависимости. Однако основная часть подготовки удаленной среды составляет до спецификации пользователя.