Class: PerfCheck::TestCase
- Inherits:
-
Object
- Object
- PerfCheck::TestCase
- Defined in:
- lib/perf_check/test_case.rb
Instance Attribute Summary collapse
-
#cookie ⇒ Object
Returns the value of attribute cookie.
-
#perf_check ⇒ Object
readonly
Returns the value of attribute perf_check.
-
#reference_profiles ⇒ Object
Returns the value of attribute reference_profiles.
-
#reference_response ⇒ Object
Returns the value of attribute reference_response.
-
#resource ⇒ Object
Returns the value of attribute resource.
-
#this_profiles ⇒ Object
Returns the value of attribute this_profiles.
-
#this_response ⇒ Object
Returns the value of attribute this_response.
Instance Method Summary collapse
- #eql?(test) ⇒ Boolean
- #hash ⇒ Object
-
#initialize(perf_check, route) ⇒ TestCase
constructor
A new instance of TestCase.
- #issue_request(server, options) ⇒ Object
- #latency_difference ⇒ Object
- #reference_latency ⇒ Object
- #reference_query_count ⇒ Object
- #request_headers ⇒ Object
- #response_diff ⇒ Object
- #run(server, options) ⇒ Object
- #speedup_factor ⇒ Object
- #switch_to_reference_context ⇒ Object
- #this_latency ⇒ Object
- #this_query_count ⇒ Object
Constructor Details
#initialize(perf_check, route) ⇒ TestCase
Returns a new instance of TestCase.
12 13 14 15 16 17 |
# File 'lib/perf_check/test_case.rb', line 12 def initialize(perf_check, route) @perf_check = perf_check self.this_profiles = [] self.reference_profiles = [] self.resource = route end |
Instance Attribute Details
#cookie ⇒ Object
Returns the value of attribute cookie.
9 10 11 |
# File 'lib/perf_check/test_case.rb', line 9 def @cookie end |
#perf_check ⇒ Object (readonly)
Returns the value of attribute perf_check.
7 8 9 |
# File 'lib/perf_check/test_case.rb', line 7 def perf_check @perf_check end |
#reference_profiles ⇒ Object
Returns the value of attribute reference_profiles.
10 11 12 |
# File 'lib/perf_check/test_case.rb', line 10 def reference_profiles @reference_profiles end |
#reference_response ⇒ Object
Returns the value of attribute reference_response.
9 10 11 |
# File 'lib/perf_check/test_case.rb', line 9 def reference_response @reference_response end |
#resource ⇒ Object
Returns the value of attribute resource.
8 9 10 |
# File 'lib/perf_check/test_case.rb', line 8 def resource @resource end |
#this_profiles ⇒ Object
Returns the value of attribute this_profiles.
10 11 12 |
# File 'lib/perf_check/test_case.rb', line 10 def this_profiles @this_profiles end |
#this_response ⇒ Object
Returns the value of attribute this_response.
9 10 11 |
# File 'lib/perf_check/test_case.rb', line 9 def this_response @this_response end |
Instance Method Details
#eql?(test) ⇒ Boolean
98 99 100 |
# File 'lib/perf_check/test_case.rb', line 98 def eql?(test) resource == test.resource end |
#hash ⇒ Object
102 103 104 |
# File 'lib/perf_check/test_case.rb', line 102 def hash resource.hash end |
#issue_request(server, options) ⇒ Object
106 107 108 109 110 |
# File 'lib/perf_check/test_case.rb', line 106 def issue_request(server, ) server.profile do |http| http.get(resource, request_headers) end end |
#latency_difference ⇒ Object
74 75 76 |
# File 'lib/perf_check/test_case.rb', line 74 def latency_difference this_latency - reference_latency end |
#reference_latency ⇒ Object
60 61 62 63 |
# File 'lib/perf_check/test_case.rb', line 60 def reference_latency return nil if reference_profiles.empty? reference_profiles.map(&:latency).inject(0.0, :+) / reference_profiles.size end |
#reference_query_count ⇒ Object
69 70 71 72 |
# File 'lib/perf_check/test_case.rb', line 69 def reference_query_count return nil if reference_profiles.empty? reference_profiles.map(&:query_count).inject(0, :+) / reference_profiles.size end |
#request_headers ⇒ Object
112 113 114 115 116 |
# File 'lib/perf_check/test_case.rb', line 112 def request_headers headers = {'Cookie' => "#{}".strip} headers['Accept'] = 'text/html,application/xhtml+xml,application/xml' headers.merge!(perf_check..headers) end |
#response_diff ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/perf_check/test_case.rb', line 82 def response_diff diff = Diffy::Diff.new(reference_response, this_response, include_diff_info: true, diff: perf_check..) if diff.to_s(:text).lines.length < 3 OpenStruct.new(:changed? => false) else FileUtils.mkdir_p("#{perf_check.app_root}/tmp/perf_check/diffs") file = `mktemp -u "#{perf_check.app_root}/tmp/perf_check/diffs/XXXXXXXXX"`.strip File.open("#{file}.diff", "w") do |f| f.write(diff.to_s(:text).lines[2..-1].join) end OpenStruct.new(:changed? => true, :file => "#{file}.diff") end end |
#run(server, options) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/perf_check/test_case.rb', line 19 def run(server, ) unless .diff perf_check.logger.info("\t"+['request', 'latency', 'server rss', 'status', 'queries', 'profiler data'].map(&:underline).join(" ")) end (.number_of_requests+1).times do |i| profile = issue_request(server, ) next if i.zero? # first request just warms up the server if .verify_no_diff && i == 1 response_for_comparison(profile.response_body) end unless .diff row = sprintf("\t%2i:\t %.1fms %4dMB\t %s\t %s\t %s", i, profile.latency, profile.server_memory, profile.response_code, profile.query_count, profile.profile_url) perf_check.logger.info(row) end context_profiles << profile unless .http_statuses.include?(profile.response_code) error = sprintf("\t :\tFAILED! (HTTP %d)", profile.response_code) perf_check.logger.warn(error.red.bold) perf_check.logger.warn("\t The server responded with an invalid http code") if profile.backtrace perf_check.logger.warn("Backtrace found:") backtrace = [profile.backtrace[0], *profile.backtrace.grep(/#{perf_check.app_root}/)] backtrace.each{ |line| perf_check.logger.warn(" #{line}") } end break end end perf_check.logger.info '' unless .diff # pretty! end |
#speedup_factor ⇒ Object
78 79 80 |
# File 'lib/perf_check/test_case.rb', line 78 def speedup_factor reference_latency.to_f / this_latency.to_f end |
#switch_to_reference_context ⇒ Object
118 119 120 |
# File 'lib/perf_check/test_case.rb', line 118 def switch_to_reference_context @context = :reference end |
#this_latency ⇒ Object
56 57 58 |
# File 'lib/perf_check/test_case.rb', line 56 def this_latency this_profiles.map(&:latency).inject(0.0, :+) / this_profiles.size end |
#this_query_count ⇒ Object
65 66 67 |
# File 'lib/perf_check/test_case.rb', line 65 def this_query_count this_profiles.map(&:query_count).inject(0, :+) / this_profiles.size end |