Невозможно получить Hudson для анализа выходных XML-данных теста JUnit - PullRequest
5 голосов
/ 09 января 2009

РЕДАКТИРОВАТЬ : эта проблема была исправлена ​​google в gtest 1.4.0; см. Оригинальный отчет об ошибке для получения дополнительной информации.

Я недавно переключился на gtest для своей среды тестирования C ++, и одна из его замечательных возможностей, которую я в настоящее время не могу использовать, - это возможность генерировать отчеты по тестам в стиле JUnit XML, которые затем могут быть прочитаны нашим 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, hudson всегда жалуется на отсутствие результатов теста. .

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

Ответы [ 3 ]

6 голосов
/ 09 января 2009

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

    <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>
4 голосов
/ 10 февраля 2009

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

Ба! Я наконец-то нашел причину этой проблемы - это потому, что gtest создает один гигантский XML-файл для всех результатов теста, а hudson ожидает один отчет XML-теста на класс. Я написал скрипт perl в качестве обходного пути для этой проблемы . Чтобы использовать его, вы должны сделать цель в своем скрипте 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 только для окон, так как мой hudson работает на сервере Windows. Измените на '/' для unix, очевидно.

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

0 голосов
/ 14 января 2009

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

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

...