2016-03-03 97 views
0

我有以下Selenium测试:如何测量每一行的执行时间在C#

[TestMethod] 
public void Edit() 
{ 
    Driver.GoToAdministrera(); 

    Driver.ClickLink(strings.ActorSettings); 

    Driver.SendKeysToId(text, "Attributes"); 

    Driver.Navigate().Refresh(); 

    Driver.AssertTextInId(string.Empty, "Attributes"); 

    Driver.SendKeysToId(text, "Attributes"); 

    Driver.ClickClass("submitbutton"); 

    Thread.Sleep(3000); 

    Driver.Navigate().Refresh(); 

    Driver.AssertTextInId(text, "Attributes"); 
} 

它是缓慢的,我想分析其中的瓶颈。我知道我可以描述测试,但是这会给我一些长期的堆栈跟踪和热点。我只想知道每行的执行时间。

我知道我可以使用StopWatch类。我甚至可以这样做一个帮助方法是:

protected static void Time(Action action) 
{ 
    var sw = new Stopwatch(); 
    sw.Reset(); 
    sw.Start(); 

    action(); 

    sw.Stop(); 
    Console.WriteLine(sw.Elapsed + " " + action.Method.Name); 
} 

但是这需要我修改我的测试。

有谁知道一种方法来获取执行一段代码中的每一行的时间?

+0

如果您使用Visual Studio 2012或更新版本进行开发,为什么不使用内置工具来分析代码和分析应用程序? – Alex

+0

这会给我一些长的堆栈跟踪和热点。我只想知道每行的执行时间。 – Drutten

+1

如果您使用该分析器,只需查找以上每个例程的包含百分比。该剖析器有一个缺点 - 它会在I/O或其他堵塞时丢弃样本,所以如果这是缓慢的原因,它将不会显示它。仪表模式对你来说可能已经足够好了,尽管它丢失了行级别的信息。始终有效的方法是[*这一个*](http://stackoverflow.com/a/378024/23771)。 –

回答

1

如果您使用Visual Studio 2015年或更高版本可以运行在调试器下测试并寻找PerfTips值。逐行进行测试,您可以获得测试每行所耗用时间的估计值,这可能是您需要的。

1
DateTime start = DateTime.Now; 
// Do Processing 
Driver.GoToAdministrera(); 
DateTime end = DateTime.Now; 
Console.WriteLine("Time taken : " + (end - start)); 
+0

是的,但它需要我修改我的测试。 – Drutten

+1

'Stopwatch'将成为*更好的选择,然后'DateTime' –