一分あたりのリクエスト数を調整できるようなスクリプトを作成したいです。(負荷テストツールのようなものを自作してみたい)
負荷テストツールというのは世の中に既にたくさん存在してます。
そういうツールをどうやったら作れるのかなと思い、考えております。
rubyかpythonで実装したいと考えている(ひとまずrubyで)ため、
まずは、faraday
というライブラリを前提で考えておりました。
今回わからないのは、引数に渡された値によって、
リクエスト数を調整するロジックについてです。
たとえば、
・1分あたり1000回リクエストを投げたい
・1分あたり800回リクエストを投げたい
といった細かな調整をするときに
client = Faraday.new(:url => "http://localhost:4567")
res = client.get(1000) # 1000回の場合
といった風にしたいのです。
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分
レスポンスタイムについての言及がおおかったのですが、
私が、レスポンスタイムを気にしている理由としましては、単一コネクション前提で考えてしまっていたためです。
そのため、複数コネクションを前提とした際には、レスポンスタイムは気にしなくていいです。
私の中で、コネクションの整理がついておらず、失礼しました。。
その上で、分からない点は複数コネクションにわけて、リクエストを送るのはスクリプトとしてどのように作成したらいいのでしょうか?です。
1000.times.do
client = Faraday.new(:url => "http://localhost:4567")
res = client.get()
end
のようなものかと思っておりましたが、これは単一コネクションになるのかなと思い・・・。