我們正在編寫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腳本更容易。 歡呼, 戴夫
這聽起來不像是適合單元測試的東西。有多種工具可以加載測試站點,但應使用單元測試來測試儘可能最小的單元以確保其按預期執行。 –
我完全同意,這不是關於單元測試。我們有一套完整的單元測試,它們很小,專注等。我們也有集成測試,配置創建測試,甚至是作爲nUnit測試運行的web/UI測試,有些測試是在nCrunch下進行的(對於真正的單元和一些集成測試)和一些使用DXCore測試運行器(用於UI測試)。對我們來說,NUnit是執行代碼和維護各種測試結果的便捷方式。 – Dave
如果您的測試記錄足夠的數據以便從中提取性能信息,NUnit可以正常工作。如果您擁有良好的日誌記錄功能,那麼編寫日誌解析器並不難,因爲您可以爲所有運行的測試提供性能信息。 – evanmcdonnal