我正在输出带有两个格式标志的黄瓜测试结果:
-格式化junit
--format AllureCucumber :: Formatter
第一个用于CICD阶段登机口(在一个环境中100%通过测试会触发部署到下一个环境)。第二个是输出html仪表板。
我另外使用了标记:--retry 2
,因为我的一些测试不稳定(可能一次失败,但第二次通过)。
Allure格式可以很好地处理关系。问题在于,junit格式的xml将易碎测试视为失败。
如果所有测试最终都通过,是否有解决方法告诉xml注册0个失败?
我发现对此问题here的引用。
查看this thread,this thread和jUnit文档,我认为不会考虑重试/片状,我可能需要修补ruby-cucumber gem的格式化程序,以在遇到以下情况时忽略第一个失败:输出jUnit。
谢谢
答案 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