使用BeetleX.NetBenchmark压测TCP,HTTP和Websocket服务

编程

引用组件

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,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"), 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服务 的全部内容, 来源链接: utcz.com/z/513039.html

回到顶部