確定有人會問爲何會寫這樣一個開源工具?和現有的有什麼差異?不過對於一個程序員來講寫東西還真不須要理由的:),主要緣由是工做有點閒(開玩笑),不過說實話一個程員怎可能會中止寫代碼呢(做爲一個奔4的程序員,雖然不是從事開發的崗位,不過寫代碼的心一直沒中止過)!下面仍是來說一下這個工具吧,Beetle.DT是基於.NET實現的分佈式壓力測試工具,用戶能夠根據需求編寫相關的測試用例,經過管理工具便可以把測試用例推送到服務中心, 再根據實際壓測的需求把測試用例分配到不一樣節點上運行。工具會根據測試的狀況實時獲取測試結果,測試完成後用戶還能夠查詢具體 的測試報告。節點採用進程隔離的方式運行測試用例,因此測試用例的運行都是相互獨立。html
軟件壓力測試仍是很廣泛的行爲,市面上也有不少這方面的工具。做爲程序員確定也想本身動手寫這樣的輪子做爲改進本身代碼編寫能力的途徑。其實想法也是很簡單就是一個工具管理測試用例並進行節點分發測試彙報就能夠了。git
工具的目的是隨意在任意多個節點上運行測試程序,從而更容易達到大規模的壓力測試。程序員
基於分佈式環境運行因此工具須要劃分爲如下幾個功能應用程序,分別是:測試管理中心,節點服務,測試進程服務和用戶管理端大部件。因爲涉及到多個進程的協同工做因此在設計和編寫上相對比較浪費工做時間。在部署了測試管理中心和節點服務後,用戶只須要經過管理工具登錄到管理中心便可以進行測試用例的管理和運行,最終經過管理工具就能實時觀看測試狀況和相應報告。github
Beetle.DTCenter是工具的服務中心,運行服務須要明確節點服務端口和管理服務端口,這樣才能提供給節點和管理端進行信息交互。網絡
<appSettings> <!-- ... --> <add key="server-host" value=""/> <add key="server-port" value="9091"/> <add key="manager-host" value=""/> <add key="manager-port" value="9092"/> <!-- ... -->
Beetle.DTNode是工做的節點服務,Beetle.DT並無使用廣播發現的技術來解決節點和管理中心的握手問題,由於考慮到有些場景下節點和管理中心並不在了個廣播網段下,因此運行節點都需配置對應的管理中心的網絡服務地址。app
<appSettings> <!-- ... --> <add key="server-host" value="127.0.0.1"/> <add key="server-port" value="9091"/> <!-- ... --> </appSettings>
因爲測試用例是由工具進程加載,因此必需要符合某些規則;編寫測試用例須要繼承Beetle.DTCore.TestCase<T>,重寫相關抽象方法實現具體的測試代碼便可以。如下是一個簡單的http get測試用例:分佈式
public class Test : TestCase<Config> { public override string Name { get { return "httptest"; } } protected override void OnExecute() { System.Net.WebRequest wReq = System.Net.WebRequest.Create(Config.Url); System.Net.WebResponse wResp = wReq.GetResponse(); System.IO.Stream respStream = wResp.GetResponseStream(); using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.UTF8)) { reader.ReadToEnd(); } } } public class Config { public string Url { get; set; } }
這個工具也只是一個初型,它能夠知足了一些基本壓力測試的功能,還有不少功能和存在的問題須要不停的完善(畢竟要把一個東西作好並非一件容易的事情)。對部分.net開發人員來講實現工具的功能好象有點複雜,實際上也只是.NET的一些基礎功能的應用,分享這個工具代碼也目的也可讓.NET開發人員對.NET基礎功能有更多的瞭解和應用,當基礎知識紮實了那去實現一些功能就會簡單不少了。ide