我是靠谱客的博主 满意太阳,最近开发中收集的这篇文章主要介绍RoadRunner性能测试软件的介绍,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、介绍:

Google Code上的一个开源项目,还在开发中,作者Email是:zheng.cu...@gmail.com。RoadRunner是一款测试软件,可以对系统进行性能、并发和压力测试。开发开始于2009.4.1,目前最高版本是4.0,RR在4.0.0版本有了很大的提升,增加了进程模式、性能监控和一套分布式存储性能测试的解决方案。

RR是用ruby实现LoadRunner的框架,既:init(){ }、action(){ }和end(){ };init存放初始化、登陆等操作;action可以不断的迭代执行,从而产生持续不断的压力;end存放释放资源、退出等操作。外加一个虽然简单但直观的报表。作者在之后的版本将不断的完善RR的报告,提高和LR的相似度,还会增加更多ruby特有的方法,丰富Rrhelper模块代码。RR更方便的地方在于,它不仅仅可以通过日志来展示结果,还可以将结果存储到数据库中,大家可以看test目录中的pi_db.rb这个测试文件,之后就会很方便的通过读取数据库的测试记录,来绘制测试报表。

目前RR的资料较少,主要是作者自己写的几篇文章,附录在“资料”一栏。

 

二、部署与配置:

1.       环境

ubuntu,Linux version 3.2.0-59-generic-pae (buildd@aatxe) (gcc version 4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5) )。

本文通过putty远程控制ubuntu运行例子程序。

2.  安装:

1. 安装ruby(1.9.3)—参考http://blog.csdn.net/yangcs2009/article/details/9792311

2. 安装gem(1.8.23)

3. 安装RoadRunner:最新的Gem到Source中通过Google Code的SVN下载;也可以通过Gem直接安装:gem install RoadRunner --sourcehttp://gemcutter.org

4. 根据需要,还需要安装MySQL数据库和配置分布式系统。

5. 测试安装是否成功:/var/lib/gems/1.8/gems/roadrunner-4.0.4/test# 目录下,有测试的例子,比如运行“ruby baidu.rb”,在我的电脑出现

“/usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in`gem_original_require': no such file to load – net/ssh (LoadError)”错误,说明需要安装软件包net-ssh(gem install net-ssh);同理,出现类似的错误,则需要安装缺少的软件包。运行例子后在终端出现测试结果,则说明软件运行正常:


图一:运行“rubypi.rb”

 

三、软件结构:

  下面解释一下在安装了RR后,RR在系统中的软件结构:

图二:RR的软件结构

  bin和controller目录:存放着对分布式系统做性能测试的解决方案,用例分别为: 大文件的dd操作、小文件的copy操作(svn)和对mysql的访问操作三种。如果要对分布式存储做性能测试,那么直接拿RR就可以用了,用例和代码都不需要写了,改一下细节就行了。

 conf目录:里面的文件servers.yaml,是实现性能监控的功能中,存放被监控主机的ip和帐号等信息的配置文件。

  lib目录:RR的函数库,里面是RR实现的主要部分。

  log目录:存放用例的监控数据。

 test目录:里面的ruby程序是测试文件,安装好该gem后,可以先通过阅读测试代码来入手RR。

 

四、功能介绍:

  本部分以test目录下的实例介绍RR的功能。

1.      基本功能:设置并发用户数和每个用户执行的次数,对系统进行性能、并发和压力测试,并输出包括响应时间和系统吞吐量(TPS = 并发数/平均响应时间)等指标的报告。在图一中,运行“ruby pi.rb”之后,会在终端显示测试的结果,这是RR提供的最基本的性能测试功能。


图三:日志文件

2.      将结果存储在日志和数据库。存储在日志的实现方法可以在log目录下的ruby文件log.rb查看,之后只要运行ruby测试用例,就可以在log下的“stdout.log”的日志文件找到测试结果的记录,如图三,这是在运行了上面pi.rb用例后输出到日志文件“stdout.log”的内容。存储在数据库的实现可以查看lib目录下的ruby文件db.rb,这个ruby文件可以看出数据库中设置有scenarios,transactions,records这三张表,RoadRunner会自动创建这三张表,以及默认的字段,并且将测试数据写入这三张表中。作者在数据库这一块的设计是这样的:当引用RoadRunner这个gem时,在生成RoadRunner类的同时,给RoadRunner.new方法一个block,并且这个block里面是一个ActiveRecord的数据库连接,然后将数据写入上面的三张表中。


图四:进程模式

3.      进程模式,使得压力发送的能力只限制于硬件,进程模式是RR的4.0版本添加的功能。test目录下的download_process.rb是进程模式的一个例子。在lib目录里面的run.rb可以看出当程序选择线程模式(t)或者进程模式(p)时的行为。当mode定义为进程模式的时候,RoadRunner将产生最真实的压力。如图四,上图是在运行download_process.rb的时候,在终端运行“ps -x”可以看到的有多个进程在运行;下图是运行测试例子后输出的日志。

4.      性能监控,同时提供了分布式存储性能测试的解决方案,可以监控多台被压的主机,但系统需要Xnix系列,可以自定义监控内容。在test目录下的pi_monitor.rb可以用来是此功能的一个例子,在测试之前,需要对conf目录下的servers.yaml文件进行配置,配置分布式系统各个主机的信息。在这里,直接引用作者的测试结果。如图五,上图是log目录下的日志输出,下图是log目录下生成的用来存储分布式主机的测试结果的目录,可以看出生成的目录是根据servers.yaml配置的内容来输出的。在源码的bin和controller目录中,还放着对分布式系统做性能测试的解决方案,用例分别为:大文件的dd操作、小文件的copy操作(svn)和mysql的访问操作。如果要对分布式存储做性能测试,那么直接拿RoadRunner就可以用了,用例和代码都不需要写了,修改细节就行了。


图五:性能监控

5.      与“倩女幽魂”项目合并起来用,可以监控被测主机的系统资源使用情况。系统负载和cpu用倩女幽魂可以得到,而且已经带了一个server的portal和flash报表。源代码在:https://code.google.com/p/lpm/,介绍在http://charlescui.iteye.com/blog/506623。

6.      测试网络块存储nbd读写性能。参考:http://charlescui.iteye.com/blog/656804。

 

五、分析某些测试文件:

  利用提供的测试代码来学习如何使用RR,此部分直接学习如何使用RR提供的API进行测试。这里将分析pi.rb,pi_db.rb,download_process.rb和pi_monitor.rb这四个例子。这里的测试代码都是使用在“介绍”一栏提到的框架:init(){ }、action(){ }和end(){ }。

 pi.rb:利用莱布尼兹公式计算圆周率。在init(){ }部分,初始化global[:pi]和global[:deep]为计算结果的起始值和计算深度;初始化users和iterations,这两个接口定义并发用户数和每个用户执行多少次。在action(){ }部分,定义莱布尼兹公式的计算方法,按照给出的计算深度来计算圆周率。在end(){ }部分,计算圆周率的最终值。最后,调用run和report方法执行和输出日志,并且输出计算好的tps(吞吐量)。

  pi_db.rb:利用莱布尼兹公式计算圆周率之后将性能测试的结果填入数据库。这个ruby跟pi.rb的主要区别在于“rrpi = RoadRunner.new”语句,pi_db.rb增加了对数据库的支持的方法。其中利用了session的方法,关于session的方法可以参考这篇博文:http://blog.sina.com.cn/s/blog_53aa15bf0100c3ql.html,需要定义session[:adapter]和存储的数据库session[:database]。

  download_process.rb:在进程模式下测试下载一个文件,是并发性能测试的一个例子。这部分的重点是定义了mode = ‘p’,表明测试使用进程模式。init(){ }定义了并发用户数目users和每个用户执行多少次iterations。action(){ }定义了要测试的行为。end(){ }部分没有执行动作。最后调用run和report执行程序和输出报告,然后输出系统TPS。

 pi_monitor.rb:对分布式系统进行性能监控的一个例子。这个例子跟pi.rb的唯一区别是增加了cmd = [ ]和RRMonitor.monit(){ }方法。cmd定义的是监控的内容。monit(){ }定义了使用性能监控和被监控主机的ip和帐号等信息存放在conf目录下的servers.yaml文件里。

 

六、分析RR源代码:

  这部分将分析RR的源代码,加深对RR使用的理解,也为将来可能的扩展RR功能打基础。

  lib目录:

1.      init.rb、run.rb、ended.rb和action.rb检查系统的block。block_given?方法属于Kernel模块,而此模块包含在Object中。利用这个block可以连接到数据库。

2.      db.rb定义了数据库中的scenarios,transactions,records三个表和表的默认字段。

3.      model.rb定义了数据库中表之间的关系。

4.      report.rb定义了怎么生成报告的方法,比较简单,不用深究。

5.      roadrunner.rb这是主要部分,定义了RoadRunner模块,实现了initialize()、transaction()和method_missing()。

6.      rrmonitor.rb定义了性能监控的方法。

7.      rrhelper.rb定义了iterationID和userID。

  bin目录:

1.      controller.rb和host_mgr.rb提供分布式系统性能测试方案。

2.      nbd_prepare.sh和测试网络块存储nbd读写性能相关的用例。

 controller目录:

1.      dd.sh大文件的dd操作的用例。

2.      mysql.rb提供数据库进行性能测试方案。

3.      mysql.sh对MySQL的访问用例。

4.      svn.sh小文件copy操作的用例。

 

七、RR的其他特点:

LPM是一个监控Linux主机性能参数的类库,带有一个web server,提供网页访问接口,前提是你安装过"sinatra"。主要监控的是Linux主机性能常用参数,比如主机CPU、Load和Memory等,还可以监控单个进程的参数指标比如单进程消耗的CPU等。LPMP将使用LPM提供的数据,提供一个对外的统一监控界面,LPMP能够支持分布式多服务器端监控。将它们和RR合并使用,可以对分布式服务器进行测试及监控。

可能RR还不够完善,但是它开源免费,而LR需要收费,所以可以根据需要来选择RR或者LR。理解RR的实现方式可以参考LR。

 

八、还没有完成的地方:

1.      activerecord的调用改为active_record。

2.      需要配置数据库才能用到RR的数据库功能。

3.      没有分布式的环境进行测试。

4.      与“倩女幽魂”项目的合并。

5.      自己写一个实例。

 

九、参考资料:

https://code.google.com/p/roadrunner/

http://charlescui.iteye.com/blog/610685

http://charlescui.iteye.com/blog/520197

http://www.oschina.net/p/roadrunner/similar_projects?lang=21&sort=view&p=1

http://charlescui.iteye.com/blog/656804

 

最后

以上就是满意太阳为你收集整理的RoadRunner性能测试软件的介绍的全部内容,希望文章能够帮你解决RoadRunner性能测试软件的介绍所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部