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


108

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


您能否提供更多细节。什么版本的?建立服务器?等等
理查德·班克斯

Answers:


168

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

Visual Studio的2017年(127MB硬盘空间,小于下载)
的Visual Studio 2015年(128MB的设置,需要2GB磁盘空间)
的Visual Studio 2012(224MB)
的Visual Studio 2013(287MB)
的Visual Studio 2010(515MB)

这将安装从命令行运行mstest.exe所需的所有内容,并且比Visual Studio轻得多。如果我没记错的话,大约需要500mb下载,大约300mb左右只能安装测试代理。

更新

对于VS 2017之前的版本,请查看此处:

https://www.visualstudio.com/vs/older-downloads/


在安装TestAgent和TestController之后,将MsTest.exe放在哪里?
Evgeny Levin

3
C:\ Program Files \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ MSTest.exe
13年

1
是否有Visual Studio 2008的代理?
Tomas Kubes 2014年

3
安装Visual Studio 2012测试代理后,我的小组遇到了问题。我们认为它修改了一些注册表值,因此使同一台计算机上的Visual Studio 2010内容混乱。谨防。
stephen 2014年

1
2015年的链接已死。现在可以通过visualstudio.com/downloads/?q=agents
-Onots

18

该答案专门与Visual Studio 2017有关,答案是yes。但是请注意,Microsoft(仍)不提供任何形式的官方API来查找相关的可执行文件(MSBuild.exeMSTest.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都生活在同一目录层次结构中)的原因是为什么?


通过测试代理方法安装,但mstest.exe File extension specified '.webtest' is not a valid test extension.对于我仍然失败。
格雷戈里·苏瓦利安

现在有了vswhere-看到其他问题,例如使用它的“以编程方式找到VS2017安装目录 ”或“ 找不到MSBuild.exe,cmd.exe ”。
怀河李

@WaiHaLee vswhere总比没有强,但是您仍然必须对MSBuild相对于VS安装目录的位置进行假设...如果(何时?)Microsoft决定重新定位这些可执行文件中的任何一个,则该假设不再有效。为什么Microsoft无法或不会创建一种编程方式来获取通往MSBuild / MSTest / VSTest的路径(与VS安装目录相对,没人真正在乎的)与我无关。
伊恩·肯普

是的,那是/不是那里的游戏很烦人。我确定他们有他们的理由,但是....
李慧夏

@Ian Kemp在上面,我已经安装了测试代理和构建工具,但是收到错误消息No test is available in C:\Users\..\Desktop\MyExeName.exe... 。我对SO提出了一个问题。如果您有任何线索,我们将不胜感激。
user1207289

4

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

我发现此博客文章由声称在未安装Visual Studio的情况下可以运行MSTest的人撰写。


如果MS决定更改其实现,则任何带有单词Hacking的URL都确实需要质疑努力的价值,因为您的环境可能易变,每次Windows更新都可能发生意外情况(我们定期进行更新,对吗?)。
罗素

在这种情况下,Windows更新似乎不太可能破解黑客。但是,较新版本的mstest(例如,在VS的较新版本或Service Pack中)可能会有所不同。
布朗

@Russell-就个人而言,我要么掏出额外的VS许可证,要么直接使用NUnit。
贾斯汀

感谢所有答复,我将获得一个额外的VS许可证。
yang-qu 2010年

1
作为上述Blog Post的作者,我可以证明它确实有效,并且很难破解。至少对于VS2008。我还没有在VS2010上看到它。MSTest如此深入地集成到VS中是该测试套件的一个巨大弱点,但是我认为MS不会解决它,因为它鼓励人们使用Team System。
foxxtrot 2010年

4

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

在没有安装VS的情况下,有太多依赖关系可以使build&MSTest正常工作,并且绝对不支持它。

只要开始构建的人有许可证,就不需要构建服务器。从2005年的黑暗时期开始就是这种情况,只要有版本奇偶校验就可以了。

如果您团队中的每个人都有Ultimate,那么您可以自由地将其安装在构建服务器上。但是如果您的团队成员之一具有Premium,那么理想情况下,您应该在构建服务器上安装Premium。这还可以实现许多其他功能,例如代码覆盖率,测试影响分析和体系结构验证。


作为参考,这里是Microsoft在此blogs.msdn.com/b/jeffbe/archive/2008/03/18/…
Maslow 2010年

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. Nuget程序包包含Visual Studio单元测试dll-可在此处找到

步骤3是解决以下问题:

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

然后导致:

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

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


1

这是我为使构建服务器在不安装VS 2012的情况下运行MsTest所采取的步骤:

  1. 在c:\ dev中创建了“ Mstest”目录文件夹。
  2. 从C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ IDE复制'Mstest.exe'和'Mstest.exe.config'到'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。.dlls和Microsoft.VisualStudio.TestTools。.dll从C:\ Windows \ Microsoft.NET \ assembly \ 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 \ PrivateAssemblies到'Mstest / assemblies'
  8. 将“程序集”添加到“ Mstest.exe.config”中的“ privatePath”属性中
  9. 导出'HKEY_LOCAL_MACHINE / SOFTWARE / Wow6432Node / Microsoft / VisualStudio / 11.0 / Enterprise / QualityTools,并将其应用于hudson框。
  10. 从C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ IDE将QTAgent32.exe和QTAgent32.exe.config复制到'MsTest'目录
  11. 将“程序集”添加到“ QTAgent32.exe.config”中的“ privatePath”属性中
  12. 将'msdia110.dll'从'C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ Packages \ Debugger'复制到'MsTest / assembly'
  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>

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"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.