使用CodeBenchmark對邏輯代碼進行并發測試

一直對性能測試比較感興趣,所以也寫了不少的測試工具有WebApiBenchmarkTcpBenchmark等;但這些工具測試都是有針對性和配置的方式來進行功能有限所以很難適用更多的場景,所以單獨開發一個組件CodeBenchmark來解決不同業務代碼下的性能測試;嚴格來說CodeBenchmark并不算一個完整的測試工具,它提供一個測試管理功能和測試環境,可以對實現某一規則業務代碼進行一個并發測試并提供一個最終的測試結果.以下主要介紹如何使用CodeBenchmark.

環境要求

CodeBenchmark是基于netstandard2.0開發,適用于支持這一版本的.net core.net framework環境;運行系統則看情況需要可部署到linuxwindows,開發語言c#.

構建測試項目

可以通過vsvscode構建一個控制臺項目然后引用組件(引用最新版本的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 = $"[email protected]{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

posted @ 2019-08-28 11:56  beetlex  閱讀(...)  評論(...編輯  收藏
丛林巫师APP下载
广西快乐双彩2019323期开奖 pc蛋蛋28最快结 天津福利彩票快乐10分开奖结果 澳洲幸运10下载 百搭麻将百搭图片 股票权重怎么看 哈灵上海麻将 安徽十一选五开奖视频 河北十一选五开奖号 免费下载哈尔滨麻将 微信捕鱼赚钱 微乐麻将怀疑开挂怎么查 8月17日内蒙古11选5 30选5开奖号码结果昨天 ds篮球即时比分 股票趋势下载