diff --git a/lib/allure-cucumber.rb b/lib/allure-cucumber.rb index e26d8df..09229eb 100644 --- a/lib/allure-cucumber.rb +++ b/lib/allure-cucumber.rb @@ -5,18 +5,34 @@ require 'allure-cucumber/formatter' module AllureCucumber - + module Config class << self - attr_accessor :output_dir, :clean_dir - - DEFAULT_OUTPUT_DIR = 'gen/allure-results' - + + attr_accessor :output_dir, :clean_dir, :tms_prefix, :issue_prefix, :severity_prefix + + DEFAULT_OUTPUT_DIR = 'gen/allure-results' + DEFAULT_TMS_PREFIX = '@TMS:' + DEFAULT_ISSUE_PREFIX = '@ISSUE:' + DEFAULT_SEVERITY_PREFIX = '@SEVERITY:' + def output_dir @output_dir || DEFAULT_OUTPUT_DIR end - - end + + def tms_prefix + @tms_prefix || DEFAULT_TMS_PREFIX + end + + def issue_prefix + @issue_prefix || DEFAULT_ISSUE_PREFIX + end + + def severity_prefix + @severity_prefix || DEFAULT_SEVERITY_PREFIX + end + + end end class << self @@ -27,5 +43,5 @@ def configure(&block) end end end - + end diff --git a/lib/allure-cucumber/formatter.rb b/lib/allure-cucumber/formatter.rb index 1fbcae3..d1eb45c 100644 --- a/lib/allure-cucumber/formatter.rb +++ b/lib/allure-cucumber/formatter.rb @@ -8,9 +8,9 @@ class Formatter include AllureCucumber::DSL TEST_HOOK_NAMES_TO_IGNORE = ['Before hook', 'After hook'] - + ALLOWED_SEVERITIES = ['blocker', 'critical', 'normal', 'minor', 'trivial'] POSSIBLE_STATUSES = ['passed', 'failed', 'pending', 'skipped', 'undefined'] - + def initialize(step_mother, io, options) dir = Pathname.new(AllureCucumber::Config.output_dir) FileUtils.rm_rf(dir) unless AllureCucumber::Config.clean_dir == false @@ -18,6 +18,7 @@ def initialize(step_mother, io, options) @tracker = AllureCucumber::FeatureTracker.create @deferred_before_test_steps = [] @deferred_after_test_steps = [] + @scenario_tags = {} end # Start the test suite @@ -37,6 +38,23 @@ def scenario_name(keyword, name, *args) @scenario_outline ? @scenario_outline_name = scenario_name : @tracker.scenario_name = scenario_name end + # Analyze Cucumber Scenario Tags + def after_tags(tags) + tags.each do |tag| + if AllureCucumber::Config.tms_prefix && tag.name.include?(AllureCucumber::Config.tms_prefix) + @scenario_tags[:testId] = remove_tag_prefix(tag.name, AllureCucumber::Config.tms_prefix) + end + + if tag.name.include?(AllureCucumber::Config.issue_prefix) + @scenario_tags[:issue] = remove_tag_prefix(tag.name, AllureCucumber::Config.issue_prefix) + end + + if tag.name.include?(AllureCucumber::Config.severity_prefix) && ALLOWED_SEVERITIES.include?(trim_tag(tag.name, AllureCucumber::Config.severity_prefix)) + @scenario_tags[:severity] = remove_tag_prefix(tag.name, AllureCucumber::Config.severity_prefix).downcase.to_sym + end + end + end + def before_examples(*args) @header_row = true @row_count = 0 @@ -124,6 +142,10 @@ def after_multiline_arg(multiline_arg) private + def remove_tag_prefix(tag, prefix) + tag.gsub(prefix,'') + end + def step_status(result) POSSIBLE_STATUSES.each do |status| return cucumber_status_to_allure_status(status) if result.send("#{status}?") @@ -160,7 +182,9 @@ def attach_multiline_arg_to_file(multiline_arg) def start_test if @tracker.scenario_name - AllureRubyAdaptorApi::Builder.start_test(@tracker.feature_name, @tracker.scenario_name, :feature => @tracker.feature_name, :story => @tracker.scenario_name) + @scenario_tags[:feature] = @tracker.feature_name + @scenario_tags[:story] = @tracker.scenario_name + AllureRubyAdaptorApi::Builder.start_test(@tracker.feature_name, @tracker.scenario_name, @scenario_tags) post_deferred_steps end end @@ -187,6 +211,7 @@ def stop_test(result) @tracker.scenario_name = nil @deferred_before_test_steps = [] @deferred_after_test_steps = [] + @scenario_tags = {} end end