

負荷テストツールというのは世の中に既にたくさん存在してます。

そういうツールをどうやったら作れるのかなと思い、考えております。

rubyかpythonで実装したいと考えている(ひとまずrubyで)ため、  
まずは、`faraday`というライブラリを前提で考えておりました。

今回わからないのは、引数に渡された値によって、  
リクエスト数を調整するロジックについてです。

たとえば、  
・1分あたり1000回リクエストを投げたい  
・1分あたり800回リクエストを投げたい

といった細かな調整をするときに

[code]

    client = Faraday.new(:url => "http://localhost:4567")
    res = client.get(1000) # 1000回の場合
    
[/code]

といった風にしたいのです。

faradayに固執していないので、rubyで使えるライブラリで、今回の要件を満たせるものでしたら代替は可能です。

考えていたのは、

> 1) 1分あたりのリクエスト数を記録する # 仮に1分あたり1500回とする  
>  2) その時間を基準として、今回リクエストを送りたい数で割り算をする # 1000回送りたい場合 2/3して調整する？

この方法だと1分あたり1500回が毎回の結果として同じであれば良いのですが、前後幅が大きいとうまくいかないかなと思いました。

また、仮に1分間に2000回のリクエストを送りたいとなった場合どうするのか等も考えていて、手詰まってしました。

よろしくお願いします。

# 追記

今回やりたいこととしましては、  
「1分間に1000人がアクセスする」といったシナリオのテストができるようなプログラムを作ることなため、  
単一コネクションではなく、複数コネク‌​ションで処理することが前提でプログラムを実装したいです。

勝手ながら、今回の実装は実現してみたいので、マルチポストさせて頂きました。  
ご了承下さい。  
<https://teratail.com/questions/41220?complete=>

# 追記 2016/07/15 18時30分

レスポンスタイムについての言及がおおかったのですが、  
私が、レスポンスタイムを気にしている理由としましては、単一コネクション前提で考えてしまっていたためです。  
そのため、複数コネクションを前提とした際には、レスポンスタイムは気にしなくていいです。  
私の中で、コネクションの整理がついておらず、失礼しました。。

その上で、分からない点は複数コネクションにわけて、リクエストを送るのはスクリプトとしてどのように作成したらいいのでしょうか？です。

[code]

    1000.times.do
      client = Faraday.new(:url => "http://localhost:4567")
      res = client.get()
    end
    
[/code]

のようなものかと思っておりましたが、これは単一コネクションになるのかなと思い・・・。


CC BY-SA 3.0
2016-07-14T14:44:56.433
27631
2016-11-15T06:18:13.787
2016-07-15T09:26:40.340
13175
13175
question
ruby python テスト
一分あたりのリクエスト数を調整できるようなスクリプトを作成したいです。（負荷テストツールのようなものを自作してみたい）


仮に1000人の場合、1分以内に1000ですか？  
それとも、1分以内にほぼ等間隔に1000ですか？

前者であれば何も考えず1000のインスタンスを作って、どかっとリクエストを送ってしまえばいいように思えます。  
ただ、通信環境などによっては、通信時間やタイムアウトまで時間がかかって1分以内に終わらないかもしれません。

後者であればタイマーで繰り返せば作りやすいんじゃないかな、と思います。  
タイマーの繰り返しのインターバルを60sec/1000人にする感じで、1500人なら60sec/1500人ですね。

いかがでしょうか。


CC BY-SA 3.0
2016-07-15T08:32:38.963
27650
2016-07-15T08:32:38.963
17014
27631
answer