NetBenchmark是针对网络服务压测订制的开源组件,组件提供TCP,HTTPWebsocket的压力测试基础功能;为了更好的符合业务需求组件不提供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,TextJson,方法如下:

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服务的更多相关文章

  1. jmeter压测tcp协议接口:java.net.SocketException: Software caused connection abort: socket write error

    tcp接口,试压过程中,部分请求报如下错误: java.net.SocketException: Software caused connection abort: socket write erro ...

  2. Http压测工具wrk使用指南

    用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...

  3. Http压测工具wrk使用指南【转】

    用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...

  4. 性能压测诡异的Requests/second 响应刺尖问题

    最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码.debug.fixbug都逐渐收尾,进入上线前的性能压测. 虽然不是大促前的性能压测要求,但是为了安全起见,需要摸个底心里有个数 ...

  5. 全链路压测平台(Quake)在美团中的实践

    背景 在美团的价值观中,以“客户为中心”被放在一个非常重要的位置,所以我们对服务出现故障越来越不能容忍.特别是目前公司业务正在高速增长阶段,每一次故障对公司来说都是一笔非常不小的损失.而整个IT基础设 ...

  6. 性能压测,SQL查询异常

    早上测试对性能压测,发现取sequence服务大量超时报错,查询线上的监控SQL: 大量这个查询,我在DeviceID和Isdelete上建有复合索引,应该很快,而且我测试了一下,取值,执行效率很高, ...

  7. 高德全链路压测平台TestPG的架构与实践

    导读 2018年十一当天,高德DAU突破一个亿,不断增长的日活带来喜悦的同时,也给支撑高德业务的技术人带来了挑战.如何保障系统的稳定性,如何保证系统能持续的为用户提供可靠的服务?是所有高德技术人面临的 ...

  8. surging作者出具压测结果

    前言 首先回应下@wen-wen 所贴的压测报告,我也把我和客户压测碰到的问题,和压测结果贴出来,这个结果是由客户提供的.不会有任何的舞弊手脚问题 问题一:Task.Run慎用 首先在最新的社区版本已 ...

  9. nginx、php-fpm、swoole HTTP/TCP压测对比

    本次测试是在win7下docker环境中进行压测,共创建一个nginx容器.一个php-fpm容器和一个swoole容器,客户端请求nginx服务器,nginx接收用户访问请求并转发给php-fpm, ...

随机推荐

  1. P3225 [HNOI2012]矿场搭建 题解

    这道题挺难的,可以加深对割点的理解,还有,排列组合好重要了,分连通块,然后乘法原理(加法原理计数什么的) 传送门   https://www.luogu.org/problem/P3225 省选oi题 ...

  2. 洛谷$P2469\ [SDOI2010]$ 星际竞速 网络流

    正解:网络流 解题报告: 传送门$QwQ$ 题目好长昂,,,大概概括下就说有$m$条单向边,$n$个点,每条边有一条边权,每个点有一个点权,然后问每个点都要到达一遍的最小代价是多少$QwQ$? 发现有 ...

  3. $Noip2016/Luogu2827$蚯蚓

    $Luogu$ $Sol$ 乍一看就是个模拟叭,用个优先队列维护不就好了.不过这里有一个问题就是怎么解决没被切的蚯蚓的增长问题.可以这样处理,每次切一条蚯蚓,给切完之后的都减去$q$,最后输出答案时都 ...

  4. CommandPattern(命令模式)-----Java/.Net

    命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该 ...

  5. 实操教程丨如何在K8S集群中部署Traefik Ingress Controller

    注:本文使用的Traefik为1.x的版本 在生产环境中,我们常常需要控制来自互联网的外部进入集群中,而这恰巧是Ingress的职责. Ingress的主要目的是将HTTP和HTTPS从集群外部暴露给 ...

  6. (二)Django模板的应用

    一.配置项目的基础模板,分三部分 base.html 基础部分,需要包括基本的HTML标签 header部分 body部分 html闭合标签 {% load staticfiles %} <!D ...

  7. 设置本地上网IP

    在局域网中,我们经常需要根据网络连接环境来对本地连接的IP地址进行手动设置,那么如何对IP地址进行设置呢?下面小编就把教程介绍给大家. 1. 右击桌面“网上邻居”->选择“属性”,打开“网络共享 ...

  8. C# 将Word转为PDF、XPS、Epub、RTF(基于Spire.Cloud.Word.SDK)

    本文介绍通过调用Spire.Cloud.Word.SDK提供的ConvertApi接口将Word转换为PDF.XPS.Epub.RTF以及将Docx转为Doc格式等.调用接口方法及步骤参考以下步骤: ...

  9. echarts更改坐标轴文字颜色及大小

    xAxis: { data: anameArr, axisLabel: { show: true, textStyle: { color: '#c3dbff', //更改坐标轴文字颜色 fontSiz ...

  10. vnpy源码阅读学习(3):学习vnpy的界面的实现

    学习vnpy的界面的实现 通过简单的学习了PyQt5的一些代码以后,我们基本上可以理解PyQt的一些用法,下面让我们来先研究下vnpy的UI部分的代码. 首先回到上一节看到的run.py(/vnpy/ ...