Не удалось заставить hudson проанализировать тестовый вывод JUnit XML

StackOverflow https://stackoverflow.com/questions/428553

  •  06-07-2019
  •  | 
  •  

Вопрос

Редактировать:Эта проблема была исправлена Google в gtest 1.4.0; смотрите исходное сообщение об ошибке для получения дополнительной информации.

Недавно я перешел на gtest для своей платформы тестирования C ++, и одна из ее замечательных функций, которую я в настоящее время не могу использовать, - это возможность генерировать XML-отчеты о тестировании в стиле JUnit, которые затем могут быть прочитаны нашим сервером сборки hudson.

Все XML-выходные данные, сгенерированные набором тестов gtest, выглядят корректно:

<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="370" failures="0" disabled="0" errors="0" time="45.61" name="AllTests">
    <testsuite name="application" tests="7" failures="0" disabled="0" errors="0" time="8.953">
        <testcase name="zero_tasks_on_bootup" status="run" time="0" classname="application" />
...etc.
    </testsuite>
</testsuite>

Я также попытался добавить задачу JUnitReport в свой скрипт сборки ant, который работает нормально и генерирует XML следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="370" failures="0" disabled="0" errors="0" time="45.61" name="AllTests">
    <testsuite name="application" tests="7" failures="0" disabled="0" errors="0" time="8.953">
        <testcase name="zero_tasks_on_bootup" status="run" time="0" classname="application" />
    ...etc.
    </testsuite>
 </testsuite>

Проблема в том, что всякий раз, когда я говорю ant опубликовать результаты теста JUnit, а затем указываю либо на необработанный XML-результат теста, либо на скомпилированный результат, сгенерированный в задаче ant JUnitReport, хадсон всегда жалуется на то, что не находит там результатов теста.

Я не специалист по Java, поэтому я не могу сказать, что здесь происходит, и я не могу найти пример того, как должен выглядеть JUnit XML.Кто-нибудь может помочь мне указать правильное направление?

Это было полезно?

Решение 2

Редактировать:Google test исправил эту проблему, которая включена в версию gtest 1.4.0. Смотрите исходное сообщение об ошибке для получения дополнительной информации.

Бах!Я, наконец, нашел причину этой проблемы - это потому, что gtest создает один гигантский XML-файл для всех результатов тестирования, а hudson ожидает один XML-отчет о тестировании для каждого класса.Я написал сценарий perl в качестве обходного пути для решения этой проблемы.Чтобы использовать его, вы должны создать target в своем ant xml-скрипте, который выглядит примерно так:

<target name="runtests">
  <exec executable="wherever/${ant.project.name}Test" failonerror="false" dir="tests">
    <arg value="--gtest_output=xml:${build.dir}\reports\${ant.project.name}.xml"/>
  </exec>
  <!-- Workaround for broken gtest output -->
  <mkdir dir="${build.dir}/reports/output"/>
  <exec executable="perl" failonerror="false" dir="tests">
  <arg value="gtest-hudson.pl"/>
    <arg value="${build.dir}/reports/${ant.project.name}.xml"/>
    <arg value="${build.dir}/reports/output"/>
  </exec>
</target>

По какой-то причине gtest также не нравится неправильный стиль косых черт, передаваемый ему из ant, поэтому я создал свой exec только для Windows, поскольку мой hudson запущен на сервере Windows.Очевидно, измените на '/' для unix.

Я также отправил запрос по этому поводу на страницу gtest, а также один на отслеживание проблем Хадсона, так что, надеюсь, одна из двух команд разберется с этой проблемой, поскольку у меня нет достаточно времени, чтобы вмешаться и сделать патч самому....хотя, если это не будет исправлено в ближайшем будущем, возможно, мне просто придется это сделать.;)

Другие советы

Вот как я это делаю:

    <target name="junit" depends="compile-tests" description="run all unit tests">
      <mkdir dir="${reports}"/>
      <junit haltonfailure="false">
         <jvmarg value="-Xms128m"/>
         <jvmarg value="-Xmx128m"/>
         <classpath>
            <path refid="project.classpath"/>
         </classpath>
         <formatter type="xml"/>
         <batchtest fork="yes" todir="${reports}">
            <fileset dir="${test}/classes">
                <include name="**/*Test*.class"/>
            </fileset>
         </batchtest>
      </junit>
  </target>

  <target name="generate-reports" depends="junit" description="create JUnit test HTML reports">
      <mkdir dir="${reports}"/>
      <junitreport todir="${reports}">
          <fileset dir="${reports}">
              <include name="TEST-*.xml"/>
          </fileset>
          <report format="frames" todir="${reports}"/>
      </junitreport>
  </target>

Я почти уверен, что это не проблема с синтаксическим анализом XML, а скорее проблема с поиском XML-файлов.Если вы используете относительный путь в конфигурации Hudson, убедитесь, что вам ясно, к какому каталогу он относится (кажется, я помню, что при определенных обстоятельствах это неочевидно).

Что касается примеров того, как должны выглядеть XML-файлы JUnit, то удачи вам с этим.Это нигде точно не указано.Разные инструменты имеют разные диалекты.Тем не менее, Хадсон проделывает хорошую работу по распознаванию их всех.Я полагаю, что именно разработчики JUnitReport первыми внедрили формат XML, так что если вы используете его, это примерно то же каноническое, что и вы собираетесь получить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top