performance_test.rb
2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
require_relative "../test_helper"
require 'benchmark'
class PerformanceTest < ActionController::IntegrationTest
all_fixtures
FACTOR = 1.8
# Testing blog page display. It should not present a linear increase in time
# needed to display a blog page with the increase in number of posts.
#
# GOOD BAD
#
# ^ ^ /
# | | /
# | _____ | /
# | / | /
# | / | /
# |/ |/
# +---------> +--------->
# 0 50 100 0 50 100
#
should 'not have a linear increase in time to display a blog page' do
person = create_profile('clueless')
person0 = create_profile('person0')
person1 = create_profile('person1')
create_posts(person1, 50)
person2 = create_profile('person2')
create_posts(person2, 100)
get '/person0/blog'
get '/person1/blog'
get '/person2/blog'
# no posts
time0 = (Benchmark.measure { 10.times { get '/person0/blog' } })
# first 50
time1 = (Benchmark.measure { 10.times { get '/person1/blog' } })
# another 50
time2 = (Benchmark.measure { 10.times { get '/person2/blog' } })
# should not scale linearly, i.e. the inclination of the first segment must
# be a lot higher than the one of the segment segment. To compensate for
# small variations due to hardware and/or execution environment, we are
# satisfied if the the inclination of the first segment is at least twice
# the inclination of the second segment.
a1 = (time1.total - time0.total)/50.0
a2 = (time2.total - time1.total)/50.0
assert a1 > a2*FACTOR, "#{a1} should be larger than #{a2} by at least a factor of #{FACTOR}"
end
protected
def create_profile(name)
person = create_user(name).person
Blog.create(:name => "Blog", :profile => person)
person
end
def create_posts(profile, n)
postnumber = profile.articles.count
blog = profile.blog
n.times do |i|
postnumber += 1
TinyMceArticle.create!(:profile => profile, :parent => blog, :name => "post number #{postnumber}")
end
end
end