使用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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架