2013-12-20 143 views
0

我們正在編寫VS2013上的MVC/C#應用程序。使用測試運行器進行Web性能測試

我們使用selenium web驅動進行UI測試,並且圍繞它編寫了一個框架,使得該過程更具說明性,程序更少。下面是一個例子

[Test, Category("UITest")] 
    public void CanCreateMeasureSucceedWithOnlyRequiredFields() 
    { 
     ManageMeasureDto dto = new ManageMeasureDto() 
     { 
      Name = GetRandomString(10), 
      MeasureDataTypeId = MeasureDataTypeId.FreeText, 
      DefaultTarget = GetRandomString(10), 
      Description = GetRandomString(100)  
     }; 

     new ManageScreenUITest<MeasureConfigurationController, ManageMeasureDto>(c => c.ManageMeasure(dto), WebDrivers).Execute(ManageScreenExpectedResult.SavedSuccessfullyMessage); 
    } 

Execute方法所採用的值的DTO,並呼籲selenium.sendKeys和一堆其他的方法來實際執行測試,提交表單,斷言響應包含我們想要的。

我們對這個框架的結果感到滿意,但我發現類似的東西也可以用來創建負載測試場景。

IE,我可以有另一個UI測試框架的實現,它使用HTTPWebRequest向Web服務器發出請求。

從那裏,我基本上可以「抱團」我的測試,以創建方案,如:

public void MeasureTestScenario() 
{ 
    CanListMeasures(); 
    CanSearchMeasures(); 
    measureId = CanCreateMeasure(); 
    CanEditMeasure(measureId); 
} 

拼圖缺少的部分是如何運行這些「場景」負載下? IE瀏覽器,我在測試運行後可以執行1..N個並行測試,希望能夠執行諸如加速時間,每個場景之間的隨機等待等。理想情況下,併發測試的計數可以在運行時配置也就是說,產生5個更多的測試線程。報告不是非常重要,因爲我可以將執行時間記錄爲Web請求的一部分。

也許還有另一種方法,例如,使用C#來控制更傳統的負載測試工具?

這種方法的真正優點是處理更復雜的屏幕,即包含對象集合的屏幕。我可以從數據庫中得到一個隨機的父記錄,使用我現有的自動映射器代碼創建嵌套的dto,讓代碼可以隨意更改隨機值,然後使用我的測試框架將該dto的值作爲Web請求提交。手工編寫JMeter腳本更容易。 歡呼, 戴夫

+2

這聽起來不像是適合單元測試的東西。有多種工具可以加載測試站點,但應使用單元測試來測試儘可能最小的單元以確保其按預期執行。 –

+0

我完全同意,這不是關於單元測試。我們有一套完整的單元測試,它們很小,專注等。我們也有集成測試,配置創建測試,甚至是作爲nUnit測試運行的web/UI測試,有些測試是在nCrunch下進行的(對於真正的單元和一些集成測試)和一些使用DXCore測試運行器(用於UI測試)。對我們來說,NUnit是執行代碼和維護各種測試結果的便捷方式。 – Dave

+0

如果您的測試記錄足夠的數據以便從中提取性能信息,NUnit可以正常工作。如果您擁有良好的日誌記錄功能,那麼編寫日誌解析器並不難,因爲您可以爲所有運行的測試提供性能信息。 – evanmcdonnal

回答

0

雖然使用NUnit作爲不同任務/測試的跑步者是好的,但我不認爲它是性能測試的正確工具。

它使用反射,它有開銷,最終使用webclient等的預定義設置。使用性能測試工具會更好。您可以使用NUnit來配置/啓動它:)

0

我不同意NUnit不可用,通過適當的日誌記錄,任何功能測試運行器都可用於性能測試。當測試代碼本身提供數據時,例如何時發送請求和收到響應,何時請求頁面以及何時完成加載,開銷並不重要。分析日誌文件並生成一些基本指標是一項非常簡單的任務IMO。如果它變成了一個巨大的項目,但更有可能改變事情,我可以通過一個需要一兩個小時才能完成的命令行應用程序來完成。

我認爲真正的問題是您可以通過與正常的測試跑步者一起做多少事情。如果您的測試代碼中已經有很多日誌記錄,並且可以輕鬆調用它,那麼使用NUnit變得非常有吸引力。如果你沒有足夠的日誌記錄或一個支持一些體面負載場景的框架,那麼使用一些負載測試工具/框架可能會更容易。