代码地址:http://code.google.com/p/roadrunner/
序:不知不觉版本号已经到3.3.1了,
以前一直没有对外宣传这个项目,只是自己在用,惟一一次对外声明过是在一篇发表在程序员杂志的那片文章中略带了一下,
那是由于正好用到它做一个简单的解决方案.
起初没有对外宣传是因为想自己多发现些bug,修正好后再公布出去.
后来bug也没了,但由于时间关系忘记宣传了,它也就一直默默的呆在google.code和gemcutter上.
现在拿出来给大家看看,大家有什么更好的设计或者点子,都可以告诉我,如果想法很不错,我们就把你的代码片段加进去:)
===========================分割线============================
最新Gem的请到Source中通过Google Code的SVN下载
也可以通过Gem直接安装:gem install RoadRunner --source http://gemcutter.org
LoadRunner?这个工具很多做过性能测试的朋友肯定都知道,里面有很多方便易用的方法,不过这些方法的实现不是重点,毕竟ruby的第三方库的各种实现非常的多,ruby开发者的热情都很高。
RoadRunner?实现的是LoadRunner?的框架,
既: init(){ } action(){ } end(){ }
init存放初始化、登陆等操作,action可以不断的迭代执行,从而产生持续不断的压力,end存放释放资源、退出等操作。
外加一个虽然简单但直观的报表,之后的版本除了不断的完善RR的报告,提高和LR的相似度之外,还会增加更多ruby特有的方法,丰富Rrhelper模块代码。
RoadRunner更方便的地方在于,它不仅仅可以通过日志来展示结果,还可以将结果存储到数据库中,大家可以看test目录中的pi_db.rb这个测试文件,之后就会很方便的通过读取数据库的测试记录,来绘制测试报表.
我觉得我在写数据库这块代码的时候,这个设计思路比较让自己满意,
这块的设计是这样的:
当你引用RoadRunner这个gem时,如果你还在生成RoadRunner类的同时,给RoadRunner.new方法一个block,
并且这个block里面是一个ActiveRecord的数据库连接,
而且这个数据库中没有scenarios,transactions,records这三张表,
则RoadRunner会自动创建这三张表,以及默认的字段
并且将测试的数据写入这三张表中.
但要注意,如果已经有了这三张表,但字段和RR的要求不同,那就会导致写数据异常,需要分库或者改名.
如果能够将它和我的倩女幽魂项目(http://gemcutter.org/gems/lpm,http://gemcutter.org/gems/lpmp)合并起来用,那还可以监控被测主机的系统资源使用情况.
倩女幽魂介绍:
http://code.google.com/p/lpm/
http://docs.google.com/View?id=dcnwrnvv_871dvvc64dw
http://charlescui.iteye.com/blog/506623
我喜欢LR,我更喜欢RR -
该gem的test目录下有测试文件,安装好该gem后,可以先阅读测试代码,之后就可以很快的入手了。
测试例子一,计算PI:
# 莱布尼兹公式计算圆周率
#rrpi.global[:deep]代表计算的深度
#深度越深,计算越精确,当然也越耗时
$:.unshift File.join(File.dirname(__FILE__),'..','lib')
require 'roadrunner'
rrpi=RoadRunner.new
rrpi.init do
rrpi.global[:pi],rrpi.global[:deep]=0,100
# users决定同时有多少并发用户一起执行action
# iterations决定每个用户执行多少次
rrpi.users,rrpi.iterations=10,1000
end
rrpi.action do
# 新增加了iterationId和userId两个接口方法,
# 可以通过iterationId获得当前action执行到第一次
# 可以通过userId获得当前action执行用户的id
# puts rrpi.iterationId
# puts rrpi.userId
1.upto(rrpi.global[:deep]){|x|rrpi.global[:pi]+=((-1)**(x+1)*1.0/(x*2-1))}
end
rrpi.ended do
rrpi.global[:pi]*=4
#rrpi.global={}
end
rrpi.run
rrpi.report
执行完毕后,控制台会输出报告,类似如下信息:
Performance Reports
user system total real
4.750000 0.016000 4.766000 ( 4.796000)
The Virtual User is 10.
Total Execute 1000 Action(s).
Total Cost 4.7960000038147 Second(s).
This Scenario's TPS : 208.507089075189.
The longest action cost 0.0160000324249268 seconds.
User defined params as below:
{:deep=>1000, :pi=>3140.59265383977}
End of Reports
代码的黏贴复制会导致代码变形,大家可以去看roadrunner源码的test目录,里面有很多测试用例.