allure-ruby-commons 2.13.6 → 2.13.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12cb6b2b1132dd43b17becb6b9a32c47cb9aa44a3be793dc09f083d7e5784370
4
- data.tar.gz: a34abfd6a9dff13b8b6b1d571b33f348549c59848579220c4a8add6d5317004c
3
+ metadata.gz: 53156094ed2444485eb90b07d2f162d1b010a5c07ff57dae0bcc5ad631116a77
4
+ data.tar.gz: 0520275651cc3e900886d71a605906e6725dd3a34a5d47cde2672332662d39eb
5
5
  SHA512:
6
- metadata.gz: 1d6bf42ce012302f708869666f94ea4a8a408dc2c17f4989e2b469b3a100458a36226d5b9790ba497b4b69c87306ee437f6825187255f1c00dc9d1a579e5d322
7
- data.tar.gz: f15cadf664ae40f2152a86f541bd2a3ef68de4bc60bc72908b04ace4a90753088a6342a3eb63846a95a38b5e311c573223fe5d901fc29c78b2f4cd76f5958ddc
6
+ metadata.gz: 9c5f0dfb4cb84c3881f90bd684ef103d86c807a84e03d68b0c9dc3f2d444175cf355a15982b6be2cdb60d69c011acbb9cb472c2c462cc847c11a1d6acabce592
7
+ data.tar.gz: 70fa07d3238b13287733eb165b62dded9330b242dbadd57a2d4099843087515210c535abbbb744a3fabc43d84a33a98ff61d4b5675153ccdf92284a62d25e979
data/README.md CHANGED
@@ -35,6 +35,10 @@ Getting the configuration object:
35
35
  Allure.configuration
36
36
  ```
37
37
 
38
+ ### Log level
39
+
40
+ Log level can be also configured via environment variable `ALLURE_LOG_LEVEL` which accepts one of the following values: `DEBUG INFO WARN ERROR FATAL UNKNOWN`.
41
+
38
42
  ## Allure lifecycle
39
43
 
40
44
  Reports are built using API defined in AllureLifecycle class and using allure specific entities defined in models.
@@ -3,6 +3,7 @@
3
3
 
4
4
  require "require_all"
5
5
  require "uuid"
6
+
6
7
  require_rel "allure_ruby_commons/**/*rb"
7
8
 
8
9
  # Namespace for classes that handle allure report generation and different framework adaptors
@@ -169,7 +170,7 @@ module Allure
169
170
  lifecycle.start_test_step(StepResult.new(name: name, stage: Stage::RUNNING))
170
171
  yield
171
172
  lifecycle.update_test_step { |step| step.status = Status::PASSED }
172
- rescue => e
173
+ rescue StandardError => e
173
174
  lifecycle.update_test_step do |step|
174
175
  step.status = ResultUtils.status(e)
175
176
  step.status_details = ResultUtils.status_details(e)
@@ -5,13 +5,13 @@ require "forwardable"
5
5
 
6
6
  module Allure
7
7
  # Main class for creating and writing allure results
8
- class AllureLifecycle
8
+ class AllureLifecycle # rubocop:disable Metrics/ClassLength
9
9
  extend Forwardable
10
10
 
11
11
  def initialize
12
12
  @test_context = []
13
13
  @step_context = []
14
- @logger = Logger.new(STDOUT, level: Config.instance.logging_level)
14
+ @logger = Logger.new($stdout, level: Config.instance.logging_level)
15
15
  @file_writer = FileWriter.new
16
16
  end
17
17
 
@@ -22,6 +22,8 @@ module Allure
22
22
  # @return [Allure::TestResultContainer]
23
23
  def start_test_container(test_result_container)
24
24
  test_result_container.tap do |container|
25
+ logger.debug { "Starting test container: #{container.name}" }
26
+
25
27
  container.start = ResultUtils.timestamp
26
28
  @test_context.push(container)
27
29
  end
@@ -36,7 +38,7 @@ module Allure
36
38
  # @return [void]
37
39
  def update_test_container
38
40
  unless current_test_result_container
39
- return logger.error("Could not update test container, no container is running.")
41
+ return logger.error { "Could not update test container, no container is running." }
40
42
  end
41
43
 
42
44
  yield(current_test_result_container)
@@ -46,10 +48,11 @@ module Allure
46
48
  # @return [void]
47
49
  def stop_test_container
48
50
  unless current_test_result_container
49
- return logger.error("Could not stop test container, no container is running.")
51
+ return logger.error { "Could not stop test container, no container is running." }
50
52
  end
51
53
 
52
54
  current_test_result_container.tap do |container|
55
+ logger.debug { "Stopping container: #{container.name}" }
53
56
  container.stop = ResultUtils.timestamp
54
57
  file_writer.write_test_result_container(container)
55
58
  clear_last_test_container
@@ -62,9 +65,10 @@ module Allure
62
65
  def start_test_case(test_result)
63
66
  clear_step_context
64
67
  unless current_test_result_container
65
- return logger.error("Could not start test case, test container is not started")
68
+ return logger.error { "Could not start test case, test container is not started" }
66
69
  end
67
70
 
71
+ logger.debug("Starting test case: #{test_result.name}")
68
72
  test_result.start = ResultUtils.timestamp
69
73
  test_result.stage = Stage::RUNNING
70
74
  test_result.labels.push(ResultUtils.thread_label, ResultUtils.host_label, ResultUtils.language_label)
@@ -80,7 +84,7 @@ module Allure
80
84
  # @yieldreturn [void]
81
85
  # @return [void]
82
86
  def update_test_case
83
- return logger.error("Could not update test case, no test case running") unless @current_test_case
87
+ return logger.error { "Could not update test case, no test case running" } unless @current_test_case
84
88
 
85
89
  yield(@current_test_case)
86
90
  end
@@ -88,8 +92,9 @@ module Allure
88
92
  # Stop current test case and write result
89
93
  # @return [void]
90
94
  def stop_test_case
91
- return logger.error("Could not stop test case, no test case is running") unless @current_test_case
95
+ return logger.error { "Could not stop test case, no test case is running" } unless @current_test_case
92
96
 
97
+ logger.debug { "Stopping test case: #{@current_test_case.name}" }
93
98
  @current_test_case.stop = ResultUtils.timestamp
94
99
  @current_test_case.stage = Stage::FINISHED
95
100
  file_writer.write_test_result(@current_test_case)
@@ -101,8 +106,9 @@ module Allure
101
106
  # @param [Allure::StepResult] step_result
102
107
  # @return [Allure::StepResult]
103
108
  def start_test_step(step_result)
104
- return logger.error("Could not start test step, no test case is running") unless @current_test_case
109
+ return logger.error { "Could not start test step, no test case is running" } unless @current_test_case
105
110
 
111
+ logger.debug { "Starting test step: #{step_result.name}" }
106
112
  step_result.start = ResultUtils.timestamp
107
113
  step_result.stage = Stage::RUNNING
108
114
  add_test_step(step_result)
@@ -117,7 +123,7 @@ module Allure
117
123
  # @yieldreturn [void]
118
124
  # @return [void]
119
125
  def update_test_step
120
- return logger.error("Could not update test step, no step is running") unless current_test_step
126
+ return logger.error { "Could not update test step, no step is running" } unless current_test_step
121
127
 
122
128
  yield(current_test_step)
123
129
  end
@@ -125,8 +131,9 @@ module Allure
125
131
  # Stop current test step
126
132
  # @return [void]
127
133
  def stop_test_step
128
- return logger.error("Could not stop test step, no step is running") unless current_test_step
134
+ return logger.error { "Could not stop test step, no step is running" } unless current_test_step
129
135
 
136
+ logger.debug { "Stopping test step: #{current_test_step.name}" }
130
137
  current_test_step.stop = ResultUtils.timestamp
131
138
  current_test_step.stage = Stage::FINISHED
132
139
  clear_last_test_step
@@ -160,6 +167,7 @@ module Allure
160
167
  return false
161
168
  end
162
169
 
170
+ logger.debug { "Starting fixture: #{fixture_result.name}" }
163
171
  fixture_result.start = ResultUtils.timestamp
164
172
  fixture_result.stage = Stage::RUNNING
165
173
  end
@@ -172,7 +180,7 @@ module Allure
172
180
  # @yieldreturn [void]
173
181
  # @return [void]
174
182
  def update_fixture
175
- return logger.error("Could not update fixture, fixture is not started") unless @current_fixture
183
+ return logger.error { "Could not update fixture, fixture is not started" } unless @current_fixture
176
184
 
177
185
  yield(@current_fixture)
178
186
  end
@@ -180,8 +188,9 @@ module Allure
180
188
  # Stop current test fixture
181
189
  # @return [void]
182
190
  def stop_fixture
183
- return logger.error("Could not stop fixture, fixture is not started") unless @current_fixture
191
+ return logger.error { "Could not stop fixture, fixture is not started" } unless @current_fixture
184
192
 
193
+ logger.debug { "Stopping fixture: #{@current_fixture.name}" }
185
194
  @current_fixture.stop = ResultUtils.timestamp
186
195
  @current_fixture.stage = Stage::FINISHED
187
196
  clear_current_fixture
@@ -195,13 +204,14 @@ module Allure
195
204
  # @param [Boolean] test_case add attachment to current test case
196
205
  # @return [void]
197
206
  def add_attachment(name:, source:, type:, test_case: false)
198
- attachment = ResultUtils.prepare_attachment(name, type) || begin
199
- return logger.error("Can't add attachment, unrecognized mime type: #{type}")
200
- end
201
- executable_item = (test_case && @current_test_case) || current_executable
202
- executable_item&.attachments&.push(attachment) || begin
203
- return logger.error("Can't add attachment, no test, step or fixture is running")
204
- end
207
+ attachment = ResultUtils.prepare_attachment(name, type)
208
+ return logger.error { "Can't add attachment, unrecognized mime type: #{type}" } unless attachment
209
+
210
+ executable_item = test_case ? @current_test_case : current_executable
211
+ return logger.error { "Can't add attachment, no test, step or fixture is running" } unless executable_item
212
+
213
+ executable_item.attachments.push(attachment)
214
+ logger.debug { "Adding attachment '#{name}' to '#{executable_item.name}'" }
205
215
  write_attachment(source, attachment)
206
216
  end
207
217
 
@@ -218,7 +228,7 @@ module Allure
218
228
  # @return [void]
219
229
  def clean_results_dir
220
230
  Allure.configuration.tap do |c|
221
- FileUtils.rm_f(Dir.glob("#{c.results_directory}/*")) if c.clean_results_directory
231
+ FileUtils.rm_f(Dir.glob("#{c.results_directory}/**/*")) if c.clean_results_directory
222
232
  end
223
233
  end
224
234
 
@@ -8,20 +8,47 @@ module Allure
8
8
  class Config
9
9
  include Singleton
10
10
 
11
- # @return [String] default allure results directory
12
- DEFAULT_RESULTS_DIRECTORY = "reports/allure-results"
13
- # @return [String] default loggin level
14
- DEFAULT_LOGGING_LEVEL = Logger::INFO
11
+ # @return [Array<String>] valid log levels
12
+ LOGLEVELS = %w[DEBUG INFO WARN ERROR FATAL UNKNOWN].freeze
13
+ # @return [String] test plan path env var name
14
+ TESTPLAN_PATH = "ALLURE_TESTPLAN_PATH"
15
+ # @return [String] test plan file name
16
+ TESTPLAN_JSON = "testplan.json"
15
17
 
16
- attr_accessor :link_tms_pattern, :link_issue_pattern, :clean_results_directory
17
- attr_writer :results_directory, :logging_level
18
+ attr_accessor :results_directory, :logging_level, :link_tms_pattern, :link_issue_pattern, :clean_results_directory
18
19
 
19
- def results_directory
20
- @results_directory || DEFAULT_RESULTS_DIRECTORY
20
+ def initialize
21
+ @results_directory = "reports/allure-results"
22
+ @logging_level = LOGLEVELS.index(ENV.fetch("ALLURE_LOG_LEVEL", "INFO")) || Logger::INFO
21
23
  end
22
24
 
23
- def logging_level
24
- @logging_level || DEFAULT_LOGGING_LEVEL
25
+ # Allure id's of executable tests
26
+ #
27
+ # @return [Array]
28
+ def test_ids
29
+ @test_ids ||= tests&.map { |test| test[:id] }
30
+ end
31
+
32
+ # Test names of executable tests
33
+ #
34
+ # @return [Array]
35
+ def test_names
36
+ @test_names ||= tests&.map { |test| test[:selector] }
37
+ end
38
+
39
+ private
40
+
41
+ # Tests to execute from allure testplan.json
42
+ #
43
+ # @return [Array<Hash>]
44
+ def tests
45
+ @tests ||= begin
46
+ return unless ENV[TESTPLAN_PATH]
47
+
48
+ Oj.load_file("#{ENV[TESTPLAN_PATH]}/#{TESTPLAN_JSON}", symbol_keys: true)&.fetch(:tests)
49
+ end
50
+ rescue Oj::ParseError
51
+ nil
25
52
  end
26
53
  end
27
54
  end
@@ -18,14 +18,14 @@ module Allure
18
18
  # @param [Allure::TestResult] test_result
19
19
  # @return [void]
20
20
  def write_test_result(test_result)
21
- write("#{test_result.uuid}#{TEST_RESULT_SUFFIX}", test_result.to_json)
21
+ write("#{test_result.uuid}#{TEST_RESULT_SUFFIX}", Oj.dump(test_result))
22
22
  end
23
23
 
24
24
  # Write test result container
25
25
  # @param [Allure::TestResultContainer] test_container_result
26
26
  # @return [void]
27
27
  def write_test_result_container(test_container_result)
28
- write("#{test_container_result.uuid}#{TEST_RESULT_CONTAINER_SUFFIX}", test_container_result.to_json)
28
+ write("#{test_container_result.uuid}#{TEST_RESULT_CONTAINER_SUFFIX}", Oj.dump(test_container_result))
29
29
  end
30
30
 
31
31
  # Write allure attachment file
@@ -52,7 +52,7 @@ module Allure
52
52
  if categories.is_a?(File)
53
53
  copy(categories.path, CATEGORIES_FILE)
54
54
  else
55
- write(CATEGORIES_FILE, categories.to_json)
55
+ write(CATEGORIES_FILE, Oj.dump(categories))
56
56
  end
57
57
  end
58
58
 
@@ -1,14 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "json"
3
+ require "oj"
4
4
 
5
5
  module Allure
6
6
  # General jsonable object implementation
7
7
  class JSONable
8
- # Return object has represantation
9
- # @param [Hash] _options
8
+ Oj.default_options = { mode: :custom, use_to_hash: true, ascii_only: true }
9
+
10
+ # Return object hash represantation
10
11
  # @return [Hash]
11
- def as_json(_options = {})
12
+ def to_hash
12
13
  instance_variables.each_with_object({}) do |var, map|
13
14
  key = camelcase(var.to_s.delete_prefix("@"))
14
15
  value = instance_variable_get(var)
@@ -16,13 +17,6 @@ module Allure
16
17
  end
17
18
  end
18
19
 
19
- # Convert object to json string
20
- # @param [Array<Object>] options
21
- # @return [String]
22
- def to_json(*options)
23
- as_json(*options).to_json(*options)
24
- end
25
-
26
20
  # Object comparator
27
21
  # @param [JSONable] other
28
22
  # @return [Booelan]
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Allure model attachment object
7
5
  class Attachment < JSONable
@@ -9,6 +7,8 @@ module Allure
9
7
  # @param [String] type attachment type, {Allure::ContentType}
10
8
  # @param [String] source attachment file name
11
9
  def initialize(name:, type:, source:)
10
+ super()
11
+
12
12
  @name = name
13
13
  @type = type
14
14
  @source = source
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Defects category
7
5
  class Category < JSONable
@@ -10,6 +8,8 @@ module Allure
10
8
  # @param [String, Regexp] message_regex
11
9
  # @param [String, Regexp] trace_regex
12
10
  def initialize(name:, matched_statuses: nil, message_regex: nil, trace_regex: nil)
11
+ super()
12
+
13
13
  @name = name
14
14
  @matched_statuses = matched_statuses
15
15
  @message_regex = message_regex
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Allure model executable item
7
5
  class ExecutableItem < JSONable
@@ -16,6 +14,8 @@ module Allure
16
14
  # @option options [Array<Allure::Attachment>] :attachments ([])
17
15
  # @option options [Array<Allure::Parameter>] :parameters ([])
18
16
  def initialize(**options)
17
+ super()
18
+
19
19
  @name = options[:name]
20
20
  @description = options[:description]
21
21
  @description_html = options[:description_html]
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Allure model label object
7
5
  class Label < JSONable
8
6
  def initialize(name, value)
7
+ super()
8
+
9
9
  @name = name
10
10
  @value = value
11
11
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Allure model link object
7
5
  class Link < JSONable
8
6
  def initialize(type, name, url)
7
+ super()
8
+
9
9
  @type = type
10
10
  @name = name
11
11
  @url = url
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Allure model parameter object
7
5
  class Parameter < JSONable
8
6
  def initialize(name, value)
7
+ super()
8
+
9
9
  @name = name
10
10
  @value = value
11
11
  end
@@ -9,6 +9,8 @@ module Allure
9
9
  # @param [String] message
10
10
  # @param [String] trace
11
11
  def initialize(known: false, muted: false, flaky: false, message: nil, trace: nil)
12
+ super()
13
+
12
14
  @known = known
13
15
  @muted = muted
14
16
  @flaky = flaky
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "jsonable"
4
-
5
3
  module Allure
6
4
  # Allure model step result container
7
5
  class TestResultContainer < JSONable
8
6
  def initialize(uuid: UUID.generate, name: "Unnamed")
7
+ super()
8
+
9
9
  @uuid = uuid
10
10
  @name = name
11
11
  @children = []
metadata CHANGED
@@ -1,36 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: allure-ruby-commons
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.13.6
4
+ version: 2.13.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrejs Cunskis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-03 00:00:00.000000000 Z
11
+ date: 2020-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: uuid
14
+ name: mime-types
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.3'
19
+ version: '3.3'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '4'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: '2.3'
29
+ version: '3.3'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '4'
27
33
  - !ruby/object:Gem::Dependency
28
- name: require_all
34
+ name: oj
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: '2'
39
+ version: '3.10'
34
40
  - - "<"
35
41
  - !ruby/object:Gem::Version
36
42
  version: '4'
@@ -40,44 +46,50 @@ dependencies:
40
46
  requirements:
41
47
  - - ">="
42
48
  - !ruby/object:Gem::Version
43
- version: '2'
49
+ version: '3.10'
44
50
  - - "<"
45
51
  - !ruby/object:Gem::Version
46
52
  version: '4'
47
53
  - !ruby/object:Gem::Dependency
48
- name: json
54
+ name: require_all
49
55
  requirement: !ruby/object:Gem::Requirement
50
56
  requirements:
51
57
  - - ">="
52
58
  - !ruby/object:Gem::Version
53
- version: '1.8'
59
+ version: '2'
54
60
  - - "<"
55
61
  - !ruby/object:Gem::Version
56
- version: '3'
62
+ version: '4'
57
63
  type: :runtime
58
64
  prerelease: false
59
65
  version_requirements: !ruby/object:Gem::Requirement
60
66
  requirements:
61
67
  - - ">="
62
68
  - !ruby/object:Gem::Version
63
- version: '1.8'
69
+ version: '2'
64
70
  - - "<"
65
71
  - !ruby/object:Gem::Version
66
- version: '3'
72
+ version: '4'
67
73
  - !ruby/object:Gem::Dependency
68
- name: mime-types
74
+ name: uuid
69
75
  requirement: !ruby/object:Gem::Requirement
70
76
  requirements:
71
- - - "~>"
77
+ - - ">="
72
78
  - !ruby/object:Gem::Version
73
- version: '3.3'
79
+ version: '2.3'
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: '3'
74
83
  type: :runtime
75
84
  prerelease: false
76
85
  version_requirements: !ruby/object:Gem::Requirement
77
86
  requirements:
78
- - - "~>"
87
+ - - ">="
79
88
  - !ruby/object:Gem::Version
80
- version: '3.3'
89
+ version: '2.3'
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: '3'
81
93
  description: Utilities allowing to implement allure result generation by other test
82
94
  frameworks
83
95
  email: andrejs.cunskis@gmail.com
@@ -90,12 +102,12 @@ files:
90
102
  - lib/allure_ruby_commons/allure_lifecycle.rb
91
103
  - lib/allure_ruby_commons/config.rb
92
104
  - lib/allure_ruby_commons/file_writer.rb
105
+ - lib/allure_ruby_commons/model/01_jsonable.rb
93
106
  - lib/allure_ruby_commons/model/attachment.rb
94
107
  - lib/allure_ruby_commons/model/category.rb
95
108
  - lib/allure_ruby_commons/model/content_type.rb
96
109
  - lib/allure_ruby_commons/model/executable_item.rb
97
110
  - lib/allure_ruby_commons/model/fixture_result.rb
98
- - lib/allure_ruby_commons/model/jsonable.rb
99
111
  - lib/allure_ruby_commons/model/label.rb
100
112
  - lib/allure_ruby_commons/model/link.rb
101
113
  - lib/allure_ruby_commons/model/parameter.rb
@@ -130,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
142
  - !ruby/object:Gem::Version
131
143
  version: '0'
132
144
  requirements: []
133
- rubygems_version: 3.1.2
145
+ rubygems_version: 3.1.4
134
146
  signing_key:
135
147
  specification_version: 4
136
148
  summary: Common library for allure results generation