远程测试(试验性预览)
通过远程测试,开发人员可将 Visual Studio 2022 连接到远程环境来运行和调试测试。 如果有跨平台开发人员在将代码部署到多个不同的目标环境中,例如不同的 Windows 或 Linux 操作系统,那么他们适合使用此使用。 例如,开发人员通常将更改推送到 CI 管道,以从 Linux 上运行的测试获取反馈。 而有了远程测试功能,你可将测试资源管理器连接到远程环境,直接从 Visual Studio 运行 Linux 测试。
要求
以下要求适用于远程测试的实验版本:
必须运行 Visual Studio 2022 Update 17.0 预览版 3 或更高版本。
目前,该功能仅支持 .NET 和 .NET Framework 测试。
- 如果对其他语言的远程测试支持感兴趣,可以提交建议或投票支持现有建议。 支持 C++ 远程测试。
目前,此功能支持远程环境中的 Windows、Ubuntu 和 Debian 映像。 对于 .NET Framework,仅支持远程 Windows 环境。
目前,环境的大部分预配由用户的规范决定。
用户必须在目标环境中安装必需的依赖项。 例如,如果测试面向 .NET 6.0,则需要确保容器通过 Dockerfile 安装了 .NET 6.0。 可能会有提示在远程环境中安装 .NET Core,这是远程运行和发现测试所必需的。
计划使用“输出”>“测试”窗格监视到远程环境的连接状态。
例如,如果容器停止,“输出”>“测试”窗格中会显示一条消息。 该功能可能无法检测所有方案,因此,如果看起来像断开了连接,请计划检查你的输出。 特别是,如果“输出”窗格未设置为“测试”,则可能不会立即看到消息。 如果断开了连接,你可使用测试资源管理器中的环境下拉菜单将连接设置回本地环境,然后再次选择远程环境来重新连接。
设置远程测试环境
环境是使用解决方案根目录中的 testenvironments.json 文件指定的。 json 文件结构实现以下架构:
{
"version": "1", // value must be 1
"environments": [
{ "name": "<unique name>", ... },
...
]
}
testenvironments.json 中环境的属性
testenvironments.json 文件具有以下环境属性。
properties | 类型 | 说明 |
---|---|---|
name |
string | 测试资源管理器中显示的用户友好环境名称。 它在 testEnvironments.json 文件中必须是唯一的。 |
localRoot |
string | [可选] 本地计算机上的路径(绝对目录或相对于解决方案目录的路径),该目录投影到远程环境中。 如果未指定,则默认值为 git 存储库上下文中的存储库根目录(在 Visual Studio 2022 版本 17.1 及更高版本上)。 在 git 存储库外部,默认值为解决方案目录。 |
type |
enum | 指示远程环境的类型。 值可以是 docker 、wsl 或 ssh 。 |
dockerImage |
string | 在 Docker 环境中加载的 Docker 映像的名称。 如果环境 type 是 docker ,则此值是必需的。 |
dockerFile |
string | Docker 文件的路径(相对于解决方案目录)以生成映像并在 Docker 环境中加载。 如果环境 type 是 docker ,则此值是必需的。 |
wslDistribution |
string | 要在其中运行测试环境的本地 WSL 分发的名称。 如果环境 type 是 wsl ,则此值是必需的。 |
remoteUri |
string | 指定到远程计算机的连接的 URI。 例如 ssh://user@hostname:22 。 如果环境 type 是 ssh ,则此值是必需的。 |
注意
必须指定 dockerImage
或 dockerFile
属性,但不能同时指定这两个属性。
本地容器连接
若要连接到本地运行的容器,必须在本地计算机上安装 Docker 桌面。 还可以选择启用 WSL2 集成,以获得更好的性能。
对于 Dockerfile,可以在解决方案根目录中的 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"
}
]
}
下面的示例演示了一个 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 文件中指定环境。 将 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 环境的先决条件
查看远程 Windows 环境的以下先决条件。
确保在远程计算机上启用了 Windows 投影文件系统。 可以从管理员 PowerShell 窗口运行以下代码以启用它:
Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart
根据需要重启环境。
确保已设置 SSH。 可以在安装 OpenSSH 中查看这些步骤。 从管理员 PowerShell 窗口运行以下命令来启动 SSH 服务器:
Start-Service sshd
确保安装测试所需的适当 .NET 运行时。 可以下载适用于 Windows 的 .NET。
准备用于调试测试的环境:
在远程环境中安装远程工具 SKU。
以管理员身份启动远程调试器,并确保 Visual Studio 用户具有连接权限。
远程 Linux 环境的先决条件
查看远程 Linux 环境的以下先决条件。
确保 SSH 已配置且正在运行。
使用包管理器安装
fuse3
。确保远程 Linux 环境中安装了测试所需的适当 .NET 运行时。
使用测试资源管理器运行和调试远程测试
下面介绍如何使用测试资源管理器来运行和调试远程环境测试。
通过测试资源管理器工具栏中的下拉菜单选择处于活动状态的环境。 目前,一次只能有一个测试环境处于活动状态。
选择环境后,将会在新环境中发现并运行测试。
现在远程运行测试,并在环境中调试测试!
测试资源管理器可能会提示你安装一些缺少的环境必备项,并尝试安装缺少的依赖项。 不过,远程环境的大部分预配取决于用户的规范。