Выполните нестабильные тесты при выводе junit из рубинового огурца (повторите попытку, сломав конвейер) - PullRequest
0 голосов
/ 04 февраля 2019

Я вывожу результаты теста на огурец с двумя флагами формата:

- формат junit
- формат AllureCucumber :: Formatter

Первый - для ворот этапа CICD (100%прохождение тестов в одной среде запускает развертывание в следующей).Во-вторых, вывести html панели мониторинга.

Я также использую флаг: --retry 2, потому что пара моих тестов не очень удобна (может провалиться один раз, но пройдет второй раз).

Формат Allure обрабатывает остатки изящно.Проблема заключается в том, что отформатированный в junit xml обрабатывает нестабильные тесты как сбои.

Существует ли обходной путь, позволяющий xml зарегистрировать 0 сбоев, если все тесты в конечном итоге пройдут?

Я нашел ссылку на эту проблему здесь .
Глядя на эту ветку , эту ветку и документы jUnit, я не думаю, что повторные попытки / нестабильность учитываются, и яможет потребоваться исправление форматера гема ruby-cucumber, чтобы он просто игнорировал первый сбой при выводе jUnit.

Спасибо

1 Ответ

0 голосов
/ 12 февраля 2019

Мое быстрое и грязное исправление на данный момент - это исправление форматера 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...