远程测试(试验性预览)

通过远程测试,开发人员可将 Visual Studio 2022 连接到远程环境来运行和调试测试。 如果有跨平台开发人员在将代码部署到多个不同的目标环境中,例如不同的 Windows 或 Linux 操作系统,那么他们适合使用此使用。 例如,开发人员通常将更改推送到 CI 管道,以从 Linux 上运行的测试获取反馈。 而有了远程测试功能,你可将测试资源管理器连接到远程环境,直接从 Visual Studio 运行 Linux 测试。

要求

以下要求适用于远程测试的实验版本:

  • 必须运行 Visual Studio 2022 Update 17.0 预览版 3 或更高版本。

  • 目前,该功能仅支持 .NET 和 .NET Framework 测试。

  • 目前,此功能支持远程环境中的 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 指示远程环境的类型。 值可以是 dockerwslssh
dockerImage string 在 Docker 环境中加载的 Docker 映像的名称。
如果环境 typedocker,则此值是必需的。
dockerFile string Docker 文件的路径(相对于解决方案目录)以生成映像并在 Docker 环境中加载。
如果环境 typedocker,则此值是必需的。
wslDistribution string 要在其中运行测试环境的本地 WSL 分发的名称。
如果环境 typewsl,则此值是必需的。
remoteUri string 指定到远程计算机的连接的 URI。 例如 ssh://user@hostname:22
如果环境 typessh,则此值是必需的。

注意

必须指定 dockerImagedockerFile 属性,但不能同时指定这两个属性。

本地容器连接

若要连接到本地运行的容器,必须在本地计算机上安装 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 环境的以下先决条件。

  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. 确保远程 Linux 环境中安装了测试所需的适当 .NET 运行时。

使用测试资源管理器运行和调试远程测试

下面介绍如何使用测试资源管理器来运行和调试远程环境测试。

  • 通过测试资源管理器工具栏中的下拉菜单选择处于活动状态的环境。 目前,一次只能有一个测试环境处于活动状态。

    “测试资源管理器”中的远程测试环境下拉菜单

  • 选择环境后,将会在新环境中发现并运行测试。

    在远程环境中发现并执行测试

  • 现在远程运行测试,并在环境中调试测试!

    在“测试资源管理器”中查看远程环境中的测试结果

  • 测试资源管理器可能会提示你安装一些缺少的环境必备项,并尝试安装缺少的依赖项。 不过,远程环境的大部分预配取决于用户的规范。