並行性をローカルでテストする最良の方法は何ですか? つまり、10 個の同時ヒットをテストしたいと考えています。Blitzのようなサービスを認識しています。ただし、競合状態に対してテストするためにローカルで行うより簡単な方法を見つけようとしています。
何か案は?Curl経由でしょうか?
並行性をローカルでテストする最良の方法は何ですか? つまり、10 個の同時ヒットをテストしたいと考えています。Blitzのようなサービスを認識しています。ただし、競合状態に対してテストするためにローカルで行うより簡単な方法を見つけようとしています。
何か案は?Curl経由でしょうか?
Apache Bench ( ab
) を確認してください。基本的な使い方はとてもシンプルです:
ab -n 100 -c 10 http://your.application
テストで競合状態をローカルでテストするには、このようなヘルパーを使用できます
# call block in a forked process
def fork_with_new_connection(config, object = nil, options={})
raise ArgumentError, "Missing block" unless block_given?
options = {
:stop => true, :index => 0
}.merge(options)
fork do
# stop the process after fork
Signal.trap('STOP') if options[:stop]
begin
ActiveRecord::Base.establish_connection(config)
yield(object)
ensure
ActiveRecord::Base.remove_connection
end
end
end
# call multiply times blocks
def multi_times_call_in_fork(count=3, &block)
raise ArgumentError, "Missing block" unless block_given?
config = ActiveRecord::Base.remove_connection
pids = []
count.times do |index|
pids << fork_with_new_connection(config, nil, :index=>index, &block)
end
# continue forked processes
Process.kill("CONT", *pids)
Process.waitall
ActiveRecord::Base.establish_connection(config)
end
# example
multi_times_call_in_fork(5) do
# do something with race conditions
# add asserts
end