allure-cucumber 0.4.4 → 0.5.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 +4 -4
- data/allure-cucumber.gemspec +1 -1
- data/lib/allure-cucumber/dsl.rb +6 -1
- data/lib/allure-cucumber/feature_tracker.rb +1 -1
- data/lib/allure-cucumber/formatter.rb +138 -123
- data/lib/allure-cucumber/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f342ba639e4ecb153d62562f75c474a849027308
|
|
4
|
+
data.tar.gz: a50a28d657b4b31178282d0c83d7416478a6ad0a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2afa46d2a3f3cc34d6e162b9bdb897536e4433322d730966b48dee8f03b9654398654e09e412544903b44e62d44f1a27bf207f41dbebd9f83555e66fc235e65d
|
|
7
|
+
data.tar.gz: 8aa900d31952970d60b4dacbd6bad816d9ef6c47f6ee902a9927ceaca2ef417d9457531cb9a402fdb585fa349e3a4d9c66eb4a3ea4c00bf221b401843e449887
|
data/allure-cucumber.gemspec
CHANGED
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
|
|
|
16
16
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
17
17
|
spec.require_paths = ["lib"]
|
|
18
18
|
|
|
19
|
-
spec.add_dependency 'cucumber'
|
|
19
|
+
spec.add_dependency 'cucumber' , '>= 2.0.0'
|
|
20
20
|
spec.add_dependency 'allure-ruby-adaptor-api'
|
|
21
21
|
|
|
22
22
|
spec.add_development_dependency "bundler", "~> 1.5"
|
data/lib/allure-cucumber/dsl.rb
CHANGED
|
@@ -3,7 +3,12 @@ module AllureCucumber
|
|
|
3
3
|
|
|
4
4
|
def attach_file(title, file)
|
|
5
5
|
@tracker = AllureCucumber::FeatureTracker.tracker
|
|
6
|
-
|
|
6
|
+
if @tracker.scenario_name
|
|
7
|
+
AllureRubyAdaptorApi::Builder.add_attachment(@tracker.feature_name, @tracker.scenario_name, :step => @tracker.step_name, :file => file, :title => title)
|
|
8
|
+
else
|
|
9
|
+
# TODO: This is possible for background steps.
|
|
10
|
+
puts "Cannot attach #{title} to step #{@tracker.step_name} as scenario name is undefined"
|
|
11
|
+
end
|
|
7
12
|
end
|
|
8
13
|
|
|
9
14
|
end
|
|
@@ -6,146 +6,100 @@ module AllureCucumber
|
|
|
6
6
|
class Formatter
|
|
7
7
|
|
|
8
8
|
include AllureCucumber::DSL
|
|
9
|
+
|
|
10
|
+
TEST_HOOK_NAMES_TO_IGNORE = ['Before hook', 'After hook']
|
|
9
11
|
|
|
12
|
+
POSSIBLE_STATUSES = ['passed', 'failed', 'pending', 'skipped', 'undefined']
|
|
13
|
+
|
|
10
14
|
def initialize(step_mother, io, options)
|
|
11
15
|
dir = Pathname.new(AllureCucumber::Config.output_dir)
|
|
12
16
|
FileUtils.rm_rf(dir)
|
|
17
|
+
FileUtils.mkdir_p(dir)
|
|
13
18
|
@tracker = AllureCucumber::FeatureTracker.create
|
|
19
|
+
@deferred_before_test_steps = []
|
|
20
|
+
@deferred_after_test_steps = []
|
|
14
21
|
end
|
|
15
22
|
|
|
23
|
+
# Start the test suite
|
|
16
24
|
def before_feature(feature)
|
|
17
|
-
@has_background = false
|
|
18
25
|
feature_identifier = ENV['FEATURE_IDENTIFIER'] && "#{ENV['FEATURE_IDENTIFIER']} - "
|
|
19
26
|
@tracker.feature_name = "#{feature_identifier}#{feature.name.gsub(/\n/, " ")}"
|
|
20
|
-
AllureRubyAdaptorApi::Builder.start_suite(@tracker.feature_name
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def before_background(*args)
|
|
24
|
-
@in_background = true
|
|
25
|
-
@has_background = true
|
|
26
|
-
@background_before_steps = []
|
|
27
|
-
@background_after_steps = []
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def after_background(*args)
|
|
31
|
-
@in_background = false
|
|
27
|
+
AllureRubyAdaptorApi::Builder.start_suite(@tracker.feature_name)
|
|
32
28
|
end
|
|
33
29
|
|
|
30
|
+
# Find sceanrio type
|
|
34
31
|
def before_feature_element(feature_element)
|
|
35
|
-
@scenario_outline = feature_element.instance_of?(Cucumber::Ast::ScenarioOutline)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def scenario_name(keyword, name, file_colon_line, source_indent)
|
|
39
|
-
unless @scenario_outline
|
|
40
|
-
@tracker.scenario_name = (name.nil? || name == "") ? "Unnamed scenario" : name.gsub(/\n/, " ")
|
|
41
|
-
AllureRubyAdaptorApi::Builder.start_test(@tracker.feature_name, @tracker.scenario_name, :feature => @tracker.feature_name, :story => @tracker.scenario_name)
|
|
42
|
-
@tracker.scenario_started_at = Time.now
|
|
43
|
-
post_background_steps if @has_background
|
|
44
|
-
else
|
|
45
|
-
@scenario_outline_name = (name.nil? || name == "") ? "Unnamed scenario" : name.gsub(/\n/, " ")
|
|
46
|
-
end
|
|
32
|
+
@scenario_outline = feature_element.instance_of?(Cucumber::Core::Ast::ScenarioOutline)
|
|
47
33
|
end
|
|
48
34
|
|
|
49
|
-
def
|
|
50
|
-
|
|
51
|
-
@
|
|
52
|
-
@exception = nil
|
|
35
|
+
def scenario_name(keyword, name, *args)
|
|
36
|
+
scenario_name = (name.nil? || name == "") ? "Unnamed scenario" : name.gsub(/\n/, " ")
|
|
37
|
+
@scenario_outline ? @scenario_outline_name = scenario_name : @tracker.scenario_name = scenario_name
|
|
53
38
|
end
|
|
54
39
|
|
|
55
|
-
def
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
@tracker.step_name = step.name
|
|
59
|
-
AllureRubyAdaptorApi::Builder.start_step(@tracker.feature_name, @tracker.scenario_name, @tracker.step_name)
|
|
60
|
-
attach_multiline_arg(step.multiline_arg)
|
|
61
|
-
else
|
|
62
|
-
@example_before_steps << step
|
|
63
|
-
end
|
|
64
|
-
else
|
|
65
|
-
@background_before_steps << step
|
|
66
|
-
end
|
|
40
|
+
def before_examples(*args)
|
|
41
|
+
@header_row = true
|
|
42
|
+
@row_count = 0
|
|
67
43
|
end
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
else
|
|
74
|
-
@example_after_steps << step
|
|
75
|
-
end
|
|
76
|
-
else
|
|
77
|
-
@background_after_steps << step
|
|
44
|
+
|
|
45
|
+
# Start the test for normal scenarios
|
|
46
|
+
def before_steps(steps)
|
|
47
|
+
if !@scenario_outline
|
|
48
|
+
start_test
|
|
78
49
|
end
|
|
79
50
|
end
|
|
80
51
|
|
|
52
|
+
# Stop the test for normal scenarios
|
|
81
53
|
def after_steps(steps)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
def before_examples(*args)
|
|
88
|
-
@header_row = true
|
|
89
|
-
@in_examples = true
|
|
54
|
+
if !@scenario_outline
|
|
55
|
+
result = test_result(steps)
|
|
56
|
+
stop_test(result)
|
|
57
|
+
end
|
|
90
58
|
end
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
@
|
|
59
|
+
|
|
60
|
+
# Start the test for scenario examples
|
|
61
|
+
def before_table_row(table_row)
|
|
62
|
+
if @scenario_outline && !@header_row && !@in_multiline_arg
|
|
63
|
+
@row_count += 1
|
|
64
|
+
@tracker.scenario_name = "Example #{@row_count} : #{@scenario_outline_name}"
|
|
65
|
+
start_test
|
|
66
|
+
end
|
|
95
67
|
end
|
|
96
68
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
row_hash = {}
|
|
104
|
-
element.each_with_index do |item, index|
|
|
105
|
-
row_hash[headers[index]] = item
|
|
69
|
+
# Stop the test for scenario examples
|
|
70
|
+
def after_table_row(table_row)
|
|
71
|
+
unless @multiline_arg
|
|
72
|
+
if @scenario_outline && !@header_row
|
|
73
|
+
result = test_result(table_row)
|
|
74
|
+
stop_test(result)
|
|
106
75
|
end
|
|
107
|
-
@
|
|
76
|
+
@header_row = false
|
|
108
77
|
end
|
|
109
78
|
end
|
|
110
79
|
|
|
111
|
-
def
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
post_background_steps if @has_background
|
|
120
|
-
@current_row += 1
|
|
121
|
-
@example_before_steps.each do |step|
|
|
122
|
-
@tracker.step_name = transform_step_name_for_outline(step.name, @current_row)
|
|
123
|
-
AllureRubyAdaptorApi::Builder.start_step(@tracker.feature_name, @tracker.scenario_name, @tracker.step_name)
|
|
124
|
-
attach_multiline_arg(step.multiline_arg)
|
|
125
|
-
end
|
|
80
|
+
def before_test_step(test_step)
|
|
81
|
+
if !TEST_HOOK_NAMES_TO_IGNORE.include?(test_step.name)
|
|
82
|
+
if @tracker.scenario_name
|
|
83
|
+
@tracker.step_name = test_step.name
|
|
84
|
+
start_step
|
|
85
|
+
else
|
|
86
|
+
@deferred_before_test_steps << {:step => test_step, :timestamp => Time.now}
|
|
87
|
+
end
|
|
126
88
|
end
|
|
127
89
|
end
|
|
128
90
|
|
|
129
|
-
def
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
@scenario_status = :failed
|
|
137
|
-
end
|
|
138
|
-
AllureRubyAdaptorApi::Builder.stop_step(@tracker.feature_name, @tracker.scenario_name, @tracker.step_name, step.status.to_sym)
|
|
91
|
+
def after_test_step(test_step, result)
|
|
92
|
+
if !TEST_HOOK_NAMES_TO_IGNORE.include?(test_step.name)
|
|
93
|
+
if @tracker.scenario_name
|
|
94
|
+
status = step_status(result)
|
|
95
|
+
stop_step(status)
|
|
96
|
+
else
|
|
97
|
+
@deferred_after_test_steps << {:step => test_step, :result => result, :timestamp => Time.now}
|
|
139
98
|
end
|
|
140
|
-
AllureRubyAdaptorApi::Builder.stop_test(@tracker.feature_name, @tracker.scenario_name, {:status => @scenario_status, :exception => @exception, :started_at => @tracker.scenario_started_at, :finished_at => Time.now })
|
|
141
99
|
end
|
|
142
|
-
@header_row = false if @header_row
|
|
143
100
|
end
|
|
144
101
|
|
|
145
|
-
|
|
146
|
-
@in_examples = false
|
|
147
|
-
end
|
|
148
|
-
|
|
102
|
+
# Stop the suite
|
|
149
103
|
def after_feature(feature)
|
|
150
104
|
AllureRubyAdaptorApi::Builder.stop_suite(@tracker.feature_name)
|
|
151
105
|
end
|
|
@@ -154,35 +108,96 @@ module AllureCucumber
|
|
|
154
108
|
AllureRubyAdaptorApi::Builder.build!
|
|
155
109
|
end
|
|
156
110
|
|
|
111
|
+
def before_multiline_arg(multiline_arg)
|
|
112
|
+
@in_multiline_arg = true
|
|
113
|
+
# For background steps defer multiline attachment
|
|
114
|
+
if @tracker.scenario_name.nil?
|
|
115
|
+
@deferred_before_test_steps[-1].merge!({:multiline_arg => multiline_arg})
|
|
116
|
+
else
|
|
117
|
+
attach_multiline_arg_to_file(multiline_arg)
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def after_multiline_arg(multiline_arg)
|
|
122
|
+
@in_multiline_arg = false
|
|
123
|
+
end
|
|
124
|
+
|
|
157
125
|
private
|
|
126
|
+
|
|
127
|
+
def step_status(result)
|
|
128
|
+
POSSIBLE_STATUSES.each do |status|
|
|
129
|
+
return cucumber_status_to_allure_status(status) if result.send("#{status}?")
|
|
130
|
+
end
|
|
131
|
+
end
|
|
158
132
|
|
|
159
|
-
def
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
133
|
+
def test_result(result)
|
|
134
|
+
status = cucumber_status_to_allure_status(result.status)
|
|
135
|
+
exception = status == 'failed' && result.exception.nil? ? Exception.new("Some steps were undefined") : result.exception
|
|
136
|
+
if exception
|
|
137
|
+
return {:status => status, :exception => exception}
|
|
138
|
+
else
|
|
139
|
+
return {:status => status}
|
|
163
140
|
end
|
|
164
|
-
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def cucumber_status_to_allure_status(status)
|
|
144
|
+
case status.to_s
|
|
145
|
+
when "undefined"
|
|
146
|
+
return "failed"
|
|
147
|
+
when "skipped"
|
|
148
|
+
return "pending"
|
|
149
|
+
else
|
|
150
|
+
return status.to_s
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def attach_multiline_arg_to_file(multiline_arg)
|
|
155
|
+
dir = File.expand_path(AllureCucumber::Config.output_dir)
|
|
156
|
+
out_file = "#{dir}/#{UUID.new.generate}.txt"
|
|
157
|
+
File.open(out_file, "w+") { |file| file.write(multiline_arg.to_s.gsub(/\e\[(\d+)(;\d+)*m/,'')) }
|
|
158
|
+
attach_file("multiline_arg", File.open(out_file))
|
|
165
159
|
end
|
|
166
160
|
|
|
167
|
-
def
|
|
168
|
-
if
|
|
169
|
-
|
|
170
|
-
|
|
161
|
+
def start_test
|
|
162
|
+
if @tracker.scenario_name
|
|
163
|
+
AllureRubyAdaptorApi::Builder.start_test(@tracker.feature_name, @tracker.scenario_name, :feature => @tracker.feature_name, :story => @tracker.scenario_name)
|
|
164
|
+
post_deferred_steps
|
|
171
165
|
end
|
|
172
166
|
end
|
|
173
167
|
|
|
174
|
-
def
|
|
175
|
-
@
|
|
176
|
-
@tracker.step_name =
|
|
177
|
-
|
|
178
|
-
|
|
168
|
+
def post_deferred_steps
|
|
169
|
+
@deferred_before_test_steps.size.times do |index|
|
|
170
|
+
@tracker.step_name = @deferred_before_test_steps[index][:step].name
|
|
171
|
+
start_step
|
|
172
|
+
multiline_arg = @deferred_before_test_steps[index][:multiline_arg]
|
|
173
|
+
attach_multiline_arg_to_file(multiline_arg) if multiline_arg
|
|
174
|
+
if index < @deferred_after_test_steps.size
|
|
175
|
+
result = step_status(@deferred_after_test_steps[index][:result])
|
|
176
|
+
stop_step(result)
|
|
177
|
+
end
|
|
179
178
|
end
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def stop_test(result)
|
|
182
|
+
if @deferred_before_test_steps != []
|
|
183
|
+
result[:started_at] = @deferred_before_test_steps[0][:timestamp]
|
|
184
|
+
end
|
|
185
|
+
if @tracker.scenario_name
|
|
186
|
+
AllureRubyAdaptorApi::Builder.stop_test(@tracker.feature_name, @tracker.scenario_name, result)
|
|
187
|
+
@tracker.scenario_name = nil
|
|
188
|
+
@deferred_before_test_steps = []
|
|
189
|
+
@deferred_after_test_steps = []
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def start_step(step_name = @tracker.step_name)
|
|
194
|
+
AllureRubyAdaptorApi::Builder.start_step(@tracker.feature_name, @tracker.scenario_name, step_name)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def stop_step(status, step_name = @tracker.step_name)
|
|
198
|
+
AllureRubyAdaptorApi::Builder.stop_step(@tracker.feature_name, @tracker.scenario_name, step_name, status)
|
|
185
199
|
end
|
|
186
200
|
|
|
187
201
|
end
|
|
188
202
|
end
|
|
203
|
+
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: allure-cucumber
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Imran Khan
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2015-10-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: cucumber
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: 2.0.0
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
26
|
+
version: 2.0.0
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: allure-ruby-adaptor-api
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -104,8 +104,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
104
104
|
version: '0'
|
|
105
105
|
requirements: []
|
|
106
106
|
rubyforge_project:
|
|
107
|
-
rubygems_version: 2.4.
|
|
107
|
+
rubygems_version: 2.4.8
|
|
108
108
|
signing_key:
|
|
109
109
|
specification_version: 4
|
|
110
|
-
summary: allure-cucumber-0.
|
|
110
|
+
summary: allure-cucumber-0.5.0
|
|
111
111
|
test_files: []
|