Хадсон, C++ и UnitTest++
-
03-07-2019 - |
Вопрос
Кто-нибудь использовал Хадсон в качестве сервера непрерывной интеграции для проекта C++ с использованием Юниттест++ как тестовая библиотека?
Как именно ты его настроил?
Я знаю, что раньше было несколько вопросов по непрерывной интеграции, но я надеюсь, что этот вопрос имеет более узкую сферу.
РЕДАКТИРОВАТЬ:Я немного уточню, что я ищу.У меня уже настроена сборка на сбой при сбое модульных тестов.Я ищу что-то вроде поддержки JUnit от Hudson.UnitTest++ может создавать отчеты XML (см. здесь).Итак, возможно, если кто-то знает, как перевести эти отчеты для совместимости с JUnit, Хадсон знает, как их съесть?
Решение
Мы активно этим занимаемся у меня на рабочем месте.
В настоящее время мы используем бесплатный программный проект для:
- Проверяйте наш репозиторий Subversion на наличие обновлений каждые 15 минут.
- Вызов пакетного файла Windows для очистки и создания файла решения.
- Файлы проекта создают и запускают модульные тесты как событие после сборки.
- Ошибки модульного теста возвращаются тестом
main()
, таким образом, рассматривается как ошибки сборки
Я также протестировал конфигурацию, которая использует XmlTestReporter, включенный в UnitTest++, для создания выходных файлов.А плагин xUnit изначально поддерживает этот вывод, а также любой другой вывод, который вы можете преобразовать, хотя мне пришлось изменить файл XSL, поставляемый с ним в версии 0.1.3, чтобы длительность записывалась в историю тестов.
Нам хотелось бы многое улучшить в нашей интеграции;журналы сборки длинные, их сложно анализировать без раскраски, выделения и т. д., но до сих пор это приносило нам пользу.
Другие советы
Я проверил xUnit плагин, как предложил Патрик Джонмейер в принятом ответе.Для полноты картины вот код драйвера:
#include <fstream>
#include "UnitTest++.h"
#include "XmlTestReporter.h"
int main( int argc, char *argc[] ) {
std::ofstream f("file.xml");
UnitTest::XmlTestReporter reporter(f);
return UnitTest::RunAllTests(reporter, UnitTest::Test::GetTestList(), NULL, 0);
}
В конфигурации Hudson установите флажок «Опубликовать отчет о результатах инструментов тестирования» и укажите его "file.xml"
Теперь у Хадсона есть Плагин CppUnit это может помочь.
Задолго до того, как я начал использовать Hudson, я работал над проектом C++, в котором мы использовали cpp-unit-lite и CruiseControl.
Мы изменили Cpp-unit-lite для создания JUnit-подобных файлов отчетов XML, а CruiseControl взял файлы отчетов XML.
Вы можете сделать то же самое для UnitTest++, и Hudson заберет файлы отчетов.
Однако это кажется большой работой.Взгляните на плагин сюжета для Hudson.Вы можете использовать скрипт для извлечения количества неудачных/проходящих тестов из выходных данных UnitTest++ и использовать плагин графика для построения простого графика прохождения/неудачных тестов для каждой сборки.
Не так хорошо, как встроенный отчет о модульном тестировании, но вы можете быстро начать работать.
Я использую Hudson с выводом CppUnit и xml.XML переводится с помощью xslt в вывод JUnit, например.Сайт CppUnit предоставляет xslt, который преобразует выходные данные CppUnit в выходные данные JUnit.Я немного взломал его, чтобы получить больше деталей, например:
- пространства имен как пакеты
- время исполнения
вы можете преобразовать вывод XML, чтобы получить следующее:
<?xml version="1.0" encoding="UTF-8"?>
<testsuite>
<testcase name="my test name"
classname="Package1.Package2.TestClass"
time="0.25">
<error type="error"/>
</testcase>
....
</testsuite>
В случае успеха:просто удали субтег
С уважением
Мы использовали аналогичный подход в моем офисе, за исключением того, что использовали cxxtest вместо UnitTest++, и теперь мы находимся в процессе перехода на значительно превосходящую (по моему мнению) инфраструктуру gtest от Google.
С помощью cxxtest мы сделали нечто похожее на то, что сделал Патрик Дж.Было предложено добавить этап сборки, который запускал бы программу набора тестов через ant и вызывал бы сбой сборки в случае сбоя каких-либо тестов.Недостаток этого подхода заключается в том, что если сборка завершается неудачно из-за результата теста, вам приходится просматривать выходные данные консоли, чтобы выяснить, что пошло не так.Также вы теряете изящные диаграммы, которые Hudson может генерировать, если ваша тестовая среда может выводить совместимый с junit XML.
Одним из факторов, побуждающих перейти на gtest, является то, что он генерирует Junit XML, поэтому теоретически Hudson может анализировать результаты тестов и публиковать их более разумным образом.В любом случае, не похоже, что UnitTest++ генерирует что-то подобное (поправьте меня, если я ошибаюсь), так что это может быть спорным вопросом, но, по крайней мере, интеграция его в ваш процесс сборки обеспечит запуск тестов во время строит.