rspec_log_formatter 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/.gitignore +1 -1
- data/.ruby-version +1 -1
- data/README.md +53 -7
- data/bin/rspec_log_formatter +30 -0
- data/dummy/.gitignore +16 -0
- data/dummy/.rspec +1 -0
- data/dummy/Gemfile +47 -0
- data/dummy/README.rdoc +28 -0
- data/dummy/Rakefile +6 -0
- data/dummy/app/assets/images/.keep +0 -0
- data/dummy/app/assets/javascripts/application.js +16 -0
- data/dummy/app/assets/stylesheets/application.css +13 -0
- data/dummy/app/controllers/application_controller.rb +5 -0
- data/dummy/app/controllers/concerns/.keep +0 -0
- data/dummy/app/helpers/application_helper.rb +2 -0
- data/dummy/app/mailers/.keep +0 -0
- data/dummy/app/models/.keep +0 -0
- data/dummy/app/models/concerns/.keep +0 -0
- data/dummy/app/views/layouts/application.html.erb +14 -0
- data/dummy/bin/bundle +3 -0
- data/dummy/bin/rails +4 -0
- data/dummy/bin/rake +4 -0
- data/dummy/config/application.rb +23 -0
- data/dummy/config/boot.rb +4 -0
- data/dummy/config/database.yml +25 -0
- data/dummy/config/environment.rb +5 -0
- data/dummy/config/environments/development.rb +29 -0
- data/dummy/config/environments/production.rb +80 -0
- data/dummy/config/environments/test.rb +36 -0
- data/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/dummy/config/initializers/inflections.rb +16 -0
- data/dummy/config/initializers/mime_types.rb +5 -0
- data/dummy/config/initializers/secret_token.rb +12 -0
- data/dummy/config/initializers/session_store.rb +3 -0
- data/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/dummy/config/locales/en.yml +23 -0
- data/dummy/config/routes.rb +56 -0
- data/dummy/config.ru +4 -0
- data/dummy/db/schema.rb +16 -0
- data/dummy/db/seeds.rb +7 -0
- data/dummy/lib/assets/.keep +0 -0
- data/dummy/lib/tasks/.keep +0 -0
- data/dummy/log/.keep +0 -0
- data/dummy/public/404.html +58 -0
- data/dummy/public/422.html +58 -0
- data/dummy/public/500.html +57 -0
- data/dummy/public/favicon.ico +0 -0
- data/dummy/public/robots.txt +5 -0
- data/dummy/spec/dummy_spec.rb +7 -0
- data/dummy/spec/spec_helper.rb +46 -0
- data/dummy/test/controllers/.keep +0 -0
- data/dummy/test/fixtures/.keep +0 -0
- data/dummy/test/helpers/.keep +0 -0
- data/dummy/test/integration/.keep +0 -0
- data/dummy/test/mailers/.keep +0 -0
- data/dummy/test/models/.keep +0 -0
- data/dummy/test/test_helper.rb +15 -0
- data/dummy/vendor/assets/javascripts/.keep +0 -0
- data/dummy/vendor/assets/stylesheets/.keep +0 -0
- data/lib/rspec_log_formatter/analysis/analyzer.rb +15 -50
- data/lib/rspec_log_formatter/analysis/pretty_printer.rb +10 -6
- data/lib/rspec_log_formatter/analysis/result.rb +8 -4
- data/lib/rspec_log_formatter/analysis/score.rb +42 -6
- data/lib/rspec_log_formatter/analyzer_formatter.rb +18 -6
- data/lib/rspec_log_formatter/formatter.rb +19 -12
- data/lib/rspec_log_formatter/history_manager.rb +46 -0
- data/lib/rspec_log_formatter/javascripts/chartkick.js +678 -0
- data/lib/rspec_log_formatter/performance_analyzer.rb +40 -0
- data/lib/rspec_log_formatter/templates/charts.html.erb +11 -0
- data/lib/rspec_log_formatter/version.rb +1 -1
- data/lib/rspec_log_formatter.rb +2 -1
- data/rspec_log_formatter.gemspec +1 -0
- data/spec/fixtures/test_slowing_down_over_time.history +7 -0
- data/spec/fixtures/varying_flakiness.history +9 -9
- data/spec/lib/rspec_log_analyzer/analysis/analyzer_spec.rb +25 -21
- data/spec/lib/rspec_log_analyzer/analysis/pretty_printer_spec.rb +10 -8
- data/spec/lib/rspec_log_analyzer/analyzer_formatter_spec.rb +3 -3
- data/spec/lib/rspec_log_analyzer/formatter_spec.rb +16 -18
- data/spec/lib/rspec_log_analyzer/history_manager_spec.rb +16 -0
- data/spec/lib/rspec_log_analyzer/performance_analyzer_spec.rb +16 -0
- data/specs.sh +4 -0
- metadata +95 -12
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'chartkick'
|
3
|
+
|
4
|
+
module RspecLogFormatter
|
5
|
+
class ERBContext
|
6
|
+
include Chartkick::Helper
|
7
|
+
def initialize(hash)
|
8
|
+
hash.each_pair do |key, value|
|
9
|
+
instance_variable_set('@' + key.to_s, value)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
def get_binding
|
13
|
+
binding
|
14
|
+
end
|
15
|
+
end
|
16
|
+
class PerformanceAnalyzer
|
17
|
+
def initialize(filepath)
|
18
|
+
@history_manager = HistoryManager.new(filepath)
|
19
|
+
end
|
20
|
+
|
21
|
+
def write(description, filepath)
|
22
|
+
chartkick_js = File.open(File.join(File.dirname(__FILE__), './javascripts/chartkick.js')).read
|
23
|
+
data = analyze(description)
|
24
|
+
context = ERBContext.new({chartkick_js: chartkick_js, plots: data})
|
25
|
+
template = ERB.new(File.open(File.join(File.dirname(__FILE__), './templates/charts.html.erb')).read)
|
26
|
+
html = template.result(context.get_binding)
|
27
|
+
|
28
|
+
File.open(filepath, 'w').write(html)
|
29
|
+
end
|
30
|
+
|
31
|
+
def analyze(test_description)
|
32
|
+
@history_manager.results
|
33
|
+
.select{ |result| Array(test_description).include? result.description }
|
34
|
+
.reduce({}) do |memo, result|
|
35
|
+
memo[result.time.to_s] = result.duration
|
36
|
+
memo
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<h1>Charts</h1>
|
2
|
+
<head>
|
3
|
+
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
|
4
|
+
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/highcharts/3.0.9/highcharts.js"> </script>
|
5
|
+
<script>
|
6
|
+
<%= @chartkick_js %>
|
7
|
+
</script>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<%= line_chart @plots %>
|
11
|
+
</body>
|
data/lib/rspec_log_formatter.rb
CHANGED
data/rspec_log_formatter.gemspec
CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_dependency 'chartkick'
|
21
22
|
spec.add_development_dependency "bundler", "~> 1.5"
|
22
23
|
spec.add_development_dependency "rake"
|
23
24
|
spec.add_development_dependency "rspec"
|
@@ -0,0 +1,7 @@
|
|
1
|
+
1 2014-01-21 16:00:00 -0800 passed desc1 ./spec/m1k1_spec.rb 1.0
|
2
|
+
1 2014-01-22 16:00:00 -0800 passed desc1 ./spec/m1k1_spec.rb 2.0
|
3
|
+
1 2014-01-24 16:00:00 -0800 passed desc1 ./spec/m1k1_spec.rb 3.0
|
4
|
+
1 2014-01-24 16:00:00 -0800 passed desc3 ./spec/m1k1_spec.rb 9.0
|
5
|
+
1 2014-01-24 16:00:00 -0800 passed desc4 ./spec/m1k1_spec.rb 7.0
|
6
|
+
1 2014-01-29 16:00:00 -0800 passed desc1 ./spec/m1k1_spec.rb 4.0
|
7
|
+
1 2014-01-30 16:00:00 -0800 passed desc1 ./spec/m1k1_spec.rb 5.0
|
@@ -1,9 +1,9 @@
|
|
1
|
-
1 2014-01-21 16:08:25 -0800 failed desc1 ./spec/m1k1_spec.rb msg10 ec10
|
2
|
-
1 2014-01-21 16:08:25 -0800 passed desc1 ./spec/m1k1_spec.rb
|
3
|
-
1 2014-01-21 16:08:25 -0800 failed desc3 ./spec/m1k1_spec.rb msg10 ec10
|
4
|
-
1 2014-01-21 16:08:25 -0800 failed desc3 ./spec/m1k1_spec.rb msg10 ec10
|
5
|
-
1 2014-01-21 16:08:25 -0800 failed desc3 ./spec/m1k1_spec.rb msg10 ec10
|
6
|
-
1 2014-01-21 16:08:25 -0800 passed desc3 ./spec/m1k1_spec.rb
|
7
|
-
1 2014-01-21 16:08:25 -0800 failed desc2 ./spec/m1k1_spec.rb msg10 ec10
|
8
|
-
1 2014-01-21 16:08:25 -0800 failed desc2 ./spec/m1k1_spec.rb msg10 ec10
|
9
|
-
1 2014-01-21 16:08:25 -0800 passed desc2 ./spec/m1k1_spec.rb
|
1
|
+
1 2014-01-21 16:08:25 -0800 failed desc1 ./spec/m1k1_spec.rb msg10 ec10 16.0
|
2
|
+
1 2014-01-21 16:08:25 -0800 passed desc1 ./spec/m1k1_spec.rb 8.0
|
3
|
+
1 2014-01-21 16:08:25 -0800 failed desc3 ./spec/m1k1_spec.rb msg10 ec10 16.0
|
4
|
+
1 2014-01-21 16:08:25 -0800 failed desc3 ./spec/m1k1_spec.rb msg10 ec10 16.0
|
5
|
+
1 2014-01-21 16:08:25 -0800 failed desc3 ./spec/m1k1_spec.rb msg10 ec10 16.0
|
6
|
+
1 2014-01-21 16:08:25 -0800 passed desc3 ./spec/m1k1_spec.rb 8.0
|
7
|
+
1 2014-01-21 16:08:25 -0800 failed desc2 ./spec/m1k1_spec.rb msg10 ec10 16.0
|
8
|
+
1 2014-01-21 16:08:25 -0800 failed desc2 ./spec/m1k1_spec.rb msg10 ec10 16.0
|
9
|
+
1 2014-01-21 16:08:25 -0800 passed desc2 ./spec/m1k1_spec.rb 8.0
|
@@ -2,18 +2,23 @@ require "spec_helper"
|
|
2
2
|
require 'tempfile'
|
3
3
|
|
4
4
|
describe RspecLogFormatter::Analysis::Analyzer do
|
5
|
-
it "sorts the parsed results by failure
|
5
|
+
it "sorts the parsed results by failure fraction" do
|
6
6
|
filepath = File.expand_path("../../../../fixtures/varying_flakiness.history", __FILE__)
|
7
|
-
|
8
|
-
|
7
|
+
history_provider = RspecLogFormatter::HistoryManager.new(filepath)
|
8
|
+
described_class.new(history_provider).analyze.map{|r| r[:fraction] }.should == [
|
9
|
+
0.75, 2.0/3.0, 0.50
|
9
10
|
]
|
11
|
+
described_class.new(history_provider, max_reruns: 0).analyze.map{|r| r[:cost] }.should == [14.0, 13.333333333333332, 12.0]
|
12
|
+
described_class.new(history_provider, max_reruns: 1).analyze.map{|r| r[:cost] }.should == [15.5, 15.11111111111111, 14.0]
|
13
|
+
described_class.new(history_provider, max_reruns: 2).analyze.map{|r| r[:cost] }.should == [18.875, 18.666666666666668, 17.0]
|
14
|
+
described_class.new(history_provider, max_reruns: 3).analyze.map{|r| r[:cost] }.should == [23.09375, 22.617283950617285, 19.5]
|
10
15
|
end
|
11
16
|
|
12
17
|
it "works" do
|
13
18
|
filepath = File.expand_path("../../../../fixtures/fail_history_analyzer.rspec.history", __FILE__)
|
14
|
-
described_class.new.
|
19
|
+
described_class.new(RspecLogFormatter::HistoryManager.new(filepath)).analyze.first.should == {
|
15
20
|
description: "description0",
|
16
|
-
|
21
|
+
fraction: 0.8571428571428571,
|
17
22
|
failure_messages: [
|
18
23
|
"ec10\n msg10",
|
19
24
|
"ec20\n msg20",
|
@@ -25,31 +30,30 @@ describe RspecLogFormatter::Analysis::Analyzer do
|
|
25
30
|
}
|
26
31
|
end
|
27
32
|
|
33
|
+
it "works for a test that only passes" do
|
34
|
+
result = double(description: 'desc', build_number: 1, failure?: false, success?: true, time: Time.at(0))
|
35
|
+
history_provider = double(builds: [1], results: [result])
|
36
|
+
described_class.new(history_provider, max_reruns: 3).analyze.should be_empty
|
37
|
+
end
|
28
38
|
|
29
|
-
it "
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
described_class.new.truncate(temp.path, keep_builds: 3)
|
34
|
-
File.open(temp.path, 'r').read.should == <<HEREDOC
|
35
|
-
5 2014-01-21 16:08:25 -0800 passed desc ./spec/m1k1_spec.rb
|
36
|
-
6 2014-01-21 16:08:25 -0800 passed desc ./spec/m1k1_spec.rb
|
37
|
-
7 2014-01-21 16:08:25 -0800 passed desc ./spec/m1k1_spec.rb
|
38
|
-
HEREDOC
|
39
|
+
it "works for a test that only fails" do
|
40
|
+
result = double(description: 'desc', build_number: 1, failure?: true, success?: false, time: Time.at(0))
|
41
|
+
history_provider = double(builds: [1], results: [result])
|
42
|
+
described_class.new(history_provider, max_reruns: 3).analyze.should be_empty
|
39
43
|
end
|
40
44
|
|
41
45
|
it "can analyze only a window of builds" do
|
42
46
|
filepath = File.expand_path("../../../../fixtures/test_was_flaky_then_fixed.history", __FILE__)
|
43
|
-
|
47
|
+
history_provider = RspecLogFormatter::HistoryManager.new(filepath)
|
48
|
+
described_class.new(history_provider, builds_to_analyze: 7).analyze.first.should == {
|
44
49
|
description: "desc",
|
45
|
-
|
50
|
+
fraction: 0.30,
|
46
51
|
failure_messages: ["ec10\n msg10", "ec10\n msg10", "ec10\n msg10"]
|
47
52
|
}
|
48
|
-
|
53
|
+
described_class.new(history_provider, builds_to_analyze: 5).analyze.first.should == {
|
49
54
|
description: "desc",
|
50
|
-
|
51
|
-
failure_messages: []
|
55
|
+
fraction: 0.16666666666666666,
|
56
|
+
failure_messages: ["ec10\n msg10"],
|
52
57
|
}
|
53
|
-
|
54
58
|
end
|
55
59
|
end
|
@@ -4,19 +4,21 @@ describe RspecLogFormatter::Analysis::PrettyPrinter do
|
|
4
4
|
it "pretty prints the results of an analysis" do
|
5
5
|
results = [{
|
6
6
|
description: "I fail a lot.",
|
7
|
-
|
7
|
+
fraction: 0.99,
|
8
|
+
cost: 7.7,
|
8
9
|
failure_messages: ["I'm a total failure."]
|
9
10
|
},{
|
10
11
|
description: "I fail often.",
|
11
|
-
|
12
|
+
fraction: 0.70,
|
13
|
+
cost: 3.3,
|
12
14
|
failure_messages: ["I am a failure message.", "I'm another failure message."]
|
13
15
|
}]
|
14
16
|
|
15
17
|
described_class.new(results).to_s.should == <<-TEXT.strip
|
16
18
|
Top 2 flakiest examples
|
17
|
-
1) I fail a lot. -- 99%
|
19
|
+
1) I fail a lot. -- 99% (cost: 7s)
|
18
20
|
* I'm a total failure.
|
19
|
-
2) I fail often. -- 70%
|
21
|
+
2) I fail often. -- 70% (cost: 3s)
|
20
22
|
* I am a failure message.
|
21
23
|
* I'm another failure message.
|
22
24
|
TEXT
|
@@ -25,7 +27,7 @@ Top 2 flakiest examples
|
|
25
27
|
context "when there are more than 10 results" do
|
26
28
|
it "only prints the top 10" do
|
27
29
|
results = (1..11).map do |i|
|
28
|
-
{description: "hi#{i}",
|
30
|
+
{description: "hi#{i}", fraction: 0.01, failure_messages: ["bye#{i}"]}
|
29
31
|
end
|
30
32
|
|
31
33
|
described_class.new(results).to_s.should == <<-TEXT.strip
|
@@ -56,9 +58,9 @@ Top 10 flakiest examples
|
|
56
58
|
|
57
59
|
it "only prints flaky specs" do
|
58
60
|
results = (1..7).map do |i|
|
59
|
-
{description: "hi#{i}",
|
61
|
+
{description: "hi#{i}", fraction: 0.01, failure_messages: ["bye#{i}"]}
|
60
62
|
end + (8..10).map do |i|
|
61
|
-
{description: "hi#{i}",
|
63
|
+
{description: "hi#{i}", fraction: 0.0, failure_messages: ["bye#{i}"]}
|
62
64
|
|
63
65
|
end
|
64
66
|
|
@@ -83,7 +85,7 @@ Top 10 flakiest examples
|
|
83
85
|
|
84
86
|
it "only prints flaky specs" do
|
85
87
|
results = (1..11).map do |i|
|
86
|
-
{description: "hi#{i}",
|
88
|
+
{description: "hi#{i}", fraction: 0.0, failure_messages: ["bye#{i}"]}
|
87
89
|
end
|
88
90
|
|
89
91
|
described_class.new(results).to_s.should == "None of the specs were flaky"
|
@@ -12,19 +12,19 @@ describe RspecLogFormatter::Formatter do
|
|
12
12
|
out.rewind
|
13
13
|
out.read.should == <<HEREDOC
|
14
14
|
Top 3 flakiest examples
|
15
|
-
1) desc3 -- 75
|
15
|
+
1) desc3 -- 75%
|
16
16
|
* ec10
|
17
17
|
msg10
|
18
18
|
* ec10
|
19
19
|
msg10
|
20
20
|
* ec10
|
21
21
|
msg10
|
22
|
-
2) desc2 -- 66
|
22
|
+
2) desc2 -- 66%
|
23
23
|
* ec10
|
24
24
|
msg10
|
25
25
|
* ec10
|
26
26
|
msg10
|
27
|
-
3) desc1 -- 50
|
27
|
+
3) desc1 -- 50%
|
28
28
|
* ec10
|
29
29
|
msg10
|
30
30
|
HEREDOC
|
@@ -1,47 +1,45 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RspecLogFormatter::Formatter do
|
4
|
-
|
5
|
-
def make_example(opts={})
|
6
|
-
@count ||= 0; @count += 1
|
4
|
+
def make_example(count, opts={})
|
7
5
|
double({
|
8
|
-
full_description: "description_#{
|
9
|
-
file_path: "path_#{
|
6
|
+
full_description: "description_#{count}",
|
7
|
+
file_path: "path_#{count}"
|
10
8
|
}.merge(opts))
|
11
9
|
end
|
12
10
|
|
13
|
-
def formatter_for_build(build)
|
14
|
-
RspecLogFormatter::Formatter.new(double(now: Time.at(0)),
|
11
|
+
def formatter_for_build(build, opts={})
|
12
|
+
RspecLogFormatter::Formatter.new({clock: double(now: Time.at(0)), build_number: build}.merge(opts))
|
15
13
|
end
|
16
14
|
|
17
15
|
it "can truncate the log file" do
|
18
|
-
the_example = make_example
|
19
|
-
formatter = formatter_for_build(
|
16
|
+
the_example = make_example(1, limit_history: 2)
|
17
|
+
formatter = formatter_for_build(nil)
|
20
18
|
formatter.example_started(the_example)
|
21
19
|
formatter.example_passed(the_example)
|
22
20
|
formatter.dump_summary(1,2,3,4)
|
23
21
|
|
24
|
-
formatter = formatter_for_build(2)
|
22
|
+
formatter = formatter_for_build(2, limit_history: 2)
|
25
23
|
formatter.example_started(the_example)
|
26
24
|
formatter.example_passed(the_example)
|
27
25
|
formatter.dump_summary(1,2,3,4)
|
28
26
|
|
29
|
-
File.open(RspecLogFormatter::
|
30
|
-
|
27
|
+
File.open(RspecLogFormatter::FILENAME, 'r').read.should == <<HEREDOC
|
28
|
+
1969-12-31 16:00:00 -0800 passed description_1 path_1 0.0
|
31
29
|
2 1969-12-31 16:00:00 -0800 passed description_1 path_1 0.0
|
32
30
|
HEREDOC
|
33
31
|
|
34
|
-
formatter = formatter_for_build(3)
|
32
|
+
formatter = formatter_for_build(3, limit_history: 2)
|
35
33
|
formatter.example_started(the_example)
|
36
34
|
formatter.example_passed(the_example)
|
37
35
|
formatter.dump_summary(1,2,3,4)
|
38
36
|
|
39
|
-
formatter = formatter_for_build(4)
|
37
|
+
formatter = formatter_for_build(4, limit_history: 2)
|
40
38
|
formatter.example_started(the_example)
|
41
39
|
formatter.example_passed(the_example)
|
42
40
|
formatter.dump_summary(1,2,3,4)
|
43
41
|
|
44
|
-
File.open(RspecLogFormatter::
|
42
|
+
File.open(RspecLogFormatter::FILENAME, 'r').read.should == <<HEREDOC
|
45
43
|
3 1969-12-31 16:00:00 -0800 passed description_1 path_1 0.0
|
46
44
|
4 1969-12-31 16:00:00 -0800 passed description_1 path_1 0.0
|
47
45
|
HEREDOC
|
@@ -55,11 +53,11 @@ HEREDOC
|
|
55
53
|
end
|
56
54
|
|
57
55
|
it "works" do
|
58
|
-
failed_example = make_example(exception: Exception.new("Error"))
|
59
|
-
passed_example = make_example(exception: nil)
|
56
|
+
failed_example = make_example(1, exception: Exception.new("Error"))
|
57
|
+
passed_example = make_example(2, exception: nil)
|
60
58
|
time = Time.parse("2014-02-06 16:01:10")
|
61
59
|
clock = FakeClock.new(time)
|
62
|
-
formatter = RspecLogFormatter::Formatter.new(clock)
|
60
|
+
formatter = RspecLogFormatter::Formatter.new(clock: clock)
|
63
61
|
formatter.example_started(failed_example)
|
64
62
|
clock.now = time + 5
|
65
63
|
formatter.example_failed(failed_example)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RspecLogFormatter::HistoryManager do
|
4
|
+
it "can truncate the log file" do
|
5
|
+
filepath = File.expand_path("../../../fixtures/test_was_flaky_then_fixed.history", __FILE__)
|
6
|
+
temp = Tempfile.new('fixture')
|
7
|
+
FileUtils.copy(filepath, temp.path)
|
8
|
+
RspecLogFormatter::HistoryManager.new(temp.path).truncate(3)
|
9
|
+
File.open(temp.path, 'r').read.should == <<HEREDOC
|
10
|
+
5 2014-01-21 16:08:25 -0800 passed desc ./spec/m1k1_spec.rb
|
11
|
+
6 2014-01-21 16:08:25 -0800 passed desc ./spec/m1k1_spec.rb
|
12
|
+
7 2014-01-21 16:08:25 -0800 passed desc ./spec/m1k1_spec.rb
|
13
|
+
HEREDOC
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RspecLogFormatter::PerformanceAnalyzer do
|
4
|
+
it "produces a csv of run durations" do
|
5
|
+
filepath = File.expand_path("../../../fixtures/test_slowing_down_over_time.history", __FILE__)
|
6
|
+
|
7
|
+
results = RspecLogFormatter::PerformanceAnalyzer.new(filepath).analyze("desc1")
|
8
|
+
results.should == {
|
9
|
+
"2014-01-21 16:00:00 -0800" => 1.0,
|
10
|
+
"2014-01-22 16:00:00 -0800" => 2.0,
|
11
|
+
"2014-01-24 16:00:00 -0800" => 3.0,
|
12
|
+
"2014-01-29 16:00:00 -0800" => 4.0,
|
13
|
+
"2014-01-30 16:00:00 -0800" => 5.0,
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
data/specs.sh
ADDED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec_log_formatter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Serguei Filimonov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: chartkick
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -28,48 +42,49 @@ dependencies:
|
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- -
|
45
|
+
- - '>='
|
32
46
|
- !ruby/object:Gem::Version
|
33
47
|
version: '0'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- -
|
52
|
+
- - '>='
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rspec
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- -
|
59
|
+
- - '>='
|
46
60
|
- !ruby/object:Gem::Version
|
47
61
|
version: '0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- -
|
66
|
+
- - '>='
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: pry
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- -
|
73
|
+
- - '>='
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - '>='
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
description: Logs the outcomes of the tests to a file
|
70
84
|
email:
|
71
85
|
- sfilimonov@pivotallabs.com
|
72
|
-
executables:
|
86
|
+
executables:
|
87
|
+
- rspec_log_formatter
|
73
88
|
extensions: []
|
74
89
|
extra_rdoc_files: []
|
75
90
|
files:
|
@@ -80,6 +95,63 @@ files:
|
|
80
95
|
- LICENSE.txt
|
81
96
|
- README.md
|
82
97
|
- Rakefile
|
98
|
+
- bin/rspec_log_formatter
|
99
|
+
- dummy/.gitignore
|
100
|
+
- dummy/.rspec
|
101
|
+
- dummy/Gemfile
|
102
|
+
- dummy/README.rdoc
|
103
|
+
- dummy/Rakefile
|
104
|
+
- dummy/app/assets/images/.keep
|
105
|
+
- dummy/app/assets/javascripts/application.js
|
106
|
+
- dummy/app/assets/stylesheets/application.css
|
107
|
+
- dummy/app/controllers/application_controller.rb
|
108
|
+
- dummy/app/controllers/concerns/.keep
|
109
|
+
- dummy/app/helpers/application_helper.rb
|
110
|
+
- dummy/app/mailers/.keep
|
111
|
+
- dummy/app/models/.keep
|
112
|
+
- dummy/app/models/concerns/.keep
|
113
|
+
- dummy/app/views/layouts/application.html.erb
|
114
|
+
- dummy/bin/bundle
|
115
|
+
- dummy/bin/rails
|
116
|
+
- dummy/bin/rake
|
117
|
+
- dummy/config.ru
|
118
|
+
- dummy/config/application.rb
|
119
|
+
- dummy/config/boot.rb
|
120
|
+
- dummy/config/database.yml
|
121
|
+
- dummy/config/environment.rb
|
122
|
+
- dummy/config/environments/development.rb
|
123
|
+
- dummy/config/environments/production.rb
|
124
|
+
- dummy/config/environments/test.rb
|
125
|
+
- dummy/config/initializers/backtrace_silencers.rb
|
126
|
+
- dummy/config/initializers/filter_parameter_logging.rb
|
127
|
+
- dummy/config/initializers/inflections.rb
|
128
|
+
- dummy/config/initializers/mime_types.rb
|
129
|
+
- dummy/config/initializers/secret_token.rb
|
130
|
+
- dummy/config/initializers/session_store.rb
|
131
|
+
- dummy/config/initializers/wrap_parameters.rb
|
132
|
+
- dummy/config/locales/en.yml
|
133
|
+
- dummy/config/routes.rb
|
134
|
+
- dummy/db/schema.rb
|
135
|
+
- dummy/db/seeds.rb
|
136
|
+
- dummy/lib/assets/.keep
|
137
|
+
- dummy/lib/tasks/.keep
|
138
|
+
- dummy/log/.keep
|
139
|
+
- dummy/public/404.html
|
140
|
+
- dummy/public/422.html
|
141
|
+
- dummy/public/500.html
|
142
|
+
- dummy/public/favicon.ico
|
143
|
+
- dummy/public/robots.txt
|
144
|
+
- dummy/spec/dummy_spec.rb
|
145
|
+
- dummy/spec/spec_helper.rb
|
146
|
+
- dummy/test/controllers/.keep
|
147
|
+
- dummy/test/fixtures/.keep
|
148
|
+
- dummy/test/helpers/.keep
|
149
|
+
- dummy/test/integration/.keep
|
150
|
+
- dummy/test/mailers/.keep
|
151
|
+
- dummy/test/models/.keep
|
152
|
+
- dummy/test/test_helper.rb
|
153
|
+
- dummy/vendor/assets/javascripts/.keep
|
154
|
+
- dummy/vendor/assets/stylesheets/.keep
|
83
155
|
- lib/rspec_log_formatter.rb
|
84
156
|
- lib/rspec_log_formatter/analysis/analyzer.rb
|
85
157
|
- lib/rspec_log_formatter/analysis/pretty_printer.rb
|
@@ -87,16 +159,24 @@ files:
|
|
87
159
|
- lib/rspec_log_formatter/analysis/score.rb
|
88
160
|
- lib/rspec_log_formatter/analyzer_formatter.rb
|
89
161
|
- lib/rspec_log_formatter/formatter.rb
|
162
|
+
- lib/rspec_log_formatter/history_manager.rb
|
163
|
+
- lib/rspec_log_formatter/javascripts/chartkick.js
|
164
|
+
- lib/rspec_log_formatter/performance_analyzer.rb
|
165
|
+
- lib/rspec_log_formatter/templates/charts.html.erb
|
90
166
|
- lib/rspec_log_formatter/version.rb
|
91
167
|
- rspec_log_formatter.gemspec
|
92
168
|
- spec/fixtures/fail_history_analyzer.rspec.history
|
169
|
+
- spec/fixtures/test_slowing_down_over_time.history
|
93
170
|
- spec/fixtures/test_was_flaky_then_fixed.history
|
94
171
|
- spec/fixtures/varying_flakiness.history
|
95
172
|
- spec/lib/rspec_log_analyzer/analysis/analyzer_spec.rb
|
96
173
|
- spec/lib/rspec_log_analyzer/analysis/pretty_printer_spec.rb
|
97
174
|
- spec/lib/rspec_log_analyzer/analyzer_formatter_spec.rb
|
98
175
|
- spec/lib/rspec_log_analyzer/formatter_spec.rb
|
176
|
+
- spec/lib/rspec_log_analyzer/history_manager_spec.rb
|
177
|
+
- spec/lib/rspec_log_analyzer/performance_analyzer_spec.rb
|
99
178
|
- spec/spec_helper.rb
|
179
|
+
- specs.sh
|
100
180
|
homepage: ''
|
101
181
|
licenses:
|
102
182
|
- MIT
|
@@ -107,26 +187,29 @@ require_paths:
|
|
107
187
|
- lib
|
108
188
|
required_ruby_version: !ruby/object:Gem::Requirement
|
109
189
|
requirements:
|
110
|
-
- -
|
190
|
+
- - '>='
|
111
191
|
- !ruby/object:Gem::Version
|
112
192
|
version: '0'
|
113
193
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
194
|
requirements:
|
115
|
-
- -
|
195
|
+
- - '>='
|
116
196
|
- !ruby/object:Gem::Version
|
117
197
|
version: '0'
|
118
198
|
requirements: []
|
119
199
|
rubyforge_project:
|
120
|
-
rubygems_version: 2.2.
|
200
|
+
rubygems_version: 2.2.1
|
121
201
|
signing_key:
|
122
202
|
specification_version: 4
|
123
203
|
summary: Logs the outcomes of the tests to a file
|
124
204
|
test_files:
|
125
205
|
- spec/fixtures/fail_history_analyzer.rspec.history
|
206
|
+
- spec/fixtures/test_slowing_down_over_time.history
|
126
207
|
- spec/fixtures/test_was_flaky_then_fixed.history
|
127
208
|
- spec/fixtures/varying_flakiness.history
|
128
209
|
- spec/lib/rspec_log_analyzer/analysis/analyzer_spec.rb
|
129
210
|
- spec/lib/rspec_log_analyzer/analysis/pretty_printer_spec.rb
|
130
211
|
- spec/lib/rspec_log_analyzer/analyzer_formatter_spec.rb
|
131
212
|
- spec/lib/rspec_log_analyzer/formatter_spec.rb
|
213
|
+
- spec/lib/rspec_log_analyzer/history_manager_spec.rb
|
214
|
+
- spec/lib/rspec_log_analyzer/performance_analyzer_spec.rb
|
132
215
|
- spec/spec_helper.rb
|