4

並行性をローカルでテストする最良の方法は何ですか? つまり、10 個の同時ヒットをテストしたいと考えています。Blitzのようなサービスを認識しています。ただし、競合状態に対してテストするためにローカルで行うより簡単な方法を見つけようとしています。

何か案は?Curl経由でしょうか?

4

2 に答える 2

5

Apache Bench ( ab) を確認してください。基本的な使い方はとてもシンプルです:

ab -n 100 -c 10 http://your.application
于 2012-08-14T02:21:31.213 に答える
0

テストで競合状態をローカルでテストするには、このようなヘルパーを使用できます

# 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  
于 2012-08-14T06:55:48.120 に答える