使用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();
var runer = Benchmark.Tcp<StringPacket, Program>("192.168.2.19", , ,
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"), ,
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"), ,
async (ws, token) =>
{
ws.TimeOut = * ;
ws.Send(new { url = "/json" });
var result = await ws.Receive();
});
runer.Run();
runer.Print();
}
}
测试结果

使用NetBenchmark压测TCP,HTTP和Websocket服务的更多相关文章
- jmeter压测tcp协议接口:java.net.SocketException: Software caused connection abort: socket write error
tcp接口,试压过程中,部分请求报如下错误: java.net.SocketException: Software caused connection abort: socket write erro ...
- Http压测工具wrk使用指南
用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...
- Http压测工具wrk使用指南【转】
用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...
- 性能压测诡异的Requests/second 响应刺尖问题
最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码.debug.fixbug都逐渐收尾,进入上线前的性能压测. 虽然不是大促前的性能压测要求,但是为了安全起见,需要摸个底心里有个数 ...
- 全链路压测平台(Quake)在美团中的实践
背景 在美团的价值观中,以“客户为中心”被放在一个非常重要的位置,所以我们对服务出现故障越来越不能容忍.特别是目前公司业务正在高速增长阶段,每一次故障对公司来说都是一笔非常不小的损失.而整个IT基础设 ...
- 性能压测,SQL查询异常
早上测试对性能压测,发现取sequence服务大量超时报错,查询线上的监控SQL: 大量这个查询,我在DeviceID和Isdelete上建有复合索引,应该很快,而且我测试了一下,取值,执行效率很高, ...
- 高德全链路压测平台TestPG的架构与实践
导读 2018年十一当天,高德DAU突破一个亿,不断增长的日活带来喜悦的同时,也给支撑高德业务的技术人带来了挑战.如何保障系统的稳定性,如何保证系统能持续的为用户提供可靠的服务?是所有高德技术人面临的 ...
- surging作者出具压测结果
前言 首先回应下@wen-wen 所贴的压测报告,我也把我和客户压测碰到的问题,和压测结果贴出来,这个结果是由客户提供的.不会有任何的舞弊手脚问题 问题一:Task.Run慎用 首先在最新的社区版本已 ...
- nginx、php-fpm、swoole HTTP/TCP压测对比
本次测试是在win7下docker环境中进行压测,共创建一个nginx容器.一个php-fpm容器和一个swoole容器,客户端请求nginx服务器,nginx接收用户访问请求并转发给php-fpm, ...
随机推荐
- ant design 的Table组件固定表头时不对齐
现在有一个表格,里面的列数是不固定的(可以重复写入数据),且列数行数都可能很多,就带来一个问题: 必须要固定表头,但是antd 的表格组件设置了固定表格 scroll={{x:1000,y:300}} ...
- mysql中information_schema.schemata字段说明
1. 获取所有数据库信息(SCHEMATA) show databases; 查看用户下所有数据库信息:SCHEMATA表:提供了关于数据库中的库的信息.详细表述了某个库的名称,默认编码,排序规则.各 ...
- javaweb项目启动时自动启动rmi服务器实例
1.我们先写一个web项目启动时需要运行的类RmiRegisterServlet.java package com.mx.Servlet; import javax.servlet.ServletCo ...
- 嗨,让我带你逐行剖析Vue.js源码
本项目受到了阮一峰老师的肯定,已刊登在阮一峰老师微信公众号的科技爱好者周刊第87期,同时也被多个微博大V转发,短短一个月时间内在github上star数量就已经突破2k! Hello,大家好,我最近在 ...
- $Noip2011/Luogu1315$ 观光公交 贪心
$Luogu$ $Sol$ 觉得这题贪心要想很多事情,不适合我这种没脑子选手$ovo$.看题解还理解了很久. 最开始是这样想的:把所有的路段上的乘客按大小排个序用加速器就好了,这个想法被自己轻松$ha ...
- JVM探秘:垃圾收集器
本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 垃圾收集器 垃圾收集算法是是内存回收的方法论,垃圾收集器是内存回收的具体实现.不同的虚 ...
- requests-html库render方法的使用
一.render的使用 from requests_html import HTMLSession session =HTMLSession() response = session.get('htt ...
- Flink入门(五)——DataSet Api编程指南
Apache Flink Apache Flink 是一个兼顾高吞吐.低延迟.高性能的分布式处理框架.在实时计算崛起的今天,Flink正在飞速发展.由于性能的优势和兼顾批处理,流处理的特性,Flink ...
- 「Vijos 1282」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法照片
佳佳的魔法照片 背景 佳佳的魔法照片(Magic Photo):如果你看过<哈利·波特>,你就会知道魔法世界里的照片是很神奇的.也许是因为小魔法师佳佳长的太帅,很多人都找他要那种神奇的魔法 ...
- selenium爬取驾考宝典题目
要求 [x] Python3+ [x] Chrome驱动并已配置环境变量 [x] Selenium ## 研究页面 发现驾考宝典的科目四页面URL都是以 https://www.jiakaobaodi ...