111

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

4

8 回答 8

171

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

Visual Studio 2019
Visual Studio 2017(127MB 磁盘空间,小于下载空间)
Visual Studio 2015 及更早版本:访问https://www.visualstudio.com/vs/older-downloads/并按照说明操作

这安装了从命令行运行 mstest.exe 所需的一切,并且比 Visual Studio 轻得多。如果我没记错的话,大约 500mb 的下载和大约 300mb 的安装测试代理。

于 2012-02-06T15:27:46.030 回答
19

这个答案专门针对 Visual Studio 2017,答案是yes。请参阅此答案以了解如何定位MSBuild.exe和/或MSTest.exe可执行文件。

  • 如果您只需要构建您的单元测试项目,请将包安装MSTest.TestFramework到这些项目中并从中删除对Microsoft.VisualStudio.QualityTools.UnitTestFramework它们的引用。现在您只需安装Visual Studio 2017 构建工具并调用msbuild.exe以执行构建。
  • 如果您还需要运行测试,事情会变得更加棘手:
    • 最简单的解决方案是安装 VS2017 社区版(包括 msbuild 和 mstest)——但我不确定这是否合法,而且我不是律师,所以要小心!
    • 一个法律上更安全的解决方案(就磁盘空间而言更轻)是安装Visual Studio 2017 测试代理然后安装 Visual Studio 2017 的 构建工具确切的顺序至关重要1);这会给你MSTest.exevstest.console.exe然后你可以打电话给。请注意,实际上弄清楚这些可执行文件所在的位置是一件痛苦的事,因为它们不会存在于与MSBuild.exeBuild Tools 相同的目录结构中。

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

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

于 2017-05-17T05:00:09.143 回答
5

@crocpulsar,您需要在构建服务器上安装 Visual Studio,但您不需要购买额外的许可证

在没有安装 VS 的情况下让 build & MSTest 工作的依赖太多了,而且绝对不支持。

只要启动构建的人有许可证,构建服务器就不需要许可证。自 2005 年的黑暗日子以来就是这种情况,只要有版本平价就可以了。

如果您团队中的每个人都拥有 Ultimate,那么您可以自由地将其安装在构建服务器上;但如果您的团队成员之一拥有 Premium,那么您最好在构建服务器上安装 Premium。这也启用了许多其他位,例如代码覆盖率、测试影响分析和架构验证等。

于 2010-08-07T21:54:16.970 回答
4

我认为您可能可以,但绝对不支持。

我发现这篇博客文章是由声称在没有安装 Visual Studio 的情况下运行 MSTest 的人撰写的。

于 2010-08-04T05:47:00.440 回答
2

我只是在没有安装 Visual Studio 2017 IDE 的情况下在我的服务器上运行它。我的要求是

  • 构建项目
  • 构建测试项目
  • 使用 VSTest 运行测试(我相信这与 MSTest 的过程类似)

我必须将其他答案中所述的几件事结合起来,然后再结合这里的另一件事。

VS2017:

  1. BuildTools - 这可以在Microsoft 下载页面上找到,然后向下滚动到“Visual Studio 2017 工具”->“Visual Studio 2017 构建工具”
  2. TestAgent - 这可以在Microsoft 下载页面上找到,然后向下滚动到“Visual Studio 2017 工具”->“Visual Studio 2017 代理”
  3. 包含 Visual Studio 单元测试 dll 的Nuget 包- 可以在此处找到

第 3 步是解决以下问题:

“无法解析此引用。找不到程序集“Microsoft.VisualStudio.QualityTools.UnitTestFramework””

然后导致:

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

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

于 2018-07-11T18:36:03.417 回答
1

以下是我在不安装 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. 将 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 复制到“Mstest”目录
  4. 在“Mstest”文件夹中创建“程序集”目录
  5. 将所有 v11 Microsoft.VisualStudio.QualityTools.*.dll 从 C:\Windows\assembly 提取到“Mstest/assemblies”目录
  6. 复制所有“v11”Microsoft.VisualStudio.QualityTools。.dll 和 Microsoft.VisualStudio.TestTools。.dll 从 C:\Windows\Microsoft.NET\assembly\GAC_MSIL 到 'Mstest/assemblies'
  7. 复制所有 v11 Microsoft.VisualStudio.QualityTools。.dll 和 Microsoft.VisualStudio.TestTools。.dll 从 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies 到 'Mstest/assemblies'
  8. 将“程序集”添加到“Mstest.exe.config”中的“privatePath”属性
  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”中的“privatePath”属性
  12. 将“msdia110.dll”从“C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Packages\Debugger”复制到“MsTest/assemblies”
  13. 使用 c:/windows/syswow64/regsvr32.exe /i '../mstest/assemblies/msdia110.dll' 注册“msdia110.dll”(这引发了一个错误,但由于某种原因它仍然有效。我运行了几次次并在我检查之前尝试了不同的 regsvr32.exe 版本,但它在注册表中)

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

调试 MsTest 执行错误:

添加到“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>
于 2013-04-12T00:02:21.587 回答
0

MSTest 是为 .NET Core用户发布的。该公告有该dotnet工具的使用示例。我还没有想好如何获得独立的mstest可执行文件。

于 2016-08-30T13:35:22.760 回答
0

如果您需要运行 mstest.exe webtest 工具,那么您可以安装 Visual Studio Enterprise 试用版并确保在运行测试的帐户下至少运行一次(只需启动它),无需执行任何其他操作。因此,如果您的测试在系统帐户下运行,那么您需要使用以下内容

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"
于 2018-06-26T15:43:36.693 回答