私のオープンソースプロジェクト:RoadRunner


コードアドレス:http://code.google.com/p/roadrunner/
序:いつのまにかバージョン番号は3.3.1になりましたが、
以前はずっとこのプロジェクトを宣伝していませんでしたが、自分で使っていました.唯一の対外声明はプログラマー誌に発表された文章の中で少し持っていました.
それはちょうどそれを使って簡単な解決策を作ったからだ.
最初は宣伝しなかったのは、自分がもっとバグを見つけたいから、修正してから公表したからだ.
その後バグもなくなりましたが、時間の関係で宣伝を忘れてしまい、google.codeやgemcutterに黙っていました.
今出してみんなに見せて、みんなはどんなもっと良い設計あるいはアイデアがあって、すべて私に教えて、もし考えがとても良いならば、私达はあなたのコードの断片を加えます:)
==========================================
最新GemのはSourceの中でGoogle CodeのSVNを通じてダウンロードして下さい
Gemから直接インストールすることもできます:gem install RoadRunner--sourcehttp://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の3つのテーブルはありません
RoadRunnerは、この3つのテーブルとデフォルトのフィールドを自動的に作成します.
この3つのテーブルにテストデータを書き込む.
ただし、この3つのテーブルが既に存在するが、フィールドと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をインストールしたら、まずテストコードを読むことができ、その後すぐに手に入れることができます.
テスト例1、計算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ディレクトリを見ることができます.テスト例がたくさんあります.