Подтвердить что ты не робот

Использование gtest в jenkins

Я успешно запускаю свой unit test с помощью теста google в Jenkins, но я не знаю, как показать XML файл, сгенерированный gtest. Говорят, что gtest удовлетворяет формату JUnit, поэтому я установил следующее:

Снимок экрана

Но он заканчивается ошибками после здания.

Не найдено файлов отчета об испытаниях. Ошибка конфигурации?
Шаг сборки "Опубликовать отчет о результатах теста JUnit" изменил результат сборки на FAILURE
Закончено: FAILURE

4b9b3361

Ответ 1

Ответ на Фрейзер хорош, и вам нужна дополнительная обработка для преобразования XML файла gtest в правильный формат JTest.

Сначала вы запрашиваете gtest для вывода результата в XML, используя:

mygtestapp --gtest_output=xml:gtestresults.xml

Затем в script вам нужно добавить дополнительные элементы, чтобы правильно пропустить пропущенные тесты как таковые. Процессор Jenkin JTest требует, чтобы пропущенный тест содержал <skipped> а не просто установить статус на "notrun":

awk '{ if ($1 == "<testcase" && match($0, "notrun")) print substr($0,0,length($0)-2) "><skipped/></testcase>"; else print $0;}' gtestresults.xml > gtestresults-skipped.xml
mv gtestresults.xml gtestresults.off

Если вы запускаете это в пакетном файле Windows, поместите действие awk внутри файла, чтобы избежать проблем с кавычками. awk.progfile:

{ if ($1 == "<testcase" && match($0, "notrun")) print substr($0,0,length($0)-2) "><skipped/></testcase>"; else print $0;}

И добавьте в свой файл bat:

awk -f awk.progfile gtestresults.xml > gtestresults-skipped.xml

Наконец, вы указываете процессор JTest как шаг Post-Build для чтения преобразованного XML:

# Publish JUnit Test Result Report
Test Report XMLs: gtestresults-skipped.xml

Ответ 2

Выполняете ли вы свой тестовый исполняемый файл с правильными флагами (т.е. --gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH])?

Из вывода --help:

--gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH] Generate an XML report in the given directory or with the given file name. FILE_PATH defaults to test_details.xml.

Ответ 3

Ошибка на странице конфигурации Jenkins - это немного красная селедка.

По существу, происходит то, что XML файл тестового отчета не был сгенерирован заданием сборки. Итак, вы получите эту ошибку:

Recording test results
No test report files were found. Configuration error? 

Конечно, местоположение должно быть правильно настроено. Для этого см. Этот пост:

Как настроить тестовые отчеты на Jenkins CI, работающие с grails?

Итак, как исправить ошибку? Ключ должен изучить выход консоли, чтобы проверить, успешно ли выполнялись тесты. Скорее всего, они этого не сделали, и почему произошла ошибка.

После успешной проверки тестов, предполагая, что вы правильно настроили местоположение, вы должны быть в порядке.

Вы используете JUnit, поэтому это будет проект Java. Замечу здесь, если это может помочь другим, что мы запускаем Xcode. Тесты не выполнялись.

Похоже на вывод консоли Jenkins чуть выше ошибки, это примечание:

 note: RunUnitTests exited without running tests because TEST_AFTER_BUILD was set to NO.

Возвращение в Xcode и установка тэга UnitTests target Test After Build на YES сделали трюк. Это в разделе Unit Testing. Вы также можете установить флаг на уровне проекта и изменить цель на "Другое", установив значение $(inherited).

Ответ 4

Файл результатов не сохраняется в правильном месте, и плагин Jenkins не может его найти. После выполнения ваших тестов и создания XML файла вы храните его где угодно?

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

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

Ответ 5

Вот пакетная версия Windows для преобразования google-теста "notRun" в junit "пропущена" через пакет Windows. Я знаю, что есть более элегантные способы, но для этого требуется только пакет Windows и выполняет работу

rem convert gtest xml to junit compatible format (replace notRun by skipped)
IF EXIST  %INTEXTFILE% (
    IF EXIST %OUTTEXTFILE% (
        del %OUTTEXTFILE%
        waitfor fileSystemToDoItsStuff /t 1
    )
    FOR /f "tokens=1,* delims=¶" %%A IN ( '"type %INTEXTFILE%"') DO (
        ECHO."%%A" | findstr /C:"DISABLED_">nul & IF ERRORLEVEL 1 (
            SET modified=%%A
        ) ELSE (
            SET string=%%A
            SET modified=!string:/^>=^>^<skipped /^>^</testcase^>!
        )
        ECHO !modified!>> %OUTTEXTFILE%
    )
    del %INTEXTFILE%
    waitfor fileSystemToDoItsStuff /t 1
    move %OUTTEXTFILE% %INTEXTFILE%
)