使用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

原文地址:https://www.cnblogs.com/smark/p/11423215.html

时间: 2024-08-22 00:02:21

使用CodeBenchmark对逻辑代码进行并发测试的相关文章

用代码触发testng实现并发测试

有时候希望测试用例能用代码触发,发现testng支持这种操作,于是记录一下: 首先添加testng依赖: <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.9.10</version> </dependency> 然后实现要被调用的测试用例: /** * testng 注解实现并发测试 */

java高并发测试代码

package com.example.test; import java.net.URL;import java.net.URLConnection;import java.util.concurrent.CountDownLatch; /** * Created with IDEA * author:QinWei * Date:2018/12/27 * Time:11:08 * 并发测试 */public class ConnectTest { public static void main

Node.js真的有高并发优势吗?看看Node.js和Tomcat的并发测试结果

同一套业务逻辑,实现一个webservice中间接口,中间涉及memcached和mogodb的一些操作.分别在Node.js和JAVA平台实现,java代码部署在Tomcat 7.0上,用Apache jmeter进行压力测试.得到的测试结果很是出乎意料,Node.js的高并发优势为什么没有体现出来呢??? 操作系统:CentOS 6.4(虚拟机)内存:1.5GCPU:单核 并发数 100执行次数 10 以下是测试结果 可以看到Node.js的平均执行时间为333毫秒,Tomcat的执行时间为

白盒测试中如何实现真正意义上并发测试(Java)

在这个话题开始之前,首先我们来弄清楚为什么要做并发测试? 一般并发测试,是指模拟并发访问,测试多用户并发访问同一个应用.模块.数据时是否产生隐藏的并发问题,如内存泄漏.线程锁.资源争用问题. 站在性能测试的角度,并发测试不是为了获得性能指标,而是为了发现并发引起的问题. 那么并发对应的技术实现到底是怎样的呢? 简单地说,并发是指多个进程或线程在某一时刻同时处理指定的操作,有点类似于性能测试中集合点的概念,讲究同时性. 普及到这里,接下来讨论技术实现: 最近在项目里面发现一些开发人员做动态测试模拟

学习PHP精粹,编写高效PHP代码之自动测试

如果要制造出完美的产品,必须对它进行全方面检验测试.这里有几种类型的测试,每一种测试都针对应用程序的某个具体方面. 本文将对单元测试.数据库测试.系统测试.负载测试进行介绍. 一.单元测试 单元测试是测试应用程序的每一步,要确保其各个组成部分运转正常.若没有单元测试,在应用程序中找出导致错误运行的原因一般来说相当困难. 单元测试通常采用一个单元测试框架,它提供了编写和运行测试并输出结果所需要的基本结构. 一些较为常用的单元测试框架包括: PHPUnit:http://phpunit.de/ Si

服务器主逻辑代码的重构

不知道前主程是处于什么目的,总之我接手这套程序的时候,出现了超级多的问题,也发现了超级多的问题. 比如说吧,接受网络消息逻辑是线程独立的,而发送消息给客户端缺阻塞在了逻辑线程里面:原本可以放在一个进程里面处理的逻辑,却分散在了四个进程里面去处理,导致我完成一个功能,大部分时间要话费了进程之间的玩家信息的同步上面,在我无法忍受的情况下,我终于是用NIO将网络底层从新写了,而且将四个进程合并,但是在很多逻辑上还是尽量保持了和原逻辑处理的兼容! 先说说这个重构的底层吧! 我们看下最重要的ClientH

Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现

Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 1. 应用场景 1 2. 随机抽取数据原理 1 3. 常用的实现方法:::数据库随机函数 1 4. Mssql 的实现 NEWID() 跟rand()  1 5. newid()与rand()的区别 2 6. NEWID() 2 7. 参考 2 1. 应用场景 并发测试 2. 随机抽取数据原理 原理是 循环所有的ID/记录,附加随机函数字段,然后排序as 这个字段.. 3. 常用的实现方法:::数据库随机

网站性能并发测试工具

网站性能并发测试工具 2012-05-05 22:04:26 分类: 项目管理 导读:随着Web 2.0技术的迅速发展,许多公司都开发了一些基于Web的网站服务,通常在设计开发Web应用系统的时候很难模拟出大量用户同时访问系统的实际情况,因此,当Web网站遇到访问高峰时,容易发生服务器响应速度变慢甚至服务中断. 随着Web 2.0技术的迅速发展,许多公司都开发了一些基于Web的网站服务,通常在设计开发Web应用系统的时候很难模拟出大量用户同时访问系统的实际情况,因 此,当Web网站遇到访问高峰时

iOS并发编程笔记,包含GCD,Operation Queues,Run Loops,如何在后台绘制UI,后台I/O处理,最佳安全实践避免互斥锁死锁优先级反转等,以及如何使用GCD监视进程文件文件夹,并发测试的方案等

iOS并发编程笔记,包含GCD,Operation Queues,Run Loops,如何在后台绘制UI,后台I/O处理,最佳安全实践避免互斥锁死锁优先级反转等,以及如何使用GCD监视进程文件文件夹,并发测试的方案等 线程 使用Instruments的CPU strategy view查看代码如何在多核CPU中执行.创建线程可以使用POSIX 线程API,或者NSThread(封装POSIX 线程API).下面是并发4个线程在一百万个数字中找最小值和最大值的pthread例子: #import