一直對性能測試比較感興趣,所以也寫了不少的測試工具有WebApiBenchmark和TcpBenchmark等;但這些工具測試都是有針對性和配置的方式來進行功能有限所以很難適用更多的場景,所以單獨開發一個組件CodeBenchmark來解決不同業務代碼下的性能測試;嚴格來說CodeBenchmark並不算一個完整的測試工具,它提供一個測試管理功能和測試環境,可以對實現某一規則業務代碼進行一個並發測試並提供一個最終的測試結果.以下主要介紹如何使用CodeBenchmark.
環境要求
CodeBenchmark是基於netstandard2.0開發,適用於支持這一版本的.net core和.net framework環境;運行系統則看情況需要可部署到linux或windows,開發語言c#.
構建測試項目
可以通過vs或vscode構建一個控制台項目然后引用組件(引用最新版本的BeetleX.CodeBenchmark)
Install-Package BeetleX.CodeBenchmark -Version 0.6.2
引用組件后就可以編寫具體的測試用例,測試用例編寫必須符合組件測試要求,所以需要實現一個接口來編寫測試代碼,接口描述如下:
public interface IExample:IDisposable { void Initialize(Benchmark benchmark); Task Execute(); }
Initialize
方法用於描述並發實例創建時初始化信息執行
Execute
並發實例每次執行的代碼邏輯
測試代碼可以針對自己的業務情況來編寫,具體的業務邏輯可以是http,數據庫訪問等操作.
websocket測試用例
[System.ComponentModel.Category("TCP")] public class WebsocketJson : IExample { public async Task Execute() { var request = new { url = "/json" }; var result = await jsonClient.ReceiveFrom(request); } private BeetleX.Http.WebSockets.JsonClient jsonClient; public void Initialize(Benchmark benchmark) { jsonClient = new BeetleX.Http.WebSockets.JsonClient("ws://192.168.2.19:8080"); } public void Dispose() { jsonClient.Dispose(); } }
TCP測試用例
[System.ComponentModel.Category("TCP")] public class TcpTextLine : IExample { public async Task Execute() { var data = $"henryfan@{DateTime.Now}"; var stream = await mClient.ReceiveFrom(s => s.WriteLine(data)); stream.ReadLine(); } private BeetleX.Clients.AsyncTcpClient mClient; public void Initialize(Benchmark benchmark) { mClient = BeetleX.SocketFactory.CreateClient<BeetleX.Clients.AsyncTcpClient>("192.168.2.19", 9012); } public void Dispose() { mClient.Dispose(); } }
Http測試用例
[System.ComponentModel.Category("TCP")] class HttpGet : IExample { public void Dispose() { } public async Task Execute() { var result = await _httpHandler.json(); } public void Initialize(Benchmark benchmark) { if (_httpApi == null) { _httpApi = new BeetleX.Http.Clients.HttpClusterApi(); _httpApi.DefaultNode.Add("http://192.168.2.19:8080"); _httpHandler = _httpApi.Create<IHttpHandler>(); } } static BeetleX.Http.Clients.HttpClusterApi _httpApi; static IHttpHandler _httpHandler; [BeetleX.Http.Clients.FormUrlFormater] public interface IHttpHandler { // http://host/json Task<string> json(); } }
以上基礎的測試用例都可以從https://github.com/IKende/CodeBenchmarkDoc 獲取得到.
運行測試用例
組件在運行用例的時候並不需要配置,只需要構建測試對象並把有測試用例的程序集注冊進去即可完成.
Benchmark benchmark = new Benchmark(); benchmark.Register(typeof(Program).Assembly); benchmark.Start();
以上代碼是加載本項的程序集,並啟動一個測試管理界面.默認開啟的服務端口是9090,可以在Start方法指定服務的端口.啟動日志如下:

通過日志可以查看到服務啟動情況,運行成功后就可以通過瀏覽器訪問並進行測試

可以根據測試情況選擇需要的測試用例、並發數量和運行時間.

也可以運行多個測試用例,並對比它們的性能.


如果你對組件有興趣或有意見可以關注 https://github.com/IKende/CodeBenchmarkDoc
