肯定有人會問為什么會寫這樣一個開源工具?和現有的有什么差別?不過對於一個程序員來說寫東西還真不需要理由的:),主要原因是工作有點閑(開玩笑),不過說實話一個程員怎可能會停止寫代碼呢(作為一個奔4的程序員,雖然不是從事開發的崗位,不過寫代碼的心一直沒停止過)!下面還是來講一下這個工具吧,Beetle.DT是基於.NET實現的分布式壓力測試工具,用戶可以根據需求編寫相關的測試用例,通過管理工具即可以把測試用例推送到服務中心, 再根據實際壓測的需求把測試用例分配到不同節點上運行。工具會根據測試的情況實時獲取測試結果,測試完成后用戶還可以查詢具體 的測試報告。節點采用進程隔離的方式運行測試用例,所以測試用例的運行都是相互獨立。
簡介
軟件壓力測試還是很普遍的行為,市面上也有很多這方面的工具。作為程序員肯定也想自己動手寫這樣的輪子作為改進自己代碼編寫能力的途徑。其實想法也是很簡單就是一個工具管理測試用例並進行節點分發測試匯報就可以了。
工具的目的是隨意在任意多個節點上運行測試程序,從而更容易達到大規模的壓力測試。
工具結構
基於分布式環境運行所以工具需要划分為以下幾個功能應用程序,分別是:測試管理中心,節點服務,測試進程服務和用戶管理端大部件。由於涉及到多個進程的協同工作所以在設計和編寫上相對比較浪費工作時間。在部署了測試管理中心和節點服務后,用戶只需要通過管理工具登陸到管理中心即可以進行測試用例的管理和運行,最終通過管理工具就能實時觀看測試情況和相應報告。
管理中心配置
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並沒有使用廣播發現的技術來解決節點和管理中心的握手問題,因為考慮到有些場景下節點和管理中心並不在了個廣播網段下,所以運行節點都需配置對應的管理中心的網絡服務地址。
<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基礎功能有更多的了解和應用,當基礎知識扎實了那去實現一些功能就會簡單很多了。
項止地址:https://github.com/IKende/Beetle.DT/