使用BeetleX.NetBenchmark压测TCP,HTTP和Websocket服务
真沒想到大過年還在家里寫代碼寫文章,本來還打算自駕半個月沒想出現這情況。在這里祝福全國同胞在新的一年里身體健康!希望陽光天氣早日照射在這片土地上,給人帶來新一年的希望!
NetBenchmark是針對網絡服務壓測的開源組件,組件提供TCP,HTTP和Websocket的壓力測試基礎功能;為了更好的符合業務需求組件不提供UI配置信息源的方式(畢竟這種方式只能作有限制測試),而是由使用者來自己制定相應的邏輯代碼來進行具體的業務測試。組件基于netstandard2.0,除了可以在.NET CORE上運行外還可以在.NET FX接下來介紹一下組的使用。
引用組件
https://www.nuget.org/packages/BeetleX.NetBenchmark/
Github:?https://github.com/IKende/NetBenchmark
TCP測試
組件通過Benchmark.Tcp方法來構建一個TCP測壓實例,方法如下:
public static Runner Tcp<Packet, Token>(string host, int port, int connections,Func<BeetleX.Clients.AwaiterClient, Token, Task> handler)where Packet : BeetleX.Clients.IClientPacket, new()where Token : new()方法帶兩個泛參
Packet
協議分析器,實現BeetleX.Clients.IClientPacket.
Token
測試關聯對象,可以根據業務制定相關對象數據狀態屬性。
參數
host
主機地址
port
服務端口
connectins
并發測試的連接數
handler
測試方法Func<BeetleX.Clients.AwaiterClient, Token, Task>,每次調用的測試邏輯。
構建TCP測試實例
class Program{static void Main(string[] args){var data = StringPacket.RamdomString(512);var runer = Benchmark.Tcp<StringPacket, Program>("192.168.2.19", 9090, 200,async (tcp, token) =>{tcp.Send(data);await tcp.Receive();});runer.Run();runer.Print();}}以上定義了一個基于StringPacket自定義協議測試,它是以4字節頭大小來描述消息長的字符協議解釋器。tcp.Send是向服務器發送一個消息,而await tcp.Receive則等待服務器響應。
測試結果
可以通過runer.Print()方法實時把結果輸出控制臺,信息里包括:正確,錯誤和相關網絡并發情況,在最下面輸出不同延時響應的百分比。
HTTP測試
組件通過Benchmark.Http方法來構建一個HTTP測壓實例,方法如下:
public static Runner Http<Token>(Uri host, int connections, Func<IHttpHandler, Token, Task> handler)where Token : new()方法帶一個泛參
Token
測試關聯對象,可以根據業務制定相關對象數據狀態屬性。
參數
host
測試的服務地址
connections
并發測試的連接數
handler
測試方法Func<IHttpHandler, Token, Task>,每次調用的測試邏輯。
IHttpHandler
提供了一些簡單的http調用方法
Task Get(string url, Dictionary<string, string> queryString = null);Task Get(string url, Dictionary<string, string> queryString, Dictionary<string, string> header = null);Task Post(string url, Dictionary<string, string> queryString, Dictionary<string, string> heaer, Dictionary<string, string> data);Task Post(string url, Dictionary<string, string> data);Task PostJson(string url, Dictionary<string, string> queryString, Dictionary<string, string> heaer, object data);Task PostJson(string url,object data);構建HTTP測試實例
class Program{static void Main(string[] args){var runer = Benchmark.Http<Program>(new Uri("http://192.168.2.19:5000"), 100,async (http, token) =>{await http.Get("/api/values");await http.PostJson("/api/values", "beetlex.io");});runer.Run();runer.Print();}}測試結果
websocket測試
組件通過Benchmark.Websocketxxx方法來構建一個websocket測壓實例,方式有三種分別是DataFrame,Text和Json,方法如下:
public static Runner Websocket<Token>(Uri host, int connections, Func<WSClient, Token, Task> handler)where Token : new() public static Runner WebsocketText<Token>(Uri host, int connections, Func<TextClient, Token, Task> handler)where Token : new() public static Runner WebsocketJson<Token>(Uri host, int connections, Func<JsonClient, Token, Task> handler)where Token : new()構建Websocket測試實例
class Program{static void Main(string[] args){var runer = Benchmark.WebsocketJson<Program>(new Uri("ws://192.168.2.19:8080"), 100,async (ws, token) =>{ws.TimeOut = 1000 * 5;ws.Send(new { url = "/json" });var result = await ws.Receive();});runer.Run();runer.Print();}}測試結果
總結
以上是生活随笔為你收集整理的使用BeetleX.NetBenchmark压测TCP,HTTP和Websocket服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《ASP.NET Core 微服务实战》
- 下一篇: 如何使用Serilog.AspNetCo