Удаленное тестирование (экспериментальная предварительная версия)
Удаленное тестирование позволяет разработчикам подключать Visual Studio 2022 к удаленным средам для запуска и отладки тестов. Эта функция полезна для разработчиков на разных платформах, которые развертывают код в нескольких целевых средах, таких как разные операционные системы Windows или Linux. Например, разработчик обычно отправляет изменения в конвейер CI, чтобы получить отзыв от тестового запуска в Linux. С помощью функции удаленного тестирования вы можете выполнять тесты Linux прямо из Visual Studio, подключив обозреватель тестов к удаленной среде.
Требования
Следующие требования применяются к экспериментальной версии удаленного тестирования:
Необходимо запустить Visual Studio 2022 с обновлением 17.0 ( предварительная версия 3 или более поздняя версия).
В настоящее время эта функция поддерживает только тесты .NET и платформа .NET Framework.
- Если вы заинтересованы в поддержке удаленного тестирования для других языков, вы можете подать предложение или добавить существующее предложение. Поддержка удаленного тестирования C++.
В настоящее время функция поддерживает образы 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.
Убедитесь, что файловая система Windows Projected включена на удаленном компьютере. Чтобы включить его, можно запустить следующий код из окна PowerShell администратора:
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart
Перезапустите среду по мере необходимости.
Убедитесь, что SSH настроен. См. сведения в статье Установка OpenSSH. Запустите сервер SSH, выполнив следующую команду в окне администрирования PowerShell:
Start-Service sshd
Убедитесь, что соответствующая среда выполнения .NET, необходимая для тестов. Вы можете скачать .NET для Windows.
Подготовьте среду для отладки тестов:
Установите номер SKU удаленных средств в удаленной среде.
Запустите удаленный отладчик от имени администратора и убедитесь, что у пользователя Visual Studio есть разрешения на подключение.
Предварительные требования для удаленной среды Linux
Ознакомьтесь со следующими предварительными условиями для удаленной среды Linux.
Убедитесь, что протокол SSH настроен и работает.
Установите
fuse3
с помощью диспетчера пакетов.Убедитесь, что соответствующая среда выполнения .NET, необходимая для тестов, установлена в удаленной среде Linux.
Использование обозревателя тестов для запуска и отладки удаленных тестов
Вот как можно использовать обозреватель тестов для запуска и отладки тестов удаленной среды.
Активная среда выбирается с помощью раскрывающегося списка на панели инструментов обозревателя тестов. В настоящее время может быть активна только одна тестовая среда.
После выбора среды тесты обнаруживаются и выполняются в новой среде.
Теперь вы можете выполнять и отлаживать тесты в удаленных средах.
Обозреватель тестов может предложить установить некоторые отсутствующие предварительные требования среды и попытаться установить отсутствующие зависимости. Однако основная часть подготовки удаленной среды составляет до спецификации пользователя.