使用CodeBenchmark对逻辑代码进行并发测试

一直对性能测试比较感兴趣,因此也写了很多的测试工具备WebApiBenchmarkTcpBenchmark等;但这些工具测试都是有针对性和配置的方式来进行功能有限因此很难适用更多的场景,因此单独开发一个组件CodeBenchmark来解决不一样业务代码下的性能测试;严格来讲CodeBenchmark并不算一个完整的测试工具,它提供一个测试管理功能和测试环境,能够对实现某一规则业务代码进行一个并发测试并提供一个最终的测试结果.如下主要介绍如何使用CodeBenchmark.linux

环境要求

CodeBenchmark是基于netstandard2.0开发,适用于支持这一版本的.net core.net framework环境;运行系统则看状况须要可部署到linuxwindows,开发语言c#.git

构建测试项目

能够经过vsvscode构建一个控制台项目而后引用组件(引用最新版本的BeetleX.CodeBenchmark)github

Install-Package BeetleX.CodeBenchmark -Version 0.6.2

引用组件后就能够编写具体的测试用例,测试用例编写必须符合组件测试要求,因此须要实现一个接口来编写测试代码,接口描述以下:web

public interface IExample:IDisposable
    {
        void Initialize(Benchmark benchmark);
        Task Execute();
    }

Initialize数据库

方法用于描述并发实例建立时初始化信息执行json

Executec#

并发实例每次执行的代码逻辑windows

测试代码能够针对本身的业务状况来编写,具体的业务逻辑能够是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 获取获得.websocket

运行测试用例

组件在运行用例的时候并不须要配置,只须要构建测试对象并把有测试用例的程序集注册进去便可完成.

Benchmark benchmark = new Benchmark();
     benchmark.Register(typeof(Program).Assembly);
     benchmark.Start();

以上代码是加载本项的程序集,并启动一个测试管理界面.默认开启的服务端口是9090,能够在Start方法指定服务的端口.启动日志以下:

经过日志能够查看到服务启动状况,运行成功后就能够经过浏览器访问并进行测试

能够根据测试状况选择须要的测试用例、并发数量和运行时间.

也能够运行多个测试用例,并对比它们的性能. 

若是你对组件有兴趣或有意见能够关注 https://github.com/IKende/CodeBenchmarkDoc

相关文章
相关标签/搜索