module AbCrunch::Tester

Public Class Methods

log_result_summary(results) click to toggle source
# File lib/abcrunch/tester.rb, line 34
def self.log_result_summary(results)
  AbCrunch::Logger.log :summary_title, "Summary"
  AbCrunch::Logger.log :summary, "#{"Page".ljust(30, ' ')}#{"Response time".rjust(10, ' ')}  #{"Concurrency".rjust(16, ' ')}  #{"Queries/sec".rjust(12, ' ')}"
  results.each do |result|
    page_name = result[:page][:name].ljust(30, ' ')
    base_response_time = sprintf("%.2f", result[:qps_result].avg_response_time).rjust(10, ' ')
    max_concurrency = result[:qps_result].ab_options[:concurrency].to_s.rjust(16, ' ')
    queries_per_second = sprintf("%.2f", result[:qps_result].queries_per_second).rjust(12, ' ')
    if result[:passed]
      AbCrunch::Logger.log :summary_passed, "#{page_name}#{base_response_time}  #{max_concurrency}  #{queries_per_second}"
    else
      AbCrunch::Logger.log :summary_failed, "#{page_name}#{base_response_time}  #{max_concurrency}  #{queries_per_second}"
    end
  end
  AbCrunch::Logger.log :summary_title, "Legend"
  AbCrunch::Logger.log :summary, "Response Time = Best average response time (ms) at max concurrency"
  AbCrunch::Logger.log :summary, "Concurrency = Best concurrency where response time doesn't bust our performance threshold"
  AbCrunch::Logger.log :summary, "Queries/sec = Queries per second at best concurrency"

  results
end
test(pages) click to toggle source
# File lib/abcrunch/tester.rb, line 3
def self.test(pages)
  results = []

  pages.each do |page|
    passed, qps_result, errors = AbCrunch::PageTester.test(page)
    results << {
      :page => page,
      :passed => passed,
      :qps_result => qps_result,
      :errors => errors
    }
  end

  log_result_summary results

  passed = results.reduce(true) { |value, result| value && result[:passed] }

  if not passed
    errors = results.reduce('') do |value, result|
      page_set_errors = result[:errors].reduce('') do |val, error|
        "#{val}#{val.length > 0 ? "\n" : ''}#{error}"
      end
      "#{value}#{value.length > 0 ? "\n" : ''}#{page_set_errors}"
    end

    raise "Load tests FAILED\n#{errors}"
  end

  results
end