diff --git a/qa/qa/support/formatters/test_stats_formatter.rb b/qa/qa/support/formatters/test_stats_formatter.rb index 0f76a924b10fbe5dcfb82787e36a5ab2a2037add..5c0daca3b06e69afd60f1e6f67ee32e957213642 100644 --- a/qa/qa/support/formatters/test_stats_formatter.rb +++ b/qa/qa/support/formatters/test_stats_formatter.rb @@ -57,19 +57,22 @@ def influxdb_token # @param [RSpec::Core::Example] example # @return [Hash] def test_stats(example) + file_path = example.metadata[:file_path].gsub('./qa/specs/features', '') + { name: 'test-stats', time: time, tags: { name: example.full_description, - file_path: example.metadata[:file_path].gsub('./qa/specs/features', ''), + file_path: file_path, status: example.execution_result.status, reliable: example.metadata.key?(:reliable).to_s, quarantined: example.metadata.key?(:quarantine).to_s, retried: ((example.metadata[:retry_attempts] || 0) > 0).to_s, job_name: job_name, merge_request: merge_request, - run_type: env('QA_RUN_TYPE') || run_type + run_type: env('QA_RUN_TYPE') || run_type, + stage: devops_stage(file_path) }, fields: { id: example.id, @@ -150,6 +153,14 @@ def env(name) ENV[name] end + + # Get spec devops stage + # + # @param [String] location + # @return [String, nil] + def devops_stage(file_path) + file_path.match(%r{(\d{1,2}_\w+)/})&.captures&.first + end end end end diff --git a/qa/spec/support/formatters/test_stats_formatter_spec.rb b/qa/spec/support/formatters/test_stats_formatter_spec.rb index fec7ec1c7c0eea46e28a5b4e0df091c171d8a36e..a14452debaac0babb8b7cd642067b43e6d33385d 100644 --- a/qa/spec/support/formatters/test_stats_formatter_spec.rb +++ b/qa/spec/support/formatters/test_stats_formatter_spec.rb @@ -18,6 +18,8 @@ let(:quarantined) { 'false' } let(:influx_client) { instance_double('InfluxDB2::Client', create_write_api: influx_write_api) } let(:influx_write_api) { instance_double('InfluxDB2::WriteApi', write: nil) } + let(:stage) { '1_manage' } + let(:file_path) { "./qa/specs/features/#{stage}/subfolder/some_spec.rb" } let(:influx_client_args) do { @@ -34,14 +36,15 @@ time: DateTime.strptime(ci_timestamp).to_time, tags: { name: 'stats export spec', - file_path: './spec/support/formatters/test_stats_formatter_spec.rb', + file_path: file_path.gsub('./qa/specs/features', ''), status: :passed, reliable: reliable, quarantined: quarantined, retried: "false", job_name: "test-job", merge_request: "false", - run_type: run_type + run_type: run_type, + stage: stage }, fields: { id: './spec/support/formatters/test_stats_formatter_spec.rb[1:1]', @@ -57,7 +60,9 @@ def run_spec(&spec) spec ||= -> { it('spec') {} } - describe_successfully('stats export', &spec) + describe_successfully('stats export', &spec).tap do |example_group| + example_group.examples.each { |ex| ex.metadata[:file_path] = file_path } + end send_stop_notification end