From 39ff72084199832cd21814dc5b98397fdc54885d Mon Sep 17 00:00:00 2001 From: Andrey Marchenko Date: Fri, 19 Apr 2024 16:52:19 +0200 Subject: [PATCH] trying out approaches for test skipping support in cucumber --- lib/datadog/ci/contrib/cucumber/formatter.rb | 17 ++++++++++++++--- .../ci/contrib/cucumber/instrumentation_spec.rb | 15 +++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/lib/datadog/ci/contrib/cucumber/formatter.rb b/lib/datadog/ci/contrib/cucumber/formatter.rb index a30d9c0e..6069a798 100644 --- a/lib/datadog/ci/contrib/cucumber/formatter.rb +++ b/lib/datadog/ci/contrib/cucumber/formatter.rb @@ -2,6 +2,7 @@ require_relative "../../ext/test" require_relative "../../git/local_repository" +require_relative "../../utils/test_run" require_relative "ext" module Datadog @@ -55,6 +56,7 @@ def on_test_run_finished(event) def on_test_case_started(event) test_suite_name = test_suite_name(event.test_case) + # @type var tags: Hash[String, String] tags = { CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK, CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Cucumber::Integration.version.to_s, @@ -62,6 +64,10 @@ def on_test_case_started(event) CI::Ext::Test::TAG_SOURCE_START => event.test_case.location.line.to_s } + if (parameters = extract_parameters_hash(event.test_case)) + tags[CI::Ext::Test::TAG_PARAMETERS] = Utils::TestRun.test_parameters(arguments: parameters) + end + start_test_suite(test_suite_name) unless same_test_suite_as_current?(test_suite_name) test_span = CI.start_test( @@ -70,9 +76,10 @@ def on_test_case_started(event) tags: tags, service: configuration[:service_name] ) - - if (parameters = extract_parameters_hash(event.test_case)) - test_span&.set_parameters(parameters) + if test_span&.skipped_by_itr? + p "WANT TO SKIP TEST #{test_span}" + p ::Cucumber::Core::Ast::Tag.new("", "_dd_itr_skip") + event.test_case.tags << ::Cucumber::Core::Ast::Tag.new("", "@_dd_itr_skip") end end @@ -80,6 +87,10 @@ def on_test_case_finished(event) test_span = CI.active_test return if test_span.nil? + if test_span.skipped_by_itr? + p "DID WE SKIP TEST? answer: #{event.result}" + end + finish_span(test_span, event.result) @failed_tests_count += 1 if test_span.failed? end diff --git a/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb b/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb index 91cea433..e49f9263 100644 --- a/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb +++ b/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb @@ -15,6 +15,7 @@ let(:itr_enabled) { true } let(:code_coverage_enabled) { true } + let(:tests_skipping_enabled) { true } end let(:cucumber_8_or_above) { Gem::Version.new("8.0.0") <= Datadog::CI::Contrib::Cucumber::Integration.version } @@ -206,6 +207,20 @@ ) end end + + context "skipping a test" do + let(:itr_skippable_tests) do + Set.new([ + "Datadog integration at spec/datadog/ci/contrib/cucumber/features/passing.feature.cucumber scenario." + ]) + end + + it "skips the test" do + expect(test_spans).to have(4).items + p test_spans.map { |span| span.get_tag("test.status") } + # expect(test_spans).to all have_skip_status + end + end end context "executing a failing test suite" do