rspec_log_formatter 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|