一直对性能测试比较感兴趣,所以也写了不少的测试工具有WebApiBenchmark和TcpBenchmark等;但这些工具测试都是有针对性和配置的方式来进行功能有限所以很难适用更多的场景,所以单独开发一个组件CodeBenchmark来解决不同业务代码下的性能测试;严格来说CodeBenchmark并不算一个完整的测试工具,它提供一个测试管理功能和测试环境,可以对实现某一规则业务代码进行一个并发测试并提供一个最终的测试结果.以下主要介绍如何使用CodeBenchmark.
环境要求
CodeBenchmark是基于netstandard2.0开发,适用于支持这一版本的.net core和.net framework环境;运行系统则看情况需要可部署到linux或windows,开发语言c#.
构建测试项目
可以通过vs或vscode构建一个控制台项目然后引用组件(引用最新版本的BeetleX.CodeBenchmark)
Install-Package BeetleX.CodeBenchmark -Version 0.6.2
引用组件后就可以编写具体的测试用例,测试用例编写必须符合组件测试要求,所以需要实现一个接口来编写测试代码,接口描述如下:
public interface IExample:IDisposable { void Initialize(Benchmark benchmark); Task Execute(); } |
Initialize
方法用于描述并发实例创建时初始化信息执行
Execute
并发实例每次执行的代码逻辑
测试代码可以针对自己的业务情况来编写,具体的业务逻辑可以是http,数据库访问等操作.
websocket测试用例
[System.ComponentModel.Category("TCP")] public class WebsocketJson : IExample { public async Task Execute() { var request = new { url = "/json" }; var result = await jsonClient.ReceiveFrom(request); } private BeetleX.Http.WebSockets.JsonClient jsonClient; public void Initialize(Benchmark benchmark) { jsonClient = new BeetleX.Http.WebSockets.JsonClient("ws://192.168.2.19:8080"); } public void Dispose() { jsonClient.Dispose(); } } |
TCP测试用例
[System.ComponentModel.Category("TCP")] public class TcpTextLine : IExample { public async Task Execute() { var data = $"henryfan@{DateTime.Now}"; var stream = await mClient.ReceiveFrom(s => s.WriteLine(data)); stream.ReadLine(); } private BeetleX.Clients.AsyncTcpClient mClient; public void Initialize(Benchmark benchmark) { mClient = BeetleX.SocketFactory.CreateClient<BeetleX.Clients.AsyncTcpClient>("192.168.2.19", 9012); } public void Dispose() { mClient.Dispose(); } } |
Http测试用例
[System.ComponentModel.Category("TCP")] class HttpGet : IExample { public void Dispose() { } public async Task Execute() { var result = await _httpHandler.json(); } public void Initialize(Benchmark benchmark) { if (_httpApi == null) { _httpApi = new BeetleX.Http.Clients.HttpClusterApi(); _httpApi.DefaultNode.Add("http://192.168.2.19:8080"); _httpHandler = _httpApi.Create<IHttpHandler>(); } } static BeetleX.Http.Clients.HttpClusterApi _httpApi; static IHttpHandler _httpHandler; [BeetleX.Http.Clients.FormUrlFormater] public interface IHttpHandler { // http://host/json Task<string> json(); } } |
以上基础的测试用例都可以从https://github.com/IKende/CodeBenchmarkDoc 获取得到.
运行测试用例
组件在运行用例的时候并不需要配置,只需要构建测试对象并把有测试用例的程序集注册进去即可完成.
Benchmark benchmark = new Benchmark(); benchmark.Register(typeof(Program).Assembly); benchmark.Start(); |
以上代码是加载本项的程序集,并启动一个测试管理界面.默认开启的服务端口是9090,可以在Start方法指定服务的端口.启动日志如下:
通过日志可以查看到服务启动情况,运行成功后就可以通过浏览器访问并进行测试
可以根据测试情况选择需要的测试用例、并发数量和运行时间.
也可以运行多个测试用例,并对比它们的性能.
如果你对组件有兴趣或有意见可以关注 https://github.com/IKende/CodeBenchmarkDoc
什么时候使用BeetleX.FastHttpApi
当你需要一个高性能的webapi服务的时候,因为它具有asp.net core mvc的简便使用特性的同时提升了200%或更高的性能。
当你希望接口同时支持http和websocket,组件支持一个逻辑控制器同时提供http和websocket两种服务,即一份代码即可服务http和websocket请求
当你需要一个嵌入的HTTP服务应用,组件支持netstandard2.0,可以灵活地在winform或wpf中集成一个可靠的HTTP服务。
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理