使用BeetleX.NetBenchmark压测TCP,HTTP和Websocket服务
真沒(méi)想到大過(guò)年還在家里寫代碼寫文章,本來(lái)還打算自駕半個(gè)月沒(méi)想出現(xiàn)這情況。在這里祝福全國(guó)同胞在新的一年里身體健康!希望陽(yáng)光天氣早日照射在這片土地上,給人帶來(lái)新一年的希望!
NetBenchmark是針對(duì)網(wǎng)絡(luò)服務(wù)壓測(cè)的開(kāi)源組件,組件提供TCP,HTTP和Websocket的壓力測(cè)試基礎(chǔ)功能;為了更好的符合業(yè)務(wù)需求組件不提供UI配置信息源的方式(畢竟這種方式只能作有限制測(cè)試),而是由使用者來(lái)自己制定相應(yīng)的邏輯代碼來(lái)進(jìn)行具體的業(yè)務(wù)測(cè)試。組件基于netstandard2.0,除了可以在.NET CORE上運(yùn)行外還可以在.NET FX接下來(lái)介紹一下組的使用。
引用組件
https://www.nuget.org/packages/BeetleX.NetBenchmark/
Github:?https://github.com/IKende/NetBenchmark
TCP測(cè)試
組件通過(guò)Benchmark.Tcp方法來(lái)構(gòu)建一個(gè)TCP測(cè)壓實(shí)例,方法如下:
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()方法帶兩個(gè)泛參
Packet
協(xié)議分析器,實(shí)現(xiàn)BeetleX.Clients.IClientPacket.
Token
測(cè)試關(guān)聯(lián)對(duì)象,可以根據(jù)業(yè)務(wù)制定相關(guān)對(duì)象數(shù)據(jù)狀態(tài)屬性。
參數(shù)
host
主機(jī)地址
port
服務(wù)端口
connectins
并發(fā)測(cè)試的連接數(shù)
handler
測(cè)試方法Func<BeetleX.Clients.AwaiterClient, Token, Task>,每次調(diào)用的測(cè)試邏輯。
構(gòu)建TCP測(cè)試實(shí)例
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();}}以上定義了一個(gè)基于StringPacket自定義協(xié)議測(cè)試,它是以4字節(jié)頭大小來(lái)描述消息長(zhǎng)的字符協(xié)議解釋器。tcp.Send是向服務(wù)器發(fā)送一個(gè)消息,而await tcp.Receive則等待服務(wù)器響應(yīng)。
測(cè)試結(jié)果
可以通過(guò)runer.Print()方法實(shí)時(shí)把結(jié)果輸出控制臺(tái),信息里包括:正確,錯(cuò)誤和相關(guān)網(wǎng)絡(luò)并發(fā)情況,在最下面輸出不同延時(shí)響應(yīng)的百分比。
HTTP測(cè)試
組件通過(guò)Benchmark.Http方法來(lái)構(gòu)建一個(gè)HTTP測(cè)壓實(shí)例,方法如下:
public static Runner Http<Token>(Uri host, int connections, Func<IHttpHandler, Token, Task> handler)where Token : new()方法帶一個(gè)泛參
Token
測(cè)試關(guān)聯(lián)對(duì)象,可以根據(jù)業(yè)務(wù)制定相關(guān)對(duì)象數(shù)據(jù)狀態(tài)屬性。
參數(shù)
host
測(cè)試的服務(wù)地址
connections
并發(fā)測(cè)試的連接數(shù)
handler
測(cè)試方法Func<IHttpHandler, Token, Task>,每次調(diào)用的測(cè)試邏輯。
IHttpHandler
提供了一些簡(jiǎn)單的http調(diào)用方法
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);構(gòu)建HTTP測(cè)試實(shí)例
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();}}測(cè)試結(jié)果
websocket測(cè)試
組件通過(guò)Benchmark.Websocketxxx方法來(lái)構(gòu)建一個(gè)websocket測(cè)壓實(shí)例,方式有三種分別是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()構(gòu)建Websocket測(cè)試實(shí)例
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();}}測(cè)試結(jié)果
總結(jié)
以上是生活随笔為你收集整理的使用BeetleX.NetBenchmark压测TCP,HTTP和Websocket服务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《ASP.NET Core 微服务实战》
- 下一篇: 如何使用Serilog.AspNetCo