从红宝石黄瓜中输出junit时处理片状测试(重试中断管道)

时间:2019-02-04 19:36:14

标签: ruby junit cucumber allure

我正在输出带有两个格式标志的黄瓜测试结果:

-格式化junit
--format AllureCucumber :: Formatter

第一个用于CICD阶段登机口(在一个环境中100%通过测试会触发部署到下一个环境)。第二个是输出html仪表板。

我另外使用了标记:--retry 2,因为我的一些测试不稳定(可能一次失败,但第二次通过)。

Allure格式可以很好地处理关系。问题在于,junit格式的xml将易碎测试视为失败。

如果所有测试最终都通过,是否有解决方法告诉xml注册0个失败?

我发现对此问题here的引用。
查看this threadthis thread和jUnit文档,我认为不会考虑重试/片状,我可能需要修补ruby-cucumber gem的格式化程序,以在遇到以下情况时忽略第一个失败:输出jUnit。

谢谢

1 个答案:

答案 0 :(得分:0)

我现在快速而又肮脏的补丁是修补jUnit格式化程序,使其仅增加失败计数,如下所示。这仅适用于一次重试。当我有更多时间时,我将查看是否存在一个可以检查的变量,以了解是否还有针对测试用例的重试。

def build_testcase(result, scenario_designation, output, test_case)
  duration = Cucumber::Formatter::ResultBuilder.new(result).test_case_duration
  @current_feature_data[:time] += duration
  classname = @current_feature_data[:feature].name
  name = scenario_designation

  @current_feature_data[:builder].testcase(:classname => classname, :name => name, :time => format('%.6f', duration)) do
    if !result.passed? && result.ok?(@config.strict)
      @current_feature_data[:builder].skipped
      @current_feature_data[:skipped] += 1
    elsif !result.passed? && !same_feature_as_previous_test_case?(test_case.feature)
      status = result.to_sym
      exception = get_backtrace_object(result)
      @current_feature_data[:builder].failure(:message => "#{status} #{name}", :type => status) do
        @current_feature_data[:builder].cdata! output
        @current_feature_data[:builder].cdata!(format_exception(exception)) if exception
      end
      @current_feature_data[:failures] += 1 
    end
    @current_feature_data[:builder].tag!('system-out') do
      @current_feature_data[:builder].cdata! strip_control_chars(@interceptedout.buffer_string)
    end
    @current_feature_data[:builder].tag!('system-err') do
      @current_feature_data[:builder].cdata! strip_control_chars(@interceptederr.buffer_string)
    end
  end
  @current_feature_data[:tests] += 1
end