通过远程测试,开发人员可将 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 localRoot string [可选] 本地计算机上的路径(绝对目录或相对于解决方案目录的路径),该目录投影到远程环境中。 如果未指定,则默认值为 git 存储库上下文中的存储库根目录(在 Visual Studio 2022 版本 17.1 及更高版本上)。 在 git 存储库外部,默认值为解决方案目录。 指示远程环境的类型。 值可以是 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 ,则此值是必需的。

    本地容器连接

    若要连接到本地运行的容器,必须在本地计算机上安装 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 用户具有连接权限。

  •