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
|
# File 'lib/minitest/perf_regression.rb', line 8
def check_performance_regression_on(name)
define_method("test_performance_regression_on_#{name}") do
nbr_of_samples = 20
timestamp = Time.now
prefix_filename = "perfregr_#{name}_"
perfregr_files = Dir.entries('.').grep(/^#{prefix_filename}/).sort
result_jsons = []
result = Benchmark.observe_and_summarize(nbr_of_samples) do |x|
x.report("name #{timestamp}") { send name }
end
result_jsons << JSON.parse(result)
File.open("#{prefix_filename}#{timestamp.to_i}.json", 'w') do |file|
file.write(result)
end
if perfregr_files.empty?
assert true
else
previous_result_json = nil
File.open(perfregr_files.last, 'r') do |file|
result_jsons << JSON.load(file)
end
best, is_h0_rejected = Benchmark.aggregate_and_rank(result_jsons)
refute is_h0_rejected, "Performance Regression for #{name} run at #{timestamp}"
end
end
end
|