我可以在不安装 Visual Studio 的情况下使用 mstest.exe 吗?

我想使用 mstest.exe 在构建服务器上运行我的单元测试,但是我不想在构建服务器上安装 Visual Studio。我可以只安装 MSTest 而不使用 Visual Studio 吗?

59508 次浏览

我认为你可能可以,但它肯定不支持。

我发现这篇博客文章的作者声称在没有安装 VisualStudio 的情况下 MSTest 仍然可以工作。

@ crocpulsar,您需要在构建服务器 但你无须购买额外牌照上安装 Visual Studio。

There are just way too many dependencies to getting build & MSTest to work without VS installed, and it is most definitely not supported.

As long as the person who starts the build has a license, you do not need one for the build server. This has been the case since the dark days of 2005, and as long as there is edition parity then you are OK.

如果团队中的每个人都有 Ultimate,那么您可以自由地在构建服务器上安装它; 但是如果您的团队成员之一有 Premium,那么您最好在构建服务器上安装 Premium。这还支持许多其他方面,比如代码覆盖率、测试影响分析和架构验证等。

可以在没有 Visual Studio 的情况下运行 mstest.exe。
下载一个 Visual Studio ISO 代理并在服务器上安装 测试剂:

Visual Studio 2019
Visual Studio 2017 (127MB disk space, less than that for download)
VisualStudio2015及以上版本: 请访问 https://www.visualstudio.com/vs/older-downloads/并遵循说明

这将安装从命令行运行 mstest.exe 所需的所有东西,并且比 Visual Studio 轻量级得多。~ 500mb 下载和 ~ 300mb 左右安装只是测试代理,如果我没记错的话。

下面是我在不安装 VS 2012的情况下让构建服务器运行 MsTest 的步骤:

  1. 在 c: dev 中创建“ Mstest”目录文件夹。
  2. 将“ Mstest.exe”和“ Mstest.exe.config”从 C: Program Files (x86) Microsoft Visual Studio 11.0 Common7 IDE 复制到“ Mstest”目录
  3. Copy Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll to 'Mstest' directory
  4. 在“ Mstest”文件夹中创建“ Assembly”目录
  5. 从 C: Windows 程序集中提取所有 v11 Microsoft.VisualStudio.QualityTools.* . dlls 到“ Mstest/Assembly”目录
  6. 将所有‘ v11’Microsoft. VisualStudio. QualityTools.. dlls 和 Microsoft. VisualStudio. TestTools。.dlls 从 C: Windows Microsoft.NET 程序集 GAC _ MSIL 复制到‘ Mstest/Assembly’
  7. 将所有 v11 Microsoft. VisualStudio. QualityTools.. dlls 和 Microsoft. VisualStudio. TestTools。.dll 从 C: Program Files (x86) Microsoft Visual Studio 11.0 Common7 IDE PrivateAssembly 复制到“ Mstest/Assembly”
  8. 在‘ Mstest.exe.config’中的‘ private atePath’属性中添加‘ Assembly’
  9. 导出“ HKEY _ LOCAL _ MACHINE/SOFTWARE/Wow6432Node/Microsoft/VisualStudio/11.0/Enterprise/QualityTools 并将其应用于 Hudson box。
  10. 将 QTAgent32.exe 和 QTAgent32.exe.config 从 C: Program Files (x86) Microsoft Visual Studio 11.0 Common7 IDE 复制到“ MsTest”目录
  11. 在‘ QTAgent32.exe.config’中的‘ private atePath’属性中添加‘ Assembly’
  12. 将“ msdia110.dll”从“ C: Program Files (x86) Microsoft Visual Studio 11.0 Common7 Packages Debugger”复制到“ MsTest/Assembly”
  13. Register 'msdia110.dll' with c:/windows/syswow64/regsvr32.exe /i '../mstest/assemblies/msdia110.dll'(This threw an error, but for some reason it still worked. I ran it a couple times and tried different regsvr32.exe versions before I checked, but it's there in the registry)

  14. 添加环境变量“ mSTEST _ HOME”并将其设置为“ c: dev MSTEST”或您的路径。我在构建脚本中使用了环境变量。

调试 MsTest 执行错误:

Add to 'MsTest.exe.config'

<system.diagnostics>
<trace autoflush="true" indentsize="4">
<listeners>
<add name="EqtListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\MsTest.log" />
</listeners>
</trace>
<switches>
<add name="EqtTraceLevel" value="Verbose" />
</switches>
</system.diagnostics>

MSTest 是 announced for .NET Core用户。公告中有 dotnet工具的用法示例。我还没想好如何获得独立的 mstest可执行文件。

这个答案特别适用于 VisualStudio2017,答案是 是的。关于如何定位 MSBuild.exe和/或 MSTest.exe可执行文件,请参考 这个答案

  • 如果您只需要 build您的单元测试项目,那么将包 MSTest.TestFramework安装到这些项目中,并从这些项目中删除对 Microsoft.VisualStudio.QualityTools.UnitTestFramework的引用。现在您所需要做的就是安装 Visual Studio 2017 Build Tools并调用 msbuild.exe来执行构建。
  • 如果你也需要 快跑测试,事情就变得棘手了:
    • 最简单的解决方案是安装 VS2017 Community Edition (包括 msbuild 和 mstest)-但我不确定这是否合法,而且我不是律师,所以要小心!
    • 安装 VisualStudio2017测试代理那么 VisualStudio2017版本工具(确切的顺序是至关重要的1)是一个法律上更安全的解决方案(在磁盘空间方面也更轻便) ; 这样你就可以调用 MSTest.exevstest.console.exe。请注意,实际上弄清楚这些可执行文件驻留在哪里是一件痛苦的事情,因为它们不会存在于与构建工具中的 MSBuild.exe相同的目录结构中。

最后,也是非常重要的一点: 如果您确实使用了 MSTest.TestFramework,并且仍然需要能够在 Visual Studio IDE 中发现和运行测试,那么您还需要在您的单元测试项目中安装 MSTest.TestAdapter

1: 虽然 VS2017支持并行安装,但它只使用一个注册表项来记录最近的安装。因此,如果您最后安装 Test Agent,那么这个键将指向它的安装目录... ... 但是 Test Agent 不包含 MSBuild.exe,因此任何依赖这个注册表项来计算可执行文件路径的代码都将失败。为什么微软不能将测试代理作为构建工具的一个可选部分(这样所有的 EXE 都存在于同一个目录层次结构中)是任何人的猜测。

如果您需要运行 mstest.exe webtest 工具,那么您可以安装 Visual Studio Enterprise 试用版,并确保至少运行一次(只要启动它) ,在这个帐户下测试将运行,不需要做任何额外的事情。因此,如果您的测试在 System 帐户下运行,那么您需要使用下面这样的代码

PS C:\agent> psexec -s cmd.exe
C:\Windows\system32>"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\mstest.exe"
Microsoft (R) Test Execution Command Line Tool Version 15.0.27520.0
Copyright (c) Microsoft Corporation. All rights reserved.


Please specify tests to run, or specify the /publish switch to publish results.
For switch syntax, type "MSTest /help"

我只是在没有安装 VisualStudio2017IDE 的情况下让它在我的服务器上工作

  • 建立项目
  • 构建测试项目
  • Run tests using VSTest (I believe it is a similar process for MSTest)

I had to do a combination of a few things stated in other answers and then also another one 给你.

VS2017:

  1. BuildTools -这可以在 微软下载页面中找到,然后向下滚动到“ Tools for Visual Studio 2017”-> “ Build Tools for Visual Studio 2017”
  2. TestAgent -这可以在 Microsoft downloads page中找到,然后向下滚动到“ Tools for Visual Studio 2017”-> “ Agent for Visual Studio 2017”
  3. Nuget Package 包括视觉工作室单元测试 dll-这可以在这里找到

第三步是修复以下问题:

”无法解析此引用。无法定位程序集“ Microsoft.VisualStudio.QualityTools.UnitTestFramework”

然后导致了:

”错误 CS0234: 命名空间‘ Microsoft’中不存在类型或命名空间名称‘ VisualStudio’(是否缺少程序集引用?)

我没有添加任何参考项目。但是,vstest.console.exe 的路径包含在 TestAgent 文件夹中(对我来说,它是“ C: Program Files (x86) Microsoft Visual Studio 2017 TestAgent Common7 IDE CommonExtended Microsoft TestWindow”)