CBenchmark-一款开源的纯C实现的通用性能测试框架

Code Base on https://github.com/charlescui/CBenchmark

 

这是我实现的一款性能测试工具,之前在工作中常用LoadRunner之类的工具来完成性能测试,但受限于LR极其昂贵的Lisence以及难以定制的SDK,于是我用C/C++实现了这个工具,并借助Linux系统对线程和进程的良好调度,可以实现极高的并发压力.

 

使用的用例有待补全,请大家持续关注官方主页或者github项目主页.

 

----------

 

http://cuiz.me/cbenchmark/2011/07/cbenchmarkjieshao/

介绍:

CBenchmark—-CharlesCui’s Benchmark

本产品是为了解决性能测试压力生成的问题.

系统|Platform

在对服务端系统进行性能测试时,目前成熟的解决方案是使用windows系统下LoadRunner等系列产品,而无法找到功能强大的Linux系统下的产品。
本程序目前支持Linux系统,并且理论可以实现跨平台编译(作者并没有实验过,但本产品并没有依赖特定系统的库或者函数).

特点|Feature

  • 本程序和当前性能测试解决方案相比,
    1. 可以实现极高的定制化:开放所有API,用户可以基于这些API实现自己的性能测试工具.
    2. 无限制:本产品完全免费,不会像现有成熟解决方案一样基于并发数,或者基于使用协议的Lisense限制。
    3. 高性能高并发:可提供比现有产品高出很多的并发能力,本程序使用C语言实现所有的代码。
    4. 通用性:由于本产品测试用例的业务实现是由客户完成,所以本产品的作用不限于某种测试协议,所以本产品是一个通用的性能测试工具.
    5. 执行过程可控:测试执行过程中用户可以通过Ctrl+C来控制本产品的执行。
    6. 特有的测试用例加载模式:对测试用例加载的模式和市面上的性能测试产品都不一样,用户可以将CBenchmark当做第三方库编码进入测试代码,也可以将CBenchmark当做工具,在执行的时候动态加载测试代码以产生压力.

本产品理论支持所有的服务端性能测试。
对于非标准协议的性能测试,我推荐您使用本产品。

安装过程


./configure --prefix=/opt/cbenchmark
make
make install

安装后产生文件

  • 本程序内容如下:
    1. bin/cbenchmark
    2. include/*.h

TODO

报表

  • 目前本产品提供的测试结果有两种:
    1. 执行完毕后的文字提示
    2. 执行完毕后的日志
      作者在未来会提供报表生成工具,
      但不会集成在本产品中,这是为了保证本产品的干净,高效。
      并且在没有桌面的linux端使用本产品执行性能测试,
      测试结果的显示手段有限,所以我不建议集成在本工具里。
      而是最好用其他工具实现,这样也可以完成分布式性能测试的图表结果展现。

使用方法|Usage

请执行bin/cbenchmark -?


[zheng.cuizh@localhost cbenchmark]$ /usr/local/cbenchmark/bin/cbenchmark -?
        CharlesCui's Benchmark
                help you do performance test nice.
-o ["Shell command"]
-f [Output result path]
-F [Dynamic lib path.]
-n [Each thread iterations times]
-c [Concurrence NUM]
-l [Syslog level]
-g [Syslog name,less than 128 char]
-v [Show -o stdoutput]
-t [Selftest]
-x [Scenario id]
-T [Timmer(seconds)].
-s [Select a scenario from list]

作者|Author

gtalk/gmail zheng.cuizh@gmail.com

用例|Example

./features目录下面是测试插件,目前还没有完善,现在只实现了ice的测试demo.因为我一直用cbenchmark测试私有协议以及一部分ice协议,私有协议的测试demo不方便公开,而ice协议的测试demo完全可以给大家借鉴.

ICE测试

如果大家不了解ice,可以在这里学习一下:http://www.zeroc.com/
demo位于./features/ice下,几乎所有的ice协议测试都可以用这个框架改一改就行.

  • ice测试用例的组成
    1. main.c 该文件为ice测试用例库的入口程序,根据cbenchmark加载测试用例库的约定,该文件实现了一个initialize函数,该函数可以调度测试的执行,比如提供选择要执行的测试场景等功能,可由用户定制.
    2. main.h 该文件包含了cbenchmark的头文件,以及若干工具文件,同时声明了main.c中的函数定义.
    3. mos_perf_test.cpp 该文件包含了mos模块ice接口的测试代码,通过将mos_init函数中实现的ice实例:mos传递给pVuser→verb指针,从而可以让真正实现压力请求的函数:mos_getUserStatus,mos_getUserCount得到该对象的引用,以访问checkcast后得到的MOSInterfacePrx对象.注意new的使用.
    4. mos_perf_test.h 该文件包含了mos_perf_test.cpp实现的ice连接建立/释放函数(mos_init(),mos_end()),以及测试方法(mos_getUserStatus,mos_getUserCount).

关于main.c


                                pmw->script.init = mos_init;
                                pmw->script.act = mos_getUserCount;
                                pmw->script.end = mos_end;

这是测试mos_getUserCount函数的场景.
  • 基本的测试思路是:
    1. mos_init函数实现初始化,比如ice协议就是建立连接,并将代理类放到堆中并将指针传递给pVuser→verb或者它指向的某个结构,
    2. mos_getUserCount函数实现迭代的测试,也就是在测试过程中,CBenchmark会不断执行该函数已产生业务上的请求,
    3. mos_end函数实现释放链接操作.

不管怎样的协议的性能测试,思路如出一辙,你只需按照上面的三条完成业务代码的编写,CBenchmark就会帮助你把这个业务逻辑变成高并发高频率的请求,这样会瞬间给服务端带来极大的压力,从而测试服务器的抗压性.

TODO

这个用例是我在测试工作中积累的数十个测试场景里挑选出来的,已经非常的简单了,但要了解cbenchmark的工作原理,还是需要再阅读更多的关于cbenchmark的文档,我会陆续放出.

c读写ini配置文件 用c/c++读写ini配置文件有不少第三方的开源库,如iniparser、libini、rwini、UltraLightINIParser等,但都不理想,往往代码较大、功能较弱、 接口使用不方便。尤其在大小写处理、前后空格、各种注释、跨平台换行符支持、带引号字符串处理、无section操作、原格式保持等方面存在问题。 现将本人精心制作的ini读写程序源码奉献给大家,c编写,简洁好用。支持windows和linux。 主要特点: 1、支持;和#注释符号,支持行尾注释。 2、支持带引号'或"成对匹配的字符串,提取时自动去引号。引号中可带其它引号或;#注释符。 3、支持无section或空section(名称为空)。 4、支持10、16、8进制数,0x开头为16进制数,0开头为8进制。 5、支持section、key或=号前后带空格。 6、支持\n、\r、\r\n或\n\r换行格式。 7、不区分section、key大小写,但写入时以新串为准,并保持其大小写。 8、新增数据时,若section存在则在该节最后一个有效数据后添加,否则在文件尾部添加。 9、支持指定key所在整行删除,即删除该键值,包括注释。 10、可自动跳过格式错误行,修改时仍然保留。 11、修改时保留原注释:包括整行注释、行尾注释(包括前面空格)。 12、修改时保留原空行。以上三点主要是尽量保留原格式。 不足之处: 1、不支持单key多value(逗号分割),只能一次性提取后自行处理。 2、不支持同名重复section和key。(重复section可视为错误,重复key则可能造成分歧) 3、不能提取所有section或key名称。 使用只需两个文件inirw.h、inirw.c,另有测试程序和工程文件,支持windows和linux。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值