远程测试(试验性预览)
通过远程测试,开发人员可将 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/core/sdk>
的本地容器映像的 testenvironments.json 文件。
{
"version": "1",
"environments": [
{
"name": "linux dotnet-core-sdk-3.1",
"type": "docker",
"dockerImage": "mcr.microsoft.com/dotnet/core/sdk"
}
]
}
下面的示例演示了一个 Dockerfile,它用于运行面向 .NET 5.0 的测试。 第二行确保调试程序可在容器中连接并运行。
FROM mcr.microsoft.com/dotnet/core/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 运行时。
使用测试资源管理器运行和调试远程测试
下面介绍如何使用测试资源管理器来运行和调试远程环境测试。
通过测试资源管理器工具栏中的下拉菜单选择处于活动状态的环境。 目前,一次只能有一个测试环境处于活动状态。
选择环境后,将会在新环境中发现并运行测试。
现在远程运行测试,并在环境中调试测试!
测试资源管理器可能会提示你安装一些缺少的环境必备项,并尝试安装缺少的依赖项。 不过,远程环境的大部分预配取决于用户的规范。
相关内容
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈