我想使用 mstest.exe 在构建服务器上运行我的单元测试,但我不想在构建服务器上安装 Visual Studio。我可以在没有 Visual Studio 的情况下只安装 MSTest 吗?
8 回答
可以在没有 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 的安装测试代理。
这个答案专门针对 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.exe
,vstest.console.exe
然后你可以打电话给。请注意,实际上弄清楚这些可执行文件所在的位置是一件痛苦的事,因为它们不会存在于与MSBuild.exe
Build Tools 相同的目录结构中。
最后,也是非常重要的一点:如果您确实使用MSTest.TestFramework
并且仍然需要能够从 Visual Studio IDE 中发现和运行测试,您还需要将其MSTest.TestAdapter
安装在您的单元测试项目中。
1:虽然 VS2017 支持并行安装,但它使用一个仅记录最近安装的注册表项。因此,如果您最后安装 Test Agent,则该键将指向其安装目录...但 Test Agent 不包含MSBuild.exe
,因此任何依赖此注册表项来确定可执行文件路径的代码都将失败。为什么微软不能将测试代理作为构建工具的可选部分(以便所有 EXE 都存在于同一目录层次结构中)是任何人的猜测。
@crocpulsar,您需要在构建服务器上安装 Visual Studio,但您不需要购买额外的许可证。
在没有安装 VS 的情况下让 build & MSTest 工作的依赖太多了,而且绝对不支持。
只要启动构建的人有许可证,构建服务器就不需要许可证。自 2005 年的黑暗日子以来就是这种情况,只要有版本平价就可以了。
如果您团队中的每个人都拥有 Ultimate,那么您可以自由地将其安装在构建服务器上;但如果您的团队成员之一拥有 Premium,那么您最好在构建服务器上安装 Premium。这也启用了许多其他位,例如代码覆盖率、测试影响分析和架构验证等。
我认为您可能可以,但绝对不支持。
我发现这篇博客文章是由声称在没有安装 Visual Studio 的情况下运行 MSTest 的人撰写的。
我只是在没有安装 Visual Studio 2017 IDE 的情况下在我的服务器上运行它。我的要求是
- 构建项目
- 构建测试项目
- 使用 VSTest 运行测试(我相信这与 MSTest 的过程类似)
我必须将其他答案中所述的几件事结合起来,然后再结合这里的另一件事。
VS2017:
- BuildTools - 这可以在Microsoft 下载页面上找到,然后向下滚动到“Visual Studio 2017 工具”->“Visual Studio 2017 构建工具”
- TestAgent - 这可以在Microsoft 下载页面上找到,然后向下滚动到“Visual Studio 2017 工具”->“Visual Studio 2017 代理”
- 包含 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” )
以下是我在不安装 VS 2012 的情况下让构建服务器运行 MsTest 所采取的步骤:
- 在 c:\dev 中创建了“Mstest”目录文件夹。
- 将“Mstest.exe”和“Mstest.exe.config”从 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE 复制到“Mstest”目录
- 将 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 复制到“Mstest”目录
- 在“Mstest”文件夹中创建“程序集”目录
- 将所有 v11 Microsoft.VisualStudio.QualityTools.*.dll 从 C:\Windows\assembly 提取到“Mstest/assemblies”目录
- 复制所有“v11”Microsoft.VisualStudio.QualityTools。.dll 和 Microsoft.VisualStudio.TestTools。.dll 从 C:\Windows\Microsoft.NET\assembly\GAC_MSIL 到 'Mstest/assemblies'
- 复制所有 v11 Microsoft.VisualStudio.QualityTools。.dll 和 Microsoft.VisualStudio.TestTools。.dll 从 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\PrivateAssemblies 到 'Mstest/assemblies'
- 将“程序集”添加到“Mstest.exe.config”中的“privatePath”属性
- 导出 'HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/VisualStudio/11.0/Enterprise/QualityTools 并将其应用到 hudson box。
- 将 QTAgent32.exe 和 QTAgent32.exe.config 从 C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE 复制到“MsTest”目录
- 将“程序集”添加到“QTAgent32.exe.config”中的“privatePath”属性
- 将“msdia110.dll”从“C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Packages\Debugger”复制到“MsTest/assemblies”
使用 c:/windows/syswow64/regsvr32.exe /i '../mstest/assemblies/msdia110.dll' 注册“msdia110.dll”(这引发了一个错误,但由于某种原因它仍然有效。我运行了几次次并在我检查之前尝试了不同的 regsvr32.exe 版本,但它在注册表中)
添加环境变量“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>
MSTest 是为 .NET Core用户发布的。该公告有该dotnet
工具的使用示例。我还没有想好如何获得独立的mstest
可执行文件。
如果您需要运行 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"