report_builder 1.2 → 1.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.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/.travis.yml +15 -0
- data/CHANGELOG.md +43 -0
- data/README.md +28 -22
- data/bin/report_builder +8 -0
- data/lib/report_builder/builder.rb +20 -4
- data/report_builder.gemspec +1 -1
- data/template/html_report.erb +53 -33
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 315748504568c9c1ab74986ef3b436cbe62c836e
|
4
|
+
data.tar.gz: 577abdb1da309254a44f60e629d2c1839b675075
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b7d081033b5e69b62ed4d811e62d853ef5d8ec1f75ad73707c6715507c2ba618bed13ba15f3067742934103758502ddd08248682a5ced053cd8b8b94997829a
|
7
|
+
data.tar.gz: 70a64740b7df9ba6ee7ca2b373cf25abecab23fc7b645e167dde87bd644ad04d724c95ec276c56e5058dcd98e2da699f87183785aa0198d3f700bcf8a249831d
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
os:
|
2
|
+
- linux
|
3
|
+
- osx
|
4
|
+
|
5
|
+
language: ruby
|
6
|
+
rvm:
|
7
|
+
- 1.9.3
|
8
|
+
- 2.4.0
|
9
|
+
- jruby-9.1.7.0
|
10
|
+
|
11
|
+
before_install:
|
12
|
+
# Using a recent version of bundler in order to avoid gem installation errors
|
13
|
+
- gem install bundler -v 1.15.4
|
14
|
+
|
15
|
+
script: bundle exec rake report_builder:test_everything
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# Changelog
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
|
4
|
+
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
5
|
+
|
6
|
+
## [Unreleased](https://github.com/rajatthareja/ReportBuilder/compare/v1.3...master)
|
7
|
+
|
8
|
+
## [1.3](https://github.com/rajatthareja/ReportBuilder/compare/v1.2...v1.3) - 2017-10-22
|
9
|
+
### Changed
|
10
|
+
- Step Data Table UI
|
11
|
+
|
12
|
+
### Added
|
13
|
+
- additional_js option
|
14
|
+
- additional_css option
|
15
|
+
- alias input_path for json_path
|
16
|
+
- Duration for Step, Scenario and Feature
|
17
|
+
- Search and Filter Scenario by Tag
|
18
|
+
- Changelog file
|
19
|
+
|
20
|
+
## [1.2](https://github.com/rajatthareja/ReportBuilder/compare/v1.1...v1.2) - 2017-10-10
|
21
|
+
### Added
|
22
|
+
- Scenario URI in Report UI
|
23
|
+
|
24
|
+
### Fixed
|
25
|
+
- Embedding Issues Fixed
|
26
|
+
|
27
|
+
## [1.1](https://github.com/rajatthareja/ReportBuilder/compare/v1.0...v1.1) - 2017-10-7
|
28
|
+
### Fixed
|
29
|
+
- Decode Embedding Fixed
|
30
|
+
|
31
|
+
## [1.0](https://github.com/rajatthareja/ReportBuilder/compare/v0.1.6...v1.0) - 2017-10-4
|
32
|
+
### Changed
|
33
|
+
- New Report UI
|
34
|
+
- Builder to ERB
|
35
|
+
- Local resources to CDN
|
36
|
+
|
37
|
+
### Added
|
38
|
+
- include_images option
|
39
|
+
- New sample report
|
40
|
+
|
41
|
+
### Removed
|
42
|
+
- report_tabs option
|
43
|
+
- compress_images option
|
data/README.md
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
# ReportBuilder
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/report_builder)
|
4
|
+
[](https://travis-ci.org/rajatthareja/ReportBuilder)
|
4
5
|
[](https://gitter.im/rajatthareja/ReportBuilder?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
5
6
|
|
6
7
|
Ruby gem to merge Cucumber JSON reports and build mobile friendly HTML Test Report, JSON report and retry file.
|
7
8
|
|
8
|
-
[View sample report](http://reportbuilder.rajatthareja.com
|
9
|
+
**[View sample report](http://reportbuilder.rajatthareja.com)**
|
9
10
|
|
10
11
|
## Installation
|
11
12
|
|
@@ -26,14 +27,18 @@ gem install report_builder
|
|
26
27
|
|
27
28
|
### Config Options:
|
28
29
|
|
29
|
-
| Option
|
30
|
-
|
31
|
-
| json_path | [String] / [Array] | (current directory) | json files path / array of json files or path
|
32
|
-
| report_path
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
| Option | Type | Default | Values |
|
31
|
+
|-------------------------|--------------------|---------------------|------------------------------------------------------------------------------------------|
|
32
|
+
| json_path / input_path | [String] / [Array] | (current directory) | input json files path / array of json files or path |
|
33
|
+
| report_path | [String] | 'test_report' | reports output file path with file name without extension |
|
34
|
+
| json_report_path | [String] | (report_path) | json report output file path with file name without extension |
|
35
|
+
| html_report_path | [String] | (report_path) | html report output file path with file name without extension |
|
36
|
+
| retry_report_path | [String] | (report_path) | retry report output file path with file name without extension |
|
37
|
+
| report_types | [Array] | [:html] | :json, :html, :retry (output file types) |
|
38
|
+
| report_title | [String] | 'Test Results' | report and html title |
|
39
|
+
| include_images | [Boolean] | true | true / false (If false, the size of HTML report is reduced by excluding embedded images) |
|
40
|
+
| additional_info | [Hash] | {} | additional info for report summary |
|
41
|
+
| additional_css | [String] | nil | additional CSS string or CSS file path or CSS file url for customizing html report |
|
37
42
|
|
38
43
|
### Code Examples:
|
39
44
|
|
@@ -69,19 +74,20 @@ gem install report_builder
|
|
69
74
|
|
70
75
|
### CLI Options:
|
71
76
|
|
72
|
-
| Option
|
73
|
-
|
74
|
-
| -s, --source
|
75
|
-
| -o, --out
|
76
|
-
| --json_out
|
77
|
-
| --html_out
|
78
|
-
| --retry_out
|
79
|
-
| -f, --format
|
80
|
-
| --[no-]images
|
81
|
-
| -T, --title
|
82
|
-
| -I, --info
|
83
|
-
|
|
84
|
-
| -
|
77
|
+
| Option | Values | Explanation |
|
78
|
+
|---------------------|-----------------|------------------------------------------------------------------------------------|
|
79
|
+
| -s, --source | x,y,z | List of input json path or files |
|
80
|
+
| -o, --out | [PATH]NAME | Reports path with name without extension |
|
81
|
+
| --json_out | [PATH]NAME | JSON report path with name without extension |
|
82
|
+
| --html_out | [PATH]NAME | HTML report path with name without extension |
|
83
|
+
| --retry_out | [PATH]NAME | Retry report path with name without extension |
|
84
|
+
| -f, --format | x,y,z | List of report format - html,json,retry |
|
85
|
+
| --[no-]images | | Reduce HTML report size by excluding embedded images |
|
86
|
+
| -T, --title | TITLE | Report title |
|
87
|
+
| -I, --info | a:x,b:y,c:z | List of additional info about test - key:value |
|
88
|
+
| --css | STRING|PATH|URL | Additional CSS string or CSS file path or CSS file url for customizing html report |
|
89
|
+
| -h, --help | | Show available command line switches |
|
90
|
+
| -v, --version | | Show gem version |
|
85
91
|
|
86
92
|
### CLI Example:
|
87
93
|
|
data/bin/report_builder
CHANGED
@@ -55,6 +55,14 @@ opt_parser = OptionParser.new do |opts|
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
+
opts.on('--css', 'Additional CSS string or CSS file path or CSS file url for customizing html report') do |additional_css|
|
59
|
+
options[:additional_css] = additional_css
|
60
|
+
end
|
61
|
+
|
62
|
+
opts.on('--js', 'Additional JS string or JS file path or JS file url for customizing html report') do |additional_js|
|
63
|
+
options[:additional_js] = additional_js
|
64
|
+
end
|
65
|
+
|
58
66
|
opts.separator 'Common options:'
|
59
67
|
|
60
68
|
opts.on_tail('-h', '--help', 'Show help') do
|
@@ -18,6 +18,7 @@ module ReportBuilder
|
|
18
18
|
|
19
19
|
options[:report_types].map!(&:to_s).map!(&:upcase)
|
20
20
|
|
21
|
+
options[:json_path] ||= options[:input_path]
|
21
22
|
files = get_files options[:json_path]
|
22
23
|
raise "Error:: No file(s) found at #{options[:json_path]}" if files.empty?
|
23
24
|
|
@@ -28,6 +29,14 @@ module ReportBuilder
|
|
28
29
|
file.write JSON.pretty_generate features
|
29
30
|
end if options[:report_types].include? 'JSON'
|
30
31
|
|
32
|
+
if options[:additional_css] and Pathname.new(options[:additional_css]).file?
|
33
|
+
options[:additional_css] = File.read(options[:additional_css])
|
34
|
+
end
|
35
|
+
|
36
|
+
if options[:additional_js] and Pathname.new(options[:additional_js]).file?
|
37
|
+
options[:additional_js] = File.read(options[:additional_js])
|
38
|
+
end
|
39
|
+
|
31
40
|
html_report_path = options[:html_report_path] || options[:report_path]
|
32
41
|
File.open(html_report_path + '.html', 'w') do |file|
|
33
42
|
file.write ERB.new(File.read(File.dirname(__FILE__) + '/../../template/html_report.erb')).result(binding).gsub(' ', '').gsub("\n\n", '')
|
@@ -192,10 +201,17 @@ module ReportBuilder
|
|
192
201
|
total_time
|
193
202
|
end
|
194
203
|
|
195
|
-
def duration(
|
196
|
-
|
197
|
-
m, s =
|
198
|
-
|
204
|
+
def duration(ms)
|
205
|
+
s = ms.to_f/1000000000
|
206
|
+
m, s = s.divmod(60)
|
207
|
+
if m > 59
|
208
|
+
h, m = m.divmod(60)
|
209
|
+
"#{h}h #{m}m #{'%.2f' % s}s"
|
210
|
+
elsif m > 0
|
211
|
+
"#{m}m #{'%.2f' % s}s"
|
212
|
+
else
|
213
|
+
"#{'%.3f' % s}s"
|
214
|
+
end
|
199
215
|
end
|
200
216
|
end
|
201
217
|
end
|
data/report_builder.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'report_builder'
|
3
|
-
s.version = '1.
|
3
|
+
s.version = '1.3'
|
4
4
|
s.bindir = 'bin'
|
5
5
|
s.summary = 'ReportBuilder'
|
6
6
|
s.description = 'Ruby gem to merge Cucumber JSON reports and build mobile friendly HTML Test Report, JSON report and retry file.'
|
data/template/html_report.erb
CHANGED
@@ -7,15 +7,24 @@
|
|
7
7
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
8
8
|
<link href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css" rel="stylesheet">
|
9
9
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/css/materialize.min.css" media="screen,projection"/>
|
10
|
-
<link href="https://cdn.rawgit.com/rajatthareja/ReportBuilder/
|
10
|
+
<link href="https://cdn.rawgit.com/rajatthareja/ReportBuilder/v1.3/css/report.builder.min.css" rel="stylesheet">
|
11
11
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
12
|
+
<%if options[:additional_css]%>
|
13
|
+
<%if options[:additional_css] =~ /^http(|s):\/\/.*\.css$/%>
|
14
|
+
<link rel="stylesheet" href="<%=options[:additional_css]%>" media="all"/>
|
15
|
+
<%else%>
|
16
|
+
<style type="text/css">
|
17
|
+
<%= options[:additional_css]%>
|
18
|
+
</style>
|
19
|
+
<%end%>
|
20
|
+
<%end%>
|
12
21
|
</head>
|
13
22
|
<body>
|
14
23
|
|
15
24
|
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
|
16
|
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js"></script>
|
17
|
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.0/Chart.min.js"></script>
|
18
|
-
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
|
25
|
+
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js"></script>
|
26
|
+
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.0/Chart.min.js"></script>
|
27
|
+
<script type="text/javascript" src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
|
19
28
|
|
20
29
|
<%errors = []%>
|
21
30
|
<%features.each_with_index do |feature, f|%>
|
@@ -29,7 +38,7 @@
|
|
29
38
|
<%end%>
|
30
39
|
<%end%>
|
31
40
|
|
32
|
-
<h5><%=scenario['name']
|
41
|
+
<h5><%=scenario['name']%> (<%=duration(scenario['duration'])%>)</h5>
|
33
42
|
<%=feature['uri']%>:<%=scenario['line']%>
|
34
43
|
|
35
44
|
<%if scenario['before']%>
|
@@ -49,7 +58,7 @@
|
|
49
58
|
<%end%>
|
50
59
|
|
51
60
|
<ul class="collection stepList">
|
52
|
-
<%scenario['steps'].
|
61
|
+
<%scenario['steps'].each do |step|%>
|
53
62
|
<li class="collection-item step <%=step['status']%>">
|
54
63
|
|
55
64
|
<%if scenario['before']%>
|
@@ -68,22 +77,15 @@
|
|
68
77
|
<%end%>
|
69
78
|
<%end%>
|
70
79
|
|
71
|
-
<b><%=step['keyword']%></b> <%=step['name']%>
|
80
|
+
<b><%=step['keyword']%></b> <%=step['name']%> (<%=duration(step['duration'])%>)
|
72
81
|
|
73
82
|
<%if step['rows']%>
|
74
|
-
|
75
|
-
<
|
76
|
-
<%
|
77
|
-
|
78
|
-
<td>|
|
79
|
-
<%row['cells'].each do |cell|%>
|
80
|
-
<%=cell + ' |'%>
|
81
|
-
<%end%>
|
82
|
-
</td>
|
83
|
-
</tr>
|
83
|
+
<%step['rows'].each do |row|%>
|
84
|
+
<%='<br/>| '%>
|
85
|
+
<%row['cells'].each do |cell|%>
|
86
|
+
<%=cell + ' | '%>
|
84
87
|
<%end%>
|
85
|
-
|
86
|
-
</table>
|
88
|
+
<%end%>
|
87
89
|
<%end%>
|
88
90
|
|
89
91
|
<%if step['output']%>
|
@@ -183,7 +185,7 @@
|
|
183
185
|
</ul>
|
184
186
|
</div>
|
185
187
|
<div class="modal-footer">
|
186
|
-
<
|
188
|
+
<span class="modal-action modal-close waves-effect waves-green btn-flat"><i class="material-icons">close</i></span>
|
187
189
|
</div>
|
188
190
|
</div>
|
189
191
|
<%end%>
|
@@ -239,20 +241,20 @@
|
|
239
241
|
</div>
|
240
242
|
</div>
|
241
243
|
</div>
|
242
|
-
<div id="features" class="col s12 brown lighten-5">
|
244
|
+
<div id="features" class="col s12 brown lighten-5 white-text">
|
243
245
|
<ul class="featureList collapsible popout" data-collapsible="expandable">
|
244
246
|
<%features.each_with_index do |feature, f|%>
|
245
247
|
<li class="feature <%=feature['status']%>">
|
246
|
-
<div class="collapsible-header brown lighten-1
|
247
|
-
<i class="material-icons
|
248
|
-
<b><%=feature['keyword']%></b> <%=feature['name']%>
|
248
|
+
<div class="collapsible-header brown lighten-1 waves-effect waves-light">
|
249
|
+
<i class="material-icons">featured_play_list</i>
|
250
|
+
<b><%=feature['keyword']%></b> <%=feature['name']%> (<%=duration(feature['duration'])%>)
|
249
251
|
</div>
|
250
252
|
<div class="collapsible-body brown lighten-4">
|
251
253
|
<ul class="collection scenarioList">
|
252
254
|
<%feature['elements'].each_with_index do |scenario, s|%>
|
253
255
|
<li class="collection-item scenario <%=scenario['status']%>">
|
254
256
|
<a class="waves-effect waves-light modal-trigger white-text" href="#f<%=f%>s<%=s%>">
|
255
|
-
<b><%=scenario['keyword']%></b> <%=scenario['name']%>
|
257
|
+
<b><%=scenario['keyword']%></b> <%=scenario['name']%> (<%=duration(scenario['duration'])%>)
|
256
258
|
</a>
|
257
259
|
</li>
|
258
260
|
<%end%>
|
@@ -266,8 +268,9 @@
|
|
266
268
|
<table id="summaryTable" class="bordered brown lighten-1 white-text">
|
267
269
|
<thead>
|
268
270
|
<tr>
|
269
|
-
<th>Feature</th>
|
271
|
+
<th class="hide-on-small-only">Feature</th>
|
270
272
|
<th>Scenario</th>
|
273
|
+
<th class="hide">Tags</th>
|
271
274
|
<th>Status</th>
|
272
275
|
<th class="hide-on-small-only">Error</th>
|
273
276
|
</tr>
|
@@ -276,10 +279,18 @@
|
|
276
279
|
<%features.each_with_index do |feature, f|%>
|
277
280
|
<%feature['elements'].each_with_index do |scenario, s|%>
|
278
281
|
<tr class="<%=scenario['status']%>">
|
279
|
-
<td class="
|
282
|
+
<td class="hide-on-small-only"><%=feature['name']%></td>
|
280
283
|
<td class="hoverable"><a class="modal-trigger white-text" href="#f<%=f%>s<%=s%>"><%=scenario['name']%></a></td>
|
281
|
-
|
282
|
-
<td class="
|
284
|
+
<%# Scenarios Tags for search and filter %>
|
285
|
+
<td class="hide">
|
286
|
+
<%if scenario['tags']%>
|
287
|
+
<%scenario['tags'].each do |tag|%>
|
288
|
+
<%=tag['name'] + '. '%>
|
289
|
+
<%end%>
|
290
|
+
<%end%>
|
291
|
+
</td>
|
292
|
+
<td class="uppercase"><%=scenario['status']%></td>
|
293
|
+
<td class="hide-on-small-only"><%if scenario['error']%><%=scenario['error']%><%end%></td>
|
283
294
|
</tr>
|
284
295
|
<%end%>
|
285
296
|
<%end%>
|
@@ -299,8 +310,8 @@
|
|
299
310
|
<%feature['elements'].each_with_index do |scenario, s|%>
|
300
311
|
<%if scenario['error']%>
|
301
312
|
<%if scenario['error'] == error%>
|
302
|
-
<li class="collection-item failedScenario brown lighten-5">
|
303
|
-
<i class="material-icons
|
313
|
+
<li class="collection-item failedScenario brown lighten-5 red-text">
|
314
|
+
<i class="material-icons">highlight_off</i> <a class="modal-trigger red-text"href="#f<%=f%>s<%=s%>"><%=scenario['name']%></a>
|
304
315
|
</li>
|
305
316
|
<%end%>
|
306
317
|
<%end%>
|
@@ -324,13 +335,22 @@
|
|
324
335
|
</div>
|
325
336
|
</footer>
|
326
337
|
|
327
|
-
<script>
|
338
|
+
<script type="text/javascript">
|
328
339
|
$(document).ready(function () {
|
329
340
|
<%features.each_with_index do |feature, f|%><%(0..feature['elements'].size).each do |s|%>
|
330
341
|
$('#f<%=f%>s<%=s%>').modal();
|
331
342
|
<%end%><%end%>
|
332
343
|
});
|
333
344
|
</script>
|
334
|
-
<script src="https://cdn.rawgit.com/rajatthareja/ReportBuilder/
|
345
|
+
<script type="text/javascript" src="https://cdn.rawgit.com/rajatthareja/ReportBuilder/v1.3/js/report.builder.min.js"></script>
|
346
|
+
<%if options[:additional_js]%>
|
347
|
+
<%if options[:additional_js] =~ /^http(|s):\/\/.*\.js$/%>
|
348
|
+
<script src="<%=options[:additional_js]%>"></script>
|
349
|
+
<%else%>
|
350
|
+
<script type="text/javascript">
|
351
|
+
<%= options[:additional_js]%>
|
352
|
+
</script>
|
353
|
+
<%end%>
|
354
|
+
<%end%>
|
335
355
|
</body>
|
336
356
|
</html>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: report_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rajat Thareja
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -61,6 +61,8 @@ extensions: []
|
|
61
61
|
extra_rdoc_files: []
|
62
62
|
files:
|
63
63
|
- .gitignore
|
64
|
+
- .travis.yml
|
65
|
+
- CHANGELOG.md
|
64
66
|
- Gemfile
|
65
67
|
- LICENSE
|
66
68
|
- README.md
|