cucumber_characteristics 0.0.2 → 0.0.3
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.
- data/README.md +22 -1
- data/features/characteristics/cucumber_step_characteristics.html +46 -177
- data/features/characteristics/cucumber_step_characteristics.json +1 -1
- data/lib/cucumber_characteristics/cucumber_step_patch.rb +0 -6
- data/lib/cucumber_characteristics/profile_data.rb +2 -2
- data/lib/cucumber_characteristics/version.rb +1 -1
- metadata +1 -1
data/README.md
CHANGED
@@ -1,6 +1,27 @@
|
|
1
1
|
# CucumberCharacteristics
|
2
2
|
|
3
|
-
Gem to profile cucumber steps and features
|
3
|
+
Gem to profile cucumber steps and features.
|
4
|
+
|
5
|
+
## High level features
|
6
|
+
|
7
|
+
Step analysis including
|
8
|
+
+ Location of step in steps file & regex
|
9
|
+
+ Step usage location and number of times executed (background/outline etc)
|
10
|
+
+ Counts for success/failure/pending/etc
|
11
|
+
+ Total time taken in test run
|
12
|
+
+ Average, fastest, slowest times per step
|
13
|
+
+ Variation, variance & standard deviation calculations
|
14
|
+
|
15
|
+
Feature analysis including
|
16
|
+
+ Feature location
|
17
|
+
+ Time taken to run feature
|
18
|
+
+ Result of feature test (pass, fail etc)
|
19
|
+
+ Number of steps run
|
20
|
+
+ Breakdown of feature by individual example run if a secario outline
|
21
|
+
|
22
|
+
Other features.
|
23
|
+
+ Reporting of ambiguous step calls
|
24
|
+
+ Reporting of unused step definitions
|
4
25
|
|
5
26
|
## Installation
|
6
27
|
|
@@ -39,19 +39,18 @@
|
|
39
39
|
</div>
|
40
40
|
<div class='alert alert-info'>
|
41
41
|
<span>
|
42
|
-
|
43
|
-
|
42
|
+
2 Scenarios,
|
43
|
+
8 Steps completed
|
44
44
|
<span class='text-muted'>
|
45
|
-
(
|
45
|
+
(Passed: 8)<br>
|
46
46
|
</span>
|
47
|
-
|
48
|
-
Test duration 12.0048s.
|
47
|
+
Test duration 1.6180s.
|
49
48
|
<span class='text-muted'>
|
50
|
-
(
|
49
|
+
(1.6146s steps, 0.0034s non-steps)
|
51
50
|
</span>
|
52
51
|
</span>
|
53
52
|
<span class='text-muted pull-right small'>
|
54
|
-
Finished on 2014-06-
|
53
|
+
Finished on 2014-06-26 07:05:36 -0400
|
55
54
|
</span>
|
56
55
|
</div>
|
57
56
|
<ul class='nav nav-tabs'>
|
@@ -61,6 +60,9 @@
|
|
61
60
|
<li>
|
62
61
|
<a data-toggle='tab' href='#features'>Features</a>
|
63
62
|
</li>
|
63
|
+
<li>
|
64
|
+
<a data-toggle='tab' href='#unused_steps'>Unused Steps (3)</a>
|
65
|
+
</li>
|
64
66
|
</ul>
|
65
67
|
<div class='tab-content'>
|
66
68
|
<div class='tab-pane active' id='steps'>
|
@@ -87,76 +89,26 @@
|
|
87
89
|
<td>
|
88
90
|
<abbr title='/^I wait ([\d\.]+) seconds$/'>features/step_definitions/wait_steps.rb:1</abbr>
|
89
91
|
</td>
|
90
|
-
<td>
|
91
|
-
<td>
|
92
|
-
<abbr title='features/failure.feature:4
features/pending.feature:4
features/scenario.feature:4
features/scenario.feature:5
features/scenario.feature:6
features/scenario_outline.feature:4 (x2)
features/scenario_outline.feature:5 (x2)
features/scenario_outline.feature:6 (x2)
features/scenario_outline.feature:7 (x2)
features/scenario_outline_with_background.feature:4 (x2)
features/scenario_outline_with_background.feature:7 (x2)
features/scenario_outline_with_background.feature:8 (x2)
features/scenario_outline_with_background.feature:9 (x2)
features/scenario_outline_with_background.feature:10 (x2)
features/scenario_with_background.feature:4 (x2)
features/scenario_with_background.feature:7
features/scenario_with_background.feature:8
features/scenario_with_background.feature:9
features/scenario_with_background.feature:12
features/scenario_with_background.feature:13
features/scenario_with_background.feature:14'>31</abbr>
|
93
|
-
</td>
|
94
|
-
<td>0.3847</td>
|
95
|
-
<td>0.1006</td>
|
96
|
-
<td>1.0004</td>
|
97
|
-
<td>0.8998</td>
|
98
|
-
<td>0.0562</td>
|
99
|
-
<td>0.2371</td>
|
100
|
-
<td>
|
101
|
-
<abbr title='features/failure.feature:6
features/pending.feature:6'>2</abbr>
|
102
|
-
</td>
|
103
|
-
<td>
|
104
|
-
0
|
105
|
-
</td>
|
106
|
-
<td>
|
107
|
-
0
|
108
|
-
</td>
|
109
|
-
<td>33</td>
|
110
|
-
</tr>
|
111
|
-
<tr>
|
112
|
-
<td>
|
113
|
-
<abbr title='/^I fail$/'>features/step_definitions/fail_steps.rb:1</abbr>
|
114
|
-
</td>
|
115
|
-
<td>-</td>
|
92
|
+
<td>1.6146</td>
|
116
93
|
<td>
|
117
|
-
|
94
|
+
<abbr title='features/scenario_outline.feature:4 (x2)
features/scenario_outline.feature:5 (x2)
features/scenario_outline.feature:6 (x2)
features/scenario_outline.feature:7 (x2)'>8</abbr>
|
118
95
|
</td>
|
119
|
-
<td
|
120
|
-
<td
|
121
|
-
<td
|
122
|
-
<td
|
123
|
-
<td
|
124
|
-
<td
|
96
|
+
<td>0.2018</td>
|
97
|
+
<td>0.1024</td>
|
98
|
+
<td>0.3006</td>
|
99
|
+
<td>0.1982</td>
|
100
|
+
<td>0.0049</td>
|
101
|
+
<td>0.0701</td>
|
125
102
|
<td>
|
126
103
|
0
|
127
104
|
</td>
|
128
|
-
<td>
|
129
|
-
<abbr title='features/failure.feature:5'>1</abbr>
|
130
|
-
</td>
|
131
105
|
<td>
|
132
106
|
0
|
133
107
|
</td>
|
134
|
-
<td>1</td>
|
135
|
-
</tr>
|
136
|
-
<tr>
|
137
|
-
<td>
|
138
|
-
<abbr title=''>I call a pending step</abbr>
|
139
|
-
</td>
|
140
|
-
<td>-</td>
|
141
108
|
<td>
|
142
109
|
0
|
143
110
|
</td>
|
144
|
-
<td
|
145
|
-
<td>-</td>
|
146
|
-
<td>-</td>
|
147
|
-
<td>-</td>
|
148
|
-
<td>-</td>
|
149
|
-
<td>-</td>
|
150
|
-
<td>
|
151
|
-
0
|
152
|
-
</td>
|
153
|
-
<td>
|
154
|
-
0
|
155
|
-
</td>
|
156
|
-
<td>
|
157
|
-
<abbr title='features/pending.feature:5'>1</abbr>
|
158
|
-
</td>
|
159
|
-
<td>1</td>
|
111
|
+
<td>8</td>
|
160
112
|
</tr>
|
161
113
|
</tbody>
|
162
114
|
</table>
|
@@ -173,52 +125,9 @@
|
|
173
125
|
</tr>
|
174
126
|
</thead>
|
175
127
|
<tbody>
|
176
|
-
<tr class='danger'>
|
177
|
-
<td>features/failure.feature:3</td>
|
178
|
-
<td>1.0004</td>
|
179
|
-
<td>3</td>
|
180
|
-
<td>failed</td>
|
181
|
-
<td>
|
182
|
-
</td>
|
183
|
-
</tr>
|
184
|
-
<tr class='danger'>
|
185
|
-
<td>features/ambiguous.feature:3</td>
|
186
|
-
<td>-</td>
|
187
|
-
<td>1</td>
|
188
|
-
<td>failed</td>
|
189
|
-
<td>
|
190
|
-
</td>
|
191
|
-
</tr>
|
192
|
-
<tr class='warning'>
|
193
|
-
<td>features/pending.feature:3</td>
|
194
|
-
<td>1.0004</td>
|
195
|
-
<td>3</td>
|
196
|
-
<td>undefined</td>
|
197
|
-
<td>
|
198
|
-
</td>
|
199
|
-
</tr>
|
200
|
-
<tr class=''>
|
201
|
-
<td>features/scenario_outline_with_background.feature:6</td>
|
202
|
-
<td>3.6076</td>
|
203
|
-
<td>10</td>
|
204
|
-
<td>passed</td>
|
205
|
-
<td>
|
206
|
-
<button class='btn btn-primary' data-target='#ee4ab50980effe45ea18c9afc38e97e5' data-toggle='modal'>
|
207
|
-
2 Examples
|
208
|
-
</button>
|
209
|
-
</td>
|
210
|
-
</tr>
|
211
|
-
<tr class=''>
|
212
|
-
<td>features/scenario_with_background.feature:11</td>
|
213
|
-
<td>2.2036</td>
|
214
|
-
<td>4</td>
|
215
|
-
<td>passed</td>
|
216
|
-
<td>
|
217
|
-
</td>
|
218
|
-
</tr>
|
219
128
|
<tr class=''>
|
220
129
|
<td>features/scenario_outline.feature:3</td>
|
221
|
-
<td>1.
|
130
|
+
<td>1.6146</td>
|
222
131
|
<td>8</td>
|
223
132
|
<td>passed</td>
|
224
133
|
<td>
|
@@ -227,72 +136,8 @@
|
|
227
136
|
</button>
|
228
137
|
</td>
|
229
138
|
</tr>
|
230
|
-
<tr class=''>
|
231
|
-
<td>features/scenario.feature:3</td>
|
232
|
-
<td>1.5057</td>
|
233
|
-
<td>3</td>
|
234
|
-
<td>passed</td>
|
235
|
-
<td>
|
236
|
-
</td>
|
237
|
-
</tr>
|
238
|
-
<tr class=''>
|
239
|
-
<td>features/scenario_with_background.feature:6</td>
|
240
|
-
<td>1.0026</td>
|
241
|
-
<td>4</td>
|
242
|
-
<td>passed</td>
|
243
|
-
<td>
|
244
|
-
</td>
|
245
|
-
</tr>
|
246
139
|
</tbody>
|
247
140
|
</table>
|
248
|
-
<div aria-hidden='true' aria-labelledby='myLargeModalLabel' class='modal fade bs-example-modal-lg' id='ee4ab50980effe45ea18c9afc38e97e5' role='dialog' tabindex='-1'>
|
249
|
-
<div class='modal-dialog modal-lg'>
|
250
|
-
<div class='modal-content'>
|
251
|
-
<div class='modal-header'>
|
252
|
-
<h4>features/scenario_outline_with_background.feature:6</h4>
|
253
|
-
</div>
|
254
|
-
<div class='modal-body'>
|
255
|
-
<table class='table table-striped table-bordered table-condensed'>
|
256
|
-
<thead>
|
257
|
-
<tr>
|
258
|
-
<th>Example</th>
|
259
|
-
<th>Total time</th>
|
260
|
-
<th>Step count</th>
|
261
|
-
<th>Status</th>
|
262
|
-
</tr>
|
263
|
-
</thead>
|
264
|
-
<tbody>
|
265
|
-
<tr class=''>
|
266
|
-
<td>| 0.5 | 0.6 | 0.7 |</td>
|
267
|
-
<td>2.4043</td>
|
268
|
-
<td>5</td>
|
269
|
-
<td>passed</td>
|
270
|
-
</tr>
|
271
|
-
<tr class=''>
|
272
|
-
<td>| 0.1 | 0.2 | 0.3 |</td>
|
273
|
-
<td>1.2033</td>
|
274
|
-
<td>5</td>
|
275
|
-
<td>passed</td>
|
276
|
-
</tr>
|
277
|
-
</tbody>
|
278
|
-
<tfooter>
|
279
|
-
<tr>
|
280
|
-
<th></th>
|
281
|
-
<th>3.6076</th>
|
282
|
-
<th>10</th>
|
283
|
-
<th>passed</th>
|
284
|
-
</tr>
|
285
|
-
</tfooter>
|
286
|
-
</table>
|
287
|
-
</div>
|
288
|
-
<div class='modal-footer'>
|
289
|
-
<button class='btn btn-default' data-dismiss='modal' type='button'>
|
290
|
-
Close
|
291
|
-
</button>
|
292
|
-
</div>
|
293
|
-
</div>
|
294
|
-
</div>
|
295
|
-
</div>
|
296
141
|
<div aria-hidden='true' aria-labelledby='myLargeModalLabel' class='modal fade bs-example-modal-lg' id='76f61671f111ebbc40b80f6aa9f5f838' role='dialog' tabindex='-1'>
|
297
142
|
<div class='modal-dialog modal-lg'>
|
298
143
|
<div class='modal-content'>
|
@@ -312,13 +157,13 @@
|
|
312
157
|
<tbody>
|
313
158
|
<tr class=''>
|
314
159
|
<td>| 0.3 | 0.2 | 0.1 |</td>
|
315
|
-
<td>0.
|
160
|
+
<td>0.8073</td>
|
316
161
|
<td>4</td>
|
317
162
|
<td>passed</td>
|
318
163
|
</tr>
|
319
164
|
<tr class=''>
|
320
165
|
<td>| 0.1 | 0.2 | 0.3 |</td>
|
321
|
-
<td>0.
|
166
|
+
<td>0.8073</td>
|
322
167
|
<td>4</td>
|
323
168
|
<td>passed</td>
|
324
169
|
</tr>
|
@@ -326,7 +171,7 @@
|
|
326
171
|
<tfooter>
|
327
172
|
<tr>
|
328
173
|
<th></th>
|
329
|
-
<th>1.
|
174
|
+
<th>1.6146</th>
|
330
175
|
<th>8</th>
|
331
176
|
<th>passed</th>
|
332
177
|
</tr>
|
@@ -342,6 +187,30 @@
|
|
342
187
|
</div>
|
343
188
|
</div>
|
344
189
|
</div>
|
190
|
+
<div class='tab-pane' id='unused_steps'>
|
191
|
+
<table class='table table-striped table-bordered table-condensed tablesorter' id='unmatched_steps_table'>
|
192
|
+
<thead>
|
193
|
+
<tr>
|
194
|
+
<th>Step Location</th>
|
195
|
+
<th>Step</th>
|
196
|
+
</tr>
|
197
|
+
</thead>
|
198
|
+
<tbody>
|
199
|
+
<tr>
|
200
|
+
<td>features/step_definitions/ambiguous_steps.rb:1</td>
|
201
|
+
<td>/^I wait some/</td>
|
202
|
+
</tr>
|
203
|
+
<tr>
|
204
|
+
<td>features/step_definitions/ambiguous_steps.rb:4</td>
|
205
|
+
<td>/^I wait some seconds$/</td>
|
206
|
+
</tr>
|
207
|
+
<tr>
|
208
|
+
<td>features/step_definitions/fail_steps.rb:1</td>
|
209
|
+
<td>/^I fail$/</td>
|
210
|
+
</tr>
|
211
|
+
</tbody>
|
212
|
+
</table>
|
213
|
+
</div>
|
345
214
|
</div>
|
346
215
|
</div>
|
347
216
|
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js'></script>
|
@@ -1 +1 @@
|
|
1
|
-
[["features/step_definitions/wait_steps.rb:1",{"total_count":
|
1
|
+
[["features/step_definitions/wait_steps.rb:1",{"total_count":8,"passed":{"count":8,"feature_location":{"features/scenario_outline.feature:4":[0.102381726,0.300628711],"features/scenario_outline.feature:5":[0.202134351,0.202134351],"features/scenario_outline.feature:6":[0.300628711,0.102381726],"features/scenario_outline.feature:7":[0.202134351,0.202134351]}},"failed":{"count":0,"feature_location":{}},"skipped":{"count":0,"feature_location":{}},"undefined":{"count":0,"feature_location":{}},"regexp":"/^I wait ([\\d\\.]+) seconds$/","fastest":0.102381726,"slowest":0.300628711,"average":0.20181978475,"total_duration":1.614558278,"standard_deviation":0.07009159960098225,"variation":0.198246985,"variance":0.0049128323346244165}]]
|
@@ -41,8 +41,8 @@ module CucumberCharacteristics
|
|
41
41
|
feature_profiles[feature_id] ||= {name: f.scenario_outline.name, total_duration: 0, step_count: 0, example_count: 0, examples: {} }
|
42
42
|
example_id = f.name
|
43
43
|
feature_profiles[feature_id][:examples][example_id] ||= {total_duration: 0, step_count: 0}
|
44
|
-
feature_profiles[feature_id][:examples][example_id][:total_duration] = f.step_invocations.select{|s| s.status == :passed}.map{|s| s.step_match.duration}.inject(&:+)
|
45
|
-
feature_profiles[feature_id][:examples][example_id][:step_count] = f.step_invocations.count
|
44
|
+
feature_profiles[feature_id][:examples][example_id][:total_duration] = f.instance_variable_get(:@step_invocations).select{|s| s.status == :passed}.map{|s| s.step_match.duration}.inject(&:+)
|
45
|
+
feature_profiles[feature_id][:examples][example_id][:step_count] = f.instance_variable_get(:@step_invocations).count
|
46
46
|
feature_profiles[feature_id][:examples][example_id][:status] = f.status
|
47
47
|
else
|
48
48
|
feature_id = f.file_colon_line
|