2016-03-03 144 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' –