29

Posts on the web suggest that you can profile tests in Visual Studio by right-clicking and selecting "Profile Test": http://adamprescott.net/2012/12/12/performance-profiling-for-unit-tests/ But I only see "Run Test" and "Debug Test" for my NUnit tests, and the same for xUnit.NET. What am I missing in order to profile tests? Is this just not supported in Community edition, or I am missing some configuration or component?

(It would seem odd if it's not supported in Community, given I can profile executables in Community, and thus could painfully work around this issue by creating an executable that runs the test, and profile that. Why support profiling executables but not profiling tests?)

重现 NUnit 的步骤:在 Visual Studio Community 2015 中创建新的 C# 库项目,将http://nunit.org/index.php?p=quickStartSource&r=2.6.4的内容粘贴到新文件中,安装 NuGet 包如下:

<packages>
  <package id="NUnit" version="2.6.4" targetFramework="net452" />
  <package id="NUnit.Runners" version="2.6.4" targetFramework="net452" />
  <package id="NUnitTestAdapter" version="2.0.0" targetFramework="net452" />
</packages>

甚至重新启动了 Visual Studio。测试显示在测试资源管理器中并且可以运行,但右键单击菜单上没有可用的“配置文件测试”选项。还尝试了 xUnit.net 的等效步骤,但没有任何乐趣。

4

3 回答 3

15

这就是我今天早些时候能够在 VS Community 2015 中对 NUnit 测试进行概要分析的方式。

将 NUnit 测试运行程序分析为可执行文件

  1. 确保您以管理员身份运行 VS2015 。
  2. 从工具栏中单击分析 > 性能分析器...。
  3. 选择性能向导并单击开始
  4. 第 1 页:就我而言,我想查看分配,所以我点击了.NET memory allocation
  5. 第 2 页:选中可执行文件(.EXE 文件)选项并继续。
  6. 第 3 页:在此页面上,您必须定义要运行的可执行文件。

    这将是nunit3-console.exeNUnit 的测试运行程序,或者是您的测试框架的任何等价物。

    • 可执行文件的完整路径是什么?C:\Program Files (x86)\NUnit.org\nunit-console\nunit3-console.exe
    • 命令行参数:bin\Debug\Test.dll --inprocess --test TestNamespace.TestClassName.Test_Method_Name
    • 工作目录:\\MAC\Home\Documents\GitHub\ApplicationName\Test

您需要将这些路径替换为对您的系统有意义的路径。该--inprocess开关使测试从 NUnit 进程内联运行。如果没有该开关,则会生成一个子进程,即使分析器似乎可以工作,您也只是在分析 nunit3-console.exe,而不是您自己的代码。

  1. 第 4 页:单击完成

    请记住,分析器将生成报告文件并将它们保存到您的工作目录。在我的例子中,由于我的工作目录是一个 UNC 共享,它需要我选择一个本地文件夹路径来保存报告,然后再启动分析器。

    应该会短暂出现一个终端窗口,其中包含 NUnit 运行程序输出。窗口会自动关闭,因此如果您看到一闪而过的红色文本,您将没有时间在错误消失之前阅读该错误。您可以将第 3 页的命令复制到命令提示符中,以便更轻松地阅读。

  2. 命令运行后(无论成功与否),您都应该获得一份报告,您可以在其中跟踪测试导致的分配次数。

不幸的是,小测试中的分配可能会被NUnit.Framework本身引起的分配所掩盖。我四处点击查看是否有办法将它们从结果中排除,但没有找到办法,所以我只是忽略了它们。

如果要分析不同的测试,可以打开性能资源管理器并右键单击nunit3-console.exe > Properties以更改命令行参数,然后单击Actions > Start Profiling以刷新报告。

结论

此解决方案成功地分析了单个 NUnit 测试的结果,但该声明带有一些警告。

它只比创建一个单独的可执行文件来分析稍微不那么令人讨厌,而且如果你需要进行一些非常敏感的分析,NUnit 分配出现在报告中的事实可能使它成为一个非初学者。

也许有更多 VS 2015 经验的人可以通过一些关于如何从报告中排除NUnit.Framework dll 的提示来帮助我改进这个答案?

于 2017-05-26T22:24:50.737 回答
7

可以使用分析 MSTest 测试(也可以使用测试适配器分析 nunit/xunit)vstest.console.exe

  • 从分析 -> 性能分析器中选择可执行程序作为目标
  • 提供vstest.console.exe(通常居住在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow)的路径
  • 提供参数作为<full path to test dll file>.dll /TestCaseFilter:"FullyQualifiedName~<namespace>.<test class>"参数
  • 如果您使用的是 nUnit 或 xUnit,则使用参数提供nunit 测试适配器或xunit 测试适配器路径/TestAdapterPathvstest.console.exe

有关如何向 vstest.exe 提供参数的更多信息

于 2017-07-11T07:25:23.347 回答
6

答案似乎在问题中引用的 Adam Prescott 页面的评论中:

2013 年 8 月 16 日下午 4:57

不幸的是,根据 MSDN,此功能仅在 Premium 和 Ultimate 版中可用。

http://msdn.microsoft.com/en-us/library/ms182372.aspx

评论中的链接目前指的是 Visual Studio 2015 版。2010页面清楚地显示了哪些版本的 Visual Studio 2010 支持分析。2012 和更高版本的页面省略了对哪些版本支持分析的明确声明。

于 2015-08-18T12:07:37.080 回答