如何在Visual Studio 2010中精确计算测试时间

时间:2011-10-19 01:13:28

标签: visual-studio-2010 unit-testing mstest

我为我的项目提供了一套单元测试,我使用visual studio test runner运行。我想知道测试运行多长时间。测试运行详细信息屏幕显示运行的开始和结束时间,但仅显示最接近的秒数。我的测试套件目前只需不到一秒钟的时间就可以完成,所以我无法判断我的50套测试套件是否正在使用< 0.1秒(好!)或最多1秒(不好!)。

有没有办法提高这种精确度?

3 个答案:

答案 0 :(得分:8)

在根解决方案目录中,测试运行后会有一个名为Test Results的文件夹。如果你查看那里,每次运行都会吐出一个.TRX文件,其中包含测试运行的时间戳作为其名称的一部分。打开此文件,您将看到它是一个XML文件,其中包含一系列有关测试运行的难以阅读的信息。如果您查找XML节点“UnitTestResult”,则每个节点都将具有一个名为“duration”的属性。这将告诉您每个测试运行多长时间(假设测试已运行)。

我对此有很多经验,因为我编写了一个开源实用程序,它接收这些TRX文件,解析它们,并生成结果的HTML报告。它向您展示的一件事是测试持续时间,对于单个测试,聚合测试类以及整个测试运行。

为免我的工具插件出现,我不会发布链接,除非有人好奇。但是,足以说明,您可以从TRX文件获得测试的执行时间,无需调试跟踪或控制台或编辑测试代码。

编辑:精度高得离谱。对于单个单元测试,示例条目为00:00:00.0015890。

答案 1 :(得分:6)

让所有测试类继承自进行测量的基础测试类。

在一般情况下,您需要将输出消息传递给更有用的东西(如记录器)。

[TestClass]
public abstract class TestClassBase2
{
    protected TestContext testContextInstance;

    public TestContext TestContext
    {
        get { return testContextInstance; }
        set { testContextInstance = value; }
    }

    protected System.Diagnostics.Stopwatch _stopWatch;

    [TestInitialize]
    public void TestInitializeBase()
    {
        _stopWatch = System.Diagnostics.Stopwatch.StartNew();
    }


    [TestCleanup]
    public void TestCleanupBase()
    {
        System.Diagnostics.Debug.WriteLine("Done - Total Test time: {0} ms - {1}",
                                            _stopWatch.ElapsedMilliseconds, TestContext.TestName);
    }
}

[TestClass]
public class TempTests : TestClassBase2
{
    [TestMethod]
    public void TempTest()
    {
        // outputs: 
        // Done - Total Test time: 3 ms - TempTest
    }
}

答案 2 :(得分:1)

您可以随时运行单元测试,然后将总时间除以运行时间。这基本上是一个平均值,所以如果你正在寻找低点或高点,那么这不是最好的事情。