cucumber_statistics 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.document +5 -0
- data/.gitignore +19 -0
- data/.rvmrc +3 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +46 -0
- data/README.md +44 -0
- data/Rakefile +7 -0
- data/cucumber_statistics.gemspec +38 -0
- data/lib/cucumber_statistics.rb +6 -0
- data/lib/cucumber_statistics/autoload.rb +3 -0
- data/lib/cucumber_statistics/configuration.rb +57 -0
- data/lib/cucumber_statistics/formatter.rb +68 -0
- data/lib/cucumber_statistics/overall_statistics.rb +29 -0
- data/lib/cucumber_statistics/renderer.rb +25 -0
- data/lib/cucumber_statistics/renderer_helper.rb +73 -0
- data/lib/cucumber_statistics/step_statistics.rb +91 -0
- data/lib/cucumber_statistics/unused_steps.rb +18 -0
- data/lib/cucumber_statistics/version.rb +3 -0
- data/lib/cucumber_statistics/view/step_statistics.html +162 -0
- data/lib/cucumber_statistics/view/step_statistics.html.haml +145 -0
- data/notes.txt +9 -0
- data/spec/cucumber_statistics/configuration_spec.rb +20 -0
- data/spec/cucumber_statistics/renderer_helper_spec.rb +27 -0
- data/spec/cucumber_statistics/renderer_spec.rb +50 -0
- data/spec/cucumber_statistics/step_statistics_spec.rb +199 -0
- data/spec/cucumber_statistics/unused_steps_spec.rb +39 -0
- data/spec/spec_helper.rb +11 -0
- metadata +178 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
module CucumberStatistics
|
2
|
+
class StepStatistics
|
3
|
+
def initialize
|
4
|
+
@all = Hash.new
|
5
|
+
end
|
6
|
+
|
7
|
+
def record step_name, duration, file_colon_line
|
8
|
+
|
9
|
+
# "/Users/kross/alienfast/acme/features/account management/admin_cancel_account.feature:8"
|
10
|
+
step_results = @all[step_name]
|
11
|
+
step_results ||= Hash.new
|
12
|
+
step_results[:instances] ||= []
|
13
|
+
step_results[:instances] << duration
|
14
|
+
begin
|
15
|
+
file = file_colon_line[file_colon_line.index('features')..-1]
|
16
|
+
step_results[:file] = file
|
17
|
+
rescue Exception => e
|
18
|
+
step_results[:file] = e.message
|
19
|
+
end
|
20
|
+
|
21
|
+
@all[step_name] ||= step_results
|
22
|
+
end
|
23
|
+
|
24
|
+
def calculate
|
25
|
+
@all.each do |step_name, step_results|
|
26
|
+
step_results[:total] = step_results[:instances].inject{|sum,x| sum + x }
|
27
|
+
step_results[:count] = step_results[:instances].count
|
28
|
+
step_results[:average] = step_results[:total].to_f / step_results[:count].to_f
|
29
|
+
step_results[:fastest] = step_results[:instances].sort.first
|
30
|
+
step_results[:slowest] = step_results[:instances].sort.last
|
31
|
+
step_results[:variation] = step_results[:slowest] - step_results[:fastest]
|
32
|
+
step_results[:variance] = self.sample_variance step_results[:instances]
|
33
|
+
step_results[:standard_deviation] = self.standard_deviation step_results[:variance]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def all
|
38
|
+
@all
|
39
|
+
end
|
40
|
+
|
41
|
+
def sort_by_property property
|
42
|
+
result = @all.sort {|a,b| a.last[property.to_sym] <=> b.last[property.to_sym]}
|
43
|
+
result
|
44
|
+
end
|
45
|
+
|
46
|
+
def highest_average
|
47
|
+
sort_by_property(:average).reverse.first
|
48
|
+
end
|
49
|
+
|
50
|
+
def highest_total
|
51
|
+
sort_by_property(:total).reverse.first
|
52
|
+
end
|
53
|
+
|
54
|
+
def highest_variation
|
55
|
+
sort_by_property(:variation).reverse.first
|
56
|
+
end
|
57
|
+
|
58
|
+
def average_times_plot_data
|
59
|
+
@all.map {|step_name, data| data[:average].to_f}.sort.reverse
|
60
|
+
end
|
61
|
+
|
62
|
+
def total_times_plot_data
|
63
|
+
sort_by_property(:average).reverse.map {|step_name, data| data[:total].to_f}
|
64
|
+
end
|
65
|
+
|
66
|
+
def step_part_of_total
|
67
|
+
@all.map {|step_name, data| data[:total]}.sort.reverse
|
68
|
+
end
|
69
|
+
|
70
|
+
def total_elapsed_time
|
71
|
+
@all.map {|step_name, data| data[:total]}.inject{|sum,x| sum + x }
|
72
|
+
end
|
73
|
+
|
74
|
+
def sample_variance data
|
75
|
+
count = data.count
|
76
|
+
average = data.inject{|sum,x| sum + x } / count.to_f
|
77
|
+
|
78
|
+
return nil if count <= 1
|
79
|
+
|
80
|
+
sum = data.inject(0){|acc,i|acc.to_f + (i.to_f - average)**2.0}
|
81
|
+
|
82
|
+
return 1 / (count.to_f - 1.0) * sum.to_f
|
83
|
+
end
|
84
|
+
|
85
|
+
def standard_deviation sample_variance
|
86
|
+
return nil if sample_variance.nil?
|
87
|
+
|
88
|
+
return Math.sqrt(sample_variance)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module CucumberStatistics
|
2
|
+
class UnusedSteps
|
3
|
+
def initialize
|
4
|
+
@all = Hash.new
|
5
|
+
end
|
6
|
+
|
7
|
+
def record step_name, where
|
8
|
+
result = @all[step_name]
|
9
|
+
result = where
|
10
|
+
|
11
|
+
@all[step_name] ||= result
|
12
|
+
end
|
13
|
+
|
14
|
+
def all
|
15
|
+
@all
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
7
|
+
<meta name="description" content="Cucumber Step Statistics">
|
8
|
+
<meta name="author" content="AlienFast">
|
9
|
+
|
10
|
+
<title>Cucumber Step Statistics</title>
|
11
|
+
|
12
|
+
<!-- Bootstrap core CSS -->
|
13
|
+
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
|
14
|
+
|
15
|
+
<!-- Custom styles for this layout -->
|
16
|
+
<style type="text/css">
|
17
|
+
body {
|
18
|
+
min-height: 2000px;
|
19
|
+
padding-top: 70px;
|
20
|
+
}
|
21
|
+
|
22
|
+
td {
|
23
|
+
white-space: nowrap;
|
24
|
+
/*max-width: 100px;*/
|
25
|
+
}
|
26
|
+
tr td:first-child {
|
27
|
+
overflow: hidden;
|
28
|
+
text-overflow: ellipsis;
|
29
|
+
max-width: 300px;
|
30
|
+
}
|
31
|
+
</style>
|
32
|
+
|
33
|
+
<link href="https://raw.githack.com/drvic10k/bootstrap-sortable/master/Contents/bootstrap-sortable.css" rel="stylesheet">
|
34
|
+
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
35
|
+
<!--[if lt IE 9]>
|
36
|
+
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
37
|
+
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
38
|
+
<![endif]-->
|
39
|
+
</head>
|
40
|
+
|
41
|
+
<body>
|
42
|
+
|
43
|
+
<!-- Fixed navbar -->
|
44
|
+
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
|
45
|
+
<div class="container">
|
46
|
+
<div class="navbar-header">
|
47
|
+
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
48
|
+
<span class="sr-only">Toggle navigation</span>
|
49
|
+
<span class="icon-bar"></span>
|
50
|
+
<span class="icon-bar"></span>
|
51
|
+
<span class="icon-bar"></span>
|
52
|
+
</button>
|
53
|
+
<a class="navbar-brand" href="#">cucumber_statistics</a>
|
54
|
+
</div>
|
55
|
+
<div class="navbar-collapse collapse">
|
56
|
+
<ul class="nav navbar-nav">
|
57
|
+
<li class="active"><a href="#">Home</a></li>
|
58
|
+
<li><a href="#about">About</a></li>
|
59
|
+
<li><a href="#contact">Contact</a></li>
|
60
|
+
<li class="dropdown">
|
61
|
+
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
|
62
|
+
<ul class="dropdown-menu">
|
63
|
+
<li><a href="#">Action</a></li>
|
64
|
+
<li><a href="#">Another action</a></li>
|
65
|
+
<li><a href="#">Something else here</a></li>
|
66
|
+
<li class="divider"></li>
|
67
|
+
<li class="dropdown-header">Nav header</li>
|
68
|
+
<li><a href="#">Separated link</a></li>
|
69
|
+
<li><a href="#">One more separated link</a></li>
|
70
|
+
</ul>
|
71
|
+
</li>
|
72
|
+
</ul>
|
73
|
+
<ul class="nav navbar-nav navbar-right">
|
74
|
+
<li><a href="../navbar/">Default</a></li>
|
75
|
+
<li><a href="../navbar-static-top/">Static top</a></li>
|
76
|
+
<li class="active"><a href="./">Fixed top</a></li>
|
77
|
+
</ul>
|
78
|
+
</div>
|
79
|
+
<!--/.nav-collapse -->
|
80
|
+
</div>
|
81
|
+
</div>
|
82
|
+
|
83
|
+
<div class="container">
|
84
|
+
|
85
|
+
<!-- Main component for a primary marketing message or call to action -->
|
86
|
+
<div class="jumbotron">
|
87
|
+
<h1>Cucumber step statistics</h1>
|
88
|
+
|
89
|
+
<p>... allows you to easily diagnose long running steps.</p>
|
90
|
+
</div>
|
91
|
+
|
92
|
+
<!--
|
93
|
+
step
|
94
|
+
fastest
|
95
|
+
slowest
|
96
|
+
variation
|
97
|
+
variance
|
98
|
+
standard_deviation
|
99
|
+
count
|
100
|
+
average
|
101
|
+
total
|
102
|
+
-->
|
103
|
+
<table class="table table-bordered table-striped sortable">
|
104
|
+
<thead>
|
105
|
+
<tr>
|
106
|
+
<th>Step</th>
|
107
|
+
<th>Fastest</th>
|
108
|
+
<th>Slowest</th>
|
109
|
+
<th>Variation</th>
|
110
|
+
<th>Variance</th>
|
111
|
+
<th>Std Deviation</th>
|
112
|
+
<th>Count</th>
|
113
|
+
<th>Average</th>
|
114
|
+
<th data-defaultsort="desc">Total</th>
|
115
|
+
</tr>
|
116
|
+
|
117
|
+
</thead>
|
118
|
+
<tbody>
|
119
|
+
<tr>
|
120
|
+
<td>/^I am logged in as ((?:(?:)|(?:(?:a|an|another|the|that) )?(?:(?:(?:(?:first|last|(?:\d+(?:st|nd|rd|th))) )?(?:paper[_ ]trail[_ ]version|acts[_ ]as[_ ]taggable[_ ]on[_ ]tag|acts[_ ]as[_ ]taggable[_ ]on[_ ]tagging|user|active[_ ]record[_ ]schema[_ ]migration|plan|feature|reference[_ ]type|allergy|relationship[_ ]type|allergy[_ ]type|medical[_ ]condition[_ ]type|account|rspec[_ ]account|address|sacred[_ ]heart[_ ]address|calendar[_ ]item|catalog|child|jack|jennifer[_ ]dillon|coupon|employment|enrollment|medical[_ ]condition|membership|organization|sacredheart|participation|person|sacredheart[_ ]person|bob|perry|carla|jordan|alienfast|alienfast[_ ]person|blake|kevin|alicia|product|relationship|subscription|rspec[_ ]subscription|tenant|transaction|admin|admin[_ ]not[_ ]owner|staff|consumer|consumer[_ ]dad|support|bmcdaniel|kross|awaters|verification))|(?:(?:paper[_ ]trail[_ ]version|acts[_ ]as[_ ]taggable[_ ]on[_ ]tag|acts[_ ]as[_ ]taggable[_ ]on[_ ]tagging|user|active[_ ]record[_ ]schema[_ ]migration|plan|feature|reference[_ ]type|allergy|relationship[_ ]type|allergy[_ ]type|medical[_ ]condition[_ ]type|account|rspec[_ ]account|address|sacred[_ ]heart[_ ]address|calendar[_ ]item|catalog|child|jack|jennifer[_ ]dillon|coupon|employment|enrollment|medical[_ ]condition|membership|organization|sacredheart|participation|person|sacredheart[_ ]person|bob|perry|carla|jordan|alienfast|alienfast[_ ]person|blake|kevin|alicia|product|relationship|subscription|rspec[_ ]subscription|tenant|transaction|admin|admin[_ ]not[_ ]owner|staff|consumer|consumer[_ ]dad|support|bmcdaniel|kross|awaters|verification)(?::? "(?:\\"|[^\"]|\.)*"))))) at (\w+)$/</td>
|
121
|
+
<td>7.051</td>
|
122
|
+
<td>4.099</td>
|
123
|
+
<td>4.099</td>
|
124
|
+
<td>0.320</td>
|
125
|
+
<td>0.566</td>
|
126
|
+
<td>76</td>
|
127
|
+
<td>0.490</td>
|
128
|
+
<td>37.288</td>
|
129
|
+
</tr>
|
130
|
+
<tr>
|
131
|
+
<td>/^Blah I am logged in as ((?:(?:)|(?:(?:a|an|another|the|that) )?(?:(?:(?:(?:first|last|(?:\d+(?:st|nd|rd|th))) )?(?:paper[_ ]trail[_ ]version|acts[_ ]as[_ ]taggable[_ ]on[_ ]tag|acts[_ ]as[_ ]taggable[_ ]on[_ ]tagging|user|active[_ ]record[_ ]schema[_ ]migration|plan|feature|reference[_ ]type|allergy|relationship[_ ]type|allergy[_ ]type|medical[_ ]condition[_ ]type|account|rspec[_ ]account|address|sacred[_ ]heart[_ ]address|calendar[_ ]item|catalog|child|jack|jennifer[_ ]dillon|coupon|employment|enrollment|medical[_ ]condition|membership|organization|sacredheart|participation|person|sacredheart[_ ]person|bob|perry|carla|jordan|alienfast|alienfast[_ ]person|blake|kevin|alicia|product|relationship|subscription|rspec[_ ]subscription|tenant|transaction|admin|admin[_ ]not[_ ]owner|staff|consumer|consumer[_ ]dad|support|bmcdaniel|kross|awaters|verification))|(?:(?:paper[_ ]trail[_ ]version|acts[_ ]as[_ ]taggable[_ ]on[_ ]tag|acts[_ ]as[_ ]taggable[_ ]on[_ ]tagging|user|active[_ ]record[_ ]schema[_ ]migration|plan|feature|reference[_ ]type|allergy|relationship[_ ]type|allergy[_ ]type|medical[_ ]condition[_ ]type|account|rspec[_ ]account|address|sacred[_ ]heart[_ ]address|calendar[_ ]item|catalog|child|jack|jennifer[_ ]dillon|coupon|employment|enrollment|medical[_ ]condition|membership|organization|sacredheart|participation|person|sacredheart[_ ]person|bob|perry|carla|jordan|alienfast|alienfast[_ ]person|blake|kevin|alicia|product|relationship|subscription|rspec[_ ]subscription|tenant|transaction|admin|admin[_ ]not[_ ]owner|staff|consumer|consumer[_ ]dad|support|bmcdaniel|kross|awaters|verification)(?::? "(?:\\"|[^\"]|\.)*"))))) at (\w+)$/</td>
|
132
|
+
<td>4.051</td>
|
133
|
+
<td>8.099</td>
|
134
|
+
<td>5.099</td>
|
135
|
+
<td>0.420</td>
|
136
|
+
<td>0.966</td>
|
137
|
+
<td>6</td>
|
138
|
+
<td>1.490</td>
|
139
|
+
<td>31.288</td>
|
140
|
+
</tr>
|
141
|
+
</tbody>
|
142
|
+
</table>
|
143
|
+
|
144
|
+
</div>
|
145
|
+
<!-- /container -->
|
146
|
+
|
147
|
+
|
148
|
+
<!-- Bootstrap core JavaScript
|
149
|
+
================================================== -->
|
150
|
+
<!-- Placed at the end of the document so the pages load faster -->
|
151
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
|
152
|
+
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
|
153
|
+
<script src="https://raw.githack.com/drvic10k/bootstrap-sortable/master/Scripts/moment.min.js"></script>
|
154
|
+
<script src="https://raw.githack.com/drvic10k/bootstrap-sortable/master/Scripts/bootstrap-sortable.js"></script>
|
155
|
+
<script type="text/javascript">
|
156
|
+
// Initialise on DOM ready
|
157
|
+
$(function() {
|
158
|
+
$.bootstrapSortable(true, 'reversed');
|
159
|
+
});
|
160
|
+
</script>
|
161
|
+
</body>
|
162
|
+
</html>
|
@@ -0,0 +1,145 @@
|
|
1
|
+
!!!
|
2
|
+
%html{:lang => "en"}
|
3
|
+
%head
|
4
|
+
%meta{:charset => "utf-8"}/
|
5
|
+
%meta{:content => "IE=edge", "http-equiv" => "X-UA-Compatible"}/
|
6
|
+
%meta{:content => "width=device-width, initial-scale=1", :name => "viewport"}/
|
7
|
+
%meta{:content => "Cucumber Step Statistics", :name => "description"}/
|
8
|
+
%meta{:content => "AlienFast", :name => "author"}/
|
9
|
+
%title Cucumber Step Statistics
|
10
|
+
/ Bootstrap core CSS
|
11
|
+
%link{:href => "http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css", :rel => "stylesheet"}/
|
12
|
+
/ Custom styles for this layout
|
13
|
+
:css
|
14
|
+
body {
|
15
|
+
min-height: 2000px;
|
16
|
+
padding-top: 70px;
|
17
|
+
}
|
18
|
+
|
19
|
+
td {
|
20
|
+
white-space: nowrap;
|
21
|
+
/*max-width: 100px;*/
|
22
|
+
}
|
23
|
+
tr td:first-child {
|
24
|
+
overflow: hidden;
|
25
|
+
text-overflow: ellipsis;
|
26
|
+
max-width: 300px;
|
27
|
+
}
|
28
|
+
%link{:href => "https://raw.githack.com/drvic10k/bootstrap-sortable/master/Contents/bootstrap-sortable.css", :rel => "stylesheet"}/
|
29
|
+
/ HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries
|
30
|
+
/[if lt IE 9]
|
31
|
+
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
32
|
+
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
33
|
+
%body
|
34
|
+
/ Fixed navbar
|
35
|
+
.navbar.navbar-default.navbar-fixed-top{:role => "navigation"}
|
36
|
+
.container
|
37
|
+
.navbar-header
|
38
|
+
%button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", :type => "button"}
|
39
|
+
%span.sr-only Toggle navigation
|
40
|
+
%span.icon-bar
|
41
|
+
%span.icon-bar
|
42
|
+
%span.icon-bar
|
43
|
+
%a.navbar-brand{:href => "#"} cucumber_statistics
|
44
|
+
.navbar-collapse.collapse
|
45
|
+
-#%ul.nav.navbar-nav
|
46
|
+
%li.active
|
47
|
+
%a{:href => "#"} Home
|
48
|
+
%li
|
49
|
+
%a{:href => "#about"} About
|
50
|
+
%li
|
51
|
+
%a{:href => "#contact"} Contact
|
52
|
+
%li.dropdown
|
53
|
+
%a.dropdown-toggle{"data-toggle" => "dropdown", :href => "#"}
|
54
|
+
Dropdown
|
55
|
+
%b.caret
|
56
|
+
%ul.dropdown-menu
|
57
|
+
%li
|
58
|
+
%a{:href => "#"} Action
|
59
|
+
%li
|
60
|
+
%a{:href => "#"} Another action
|
61
|
+
%li
|
62
|
+
%a{:href => "#"} Something else here
|
63
|
+
%li.divider
|
64
|
+
%li.dropdown-header Nav header
|
65
|
+
%li
|
66
|
+
%a{:href => "#"} Separated link
|
67
|
+
%li
|
68
|
+
%a{:href => "#"} One more separated link
|
69
|
+
%ul.nav.navbar-nav.navbar-right
|
70
|
+
-#%li
|
71
|
+
-# %a{:href => "../navbar/"} Default
|
72
|
+
-#%li
|
73
|
+
-# %a{:href => "../navbar-static-top/"} Static top
|
74
|
+
%li
|
75
|
+
%a{:href => "https://github.com/alienfast/cucumber_statistics", :target => 'other'} Github
|
76
|
+
/ /.nav-collapse
|
77
|
+
.container
|
78
|
+
/ Main component for a primary marketing message or call to action
|
79
|
+
.jumbotron
|
80
|
+
%h1 Cucumber step statistics
|
81
|
+
%p ... allows you to easily diagnose long running steps.
|
82
|
+
|
83
|
+
.alert.alert-info
|
84
|
+
%span
|
85
|
+
#{overall_statistics.feature_count} Features,
|
86
|
+
#{overall_statistics.scenario_count} Scenario,
|
87
|
+
#{overall_statistics.step_count} Steps completed in #{format(overall_statistics.duration)}.
|
88
|
+
%span.text-muted.pull-right.small
|
89
|
+
Finished on #{format_date_time(overall_statistics.end_time)}
|
90
|
+
|
91
|
+
%table.table.table-bordered.table-striped.sortable
|
92
|
+
%thead
|
93
|
+
%tr
|
94
|
+
%th Step
|
95
|
+
%th Fastest
|
96
|
+
%th Slowest
|
97
|
+
%th Variation
|
98
|
+
%th Variance
|
99
|
+
%th Std Deviation
|
100
|
+
%th Count
|
101
|
+
%th Average
|
102
|
+
%th{"data-defaultsort" => "desc"} Total
|
103
|
+
%tbody
|
104
|
+
|
105
|
+
- highest_average = step_statistics.highest_average
|
106
|
+
- highest_total = step_statistics.highest_total
|
107
|
+
- highest_variation = step_statistics.highest_variation
|
108
|
+
|
109
|
+
|
110
|
+
- step_statistics.all.each do |step_results|
|
111
|
+
|
112
|
+
%tr
|
113
|
+
= name_td step_results
|
114
|
+
= time_td step_results, :fastest
|
115
|
+
= time_td step_results, :slowest
|
116
|
+
= time_td step_results, :variation, highest_variation
|
117
|
+
= time_td step_results, :variance
|
118
|
+
= time_td step_results, :standard_deviation
|
119
|
+
= count_td step_results, :count
|
120
|
+
= time_td step_results, :average, highest_average
|
121
|
+
= time_td step_results, :total, highest_total
|
122
|
+
-#%tr
|
123
|
+
%td /^Blah I am logged in as ((?:(?:)|(?:(?:a|an|another|the|that) )?(?:(?:(?:(?:first|last|(?:\d+(?:st|nd|rd|th))) )?(?:paper[_ ]trail[_ ]version|acts[_ ]as[_ ]taggable[_ ]on[_ ]tag|acts[_ ]as[_ ]taggable[_ ]on[_ ]tagging|user|active[_ ]record[_ ]schema[_ ]migration|plan|feature|reference[_ ]type|allergy|relationship[_ ]type|allergy[_ ]type|medical[_ ]condition[_ ]type|account|rspec[_ ]account|address|)(?::? "(?:\\"|[^\"]|\.)*"))))) at (\w+)$/
|
124
|
+
%td 4.051
|
125
|
+
%td 8.099
|
126
|
+
%td 5.099
|
127
|
+
%td 0.420
|
128
|
+
%td 0.966
|
129
|
+
%td 6
|
130
|
+
%td 1.490
|
131
|
+
%td 31.288
|
132
|
+
/ /container
|
133
|
+
/
|
134
|
+
Bootstrap core JavaScript
|
135
|
+
\==================================================
|
136
|
+
/ Placed at the end of the document so the pages load faster
|
137
|
+
%script{:src => "https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"}
|
138
|
+
%script{:src => "http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"}
|
139
|
+
%script{:src => "https://raw.githack.com/drvic10k/bootstrap-sortable/master/Scripts/moment.min.js"}
|
140
|
+
%script{:src => "https://raw.githack.com/drvic10k/bootstrap-sortable/master/Scripts/bootstrap-sortable.js"}
|
141
|
+
:javascript
|
142
|
+
// Initialise on DOM ready
|
143
|
+
$(function() {
|
144
|
+
$.bootstrapSortable(true, 'reversed');
|
145
|
+
});
|
data/notes.txt
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
http://www.oesmith.co.uk/morris.js/lines.html
|
2
|
+
http://drvic10k.github.io/bootstrap-sortable/
|
3
|
+
|
4
|
+
http://stackoverflow.com/questions/6125265/using-layouts-in-haml-files-independently-of-rails
|
5
|
+
http://getbootstrap.com/examples/navbar-fixed-top/
|
6
|
+
|
7
|
+
|
8
|
+
Total time of run
|
9
|
+
file path/name/line number of step
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module CucumberStatistics
|
4
|
+
describe Configuration do
|
5
|
+
|
6
|
+
before do
|
7
|
+
Configuration.clean_tmp_dir
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should auto create tmp_dir' do
|
11
|
+
|
12
|
+
tmp_dir = Configuration.tmp_dir
|
13
|
+
Dir.exists?(tmp_dir).should == true
|
14
|
+
|
15
|
+
Dir.delete tmp_dir
|
16
|
+
tmp_dir = Configuration.tmp_dir
|
17
|
+
Dir.exists?(tmp_dir).should == true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|