C ++ непрерывная интеграция с показателями производительности - PullRequest
3 голосов
/ 21 декабря 2008

Я хочу настроить среду непрерывной интеграции и тестирования для моего проекта C ++ с открытым исходным кодом. Желаемые функции:

1. check out the source code
2. run all the unit and other tests
3. run performance tests (these measure the software quality - for example how long does it take the system to complete the test)
4. produce a report based on 3. and 4. daily
5. archive the reports for future reference

Чтобы реализовать это, какую среду тестирования и какой процесс непрерывной интеграции вы бы порекомендовали? Сейчас я склоняюсь к Google Test Framework (мне известны некоторые сравнения платформ модульных тестов, которые обсуждались в других вопросах ) для тестов и Cruisecontrol для непрерывной интеграции. Но я не знаю, позволяет ли Cruisecontrol легко интегрировать показатели производительности.

Редактировать : Чтобы ответить Вильгельмтеллу, код должен работать как с Windows, так и с Linux.

Ответы [ 7 ]

5 голосов
/ 14 июня 2011

Я написал статью, которая может вам помочь. Он описывает непрерывную интеграцию кода C ++ с использованием googletest и hudson, используя gcov для показателей покрытия кода. http://meekrosoft.wordpress.com/2010/06/02/continuous-code-coverage-with-gcc-googletest-and-hudson/

2 голосов
/ 21 декабря 2008

Мы используем комбинацию NAnt , Круиз-контроль .NET , bjam и CppUnit , и все это работает довольно хорошо.

Однако только недавно мы перешли с Windows на Windows и Linux. В настоящее время только bjam и CppUnit используются на обеих платформах.

Наши скрипты NAnt не будут проблемой для переноса; NAnt отлично работает под моно . CC.NET может быть и не так - мы не пошли по этому пути, но не так много документации, чтобы запустить его под моно / Apache ...

Мы рассматриваем замену CC.NET на Hudson ; Это очень перспективная система. Круиз-контроль тоже очень хорошо.

Мы также рассмотрели возможность перехода с CppUnit на другой тестовый фреймворк, но сейчас он отлично работает. GoogleTest (особенно с новой фиктивной библиотекой), UnitTest ++ и Boost Test - все исследуются.

Так что я знаю, что это может быть не окончательный ответ, но, надеюсь, там есть что-то полезное для вас!

2 голосов
/ 21 декабря 2008

Сегодня я использую CruiseControl и UnitTest ++ именно для этой задачи.

UnitTest ++ действительно хорош, хотя иногда я чувствую себя ограниченным. По крайней мере, это в 10 раз лучше, чем cppunit. До сих пор не пробовал каркас тестирования Google, это будет для моего следующего проекта.

Я был крайне разочарован CruiseControl. Есть несколько ошибок и вопросов, задаваемых в списке рассылки, так и не получили ответа. Многие из «функций» по умолчанию для управления выполнением программы и ведением журнала не удовлетворяли. Нам пришлось написать собственное создание отчетов, наши собственные записи stdout и stderr, нашу собственную рассылку статуса. CruiseControl не так уж и много, кроме выполнения регулярных тестов и их сбора на центральном веб-сервере.

2 голосов
/ 21 декабря 2008

Ваш вопрос двоякий. Как вы сами указали, выбор библиотеки для юнит-тестирования - это один вопрос. Да, я думаю, что GoogleTest просто отлично. Мне нравится это, потому что это чувствует себя легким с точки зрения использования. UnitTest ++ еще больше. Неважно, какой вы выберете.

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

Если ваши отчеты не должны быть в HTML, XML, LaTeX или другом необычном формате, я бы использовал Bash. Тогда вы можете просто time команды, sed выход из двоичного файла unittest и так далее. Тем не менее, вы все равно можете выбрать Bash для более сложных форматов, если вы действительно любите Bash и привыкли к нему. Например, вы можете написать шаблон HTML для отчета с использованием заполнителей, а затем заменить заполнители данными.

Если ваши задачи более сложные, например, потому что вы хотите, чтобы скрипт запускался и на других платформах, то я бы, вероятно, использовал Ruby или Python. В Ruby, например, вы можете использовать Markaby для вывода вашего HTML. В любом случае, Bash, Ruby или Python отлично подходят для обработки текста или для этой задачи в целом. Я думаю, что вы могли бы создать небольшой сценарий, который бы выполнил эту работу в кратчайшие сроки.

Что приятно, если вы используете скрипт, то вы также можете прикрепить его как хук практически к любой современной системе контроля версий. Например, вы можете настроить хук Subversion или Git так, чтобы скрипт запускался при любом коммите.

1 голос
/ 22 декабря 2008

Вы также можете задать этот вопрос в списке рассылки пользователей CruiseControl , чтобы узнать, делают ли другие то же самое.

Но я не знаю, круизконтроль позволяет легко интегрировать производительность метрики.

Существует два способа обработки показателей производительности с помощью CruiseControl:

  1. Если у вас есть данные XML, вы можете объединить их с файлом журнала, а затем интегрировать их в электронную почту и веб-страницы с некоторыми .xsl или
  2. Если у вас есть html-отчет, вы можете использовать издателя артефактов, чтобы сделать его доступным через веб-интерфейс, используя издателя артефактов .

Я немного предвзят, потому что я работаю над проектом CruiseControl, но есть несколько других инструментов CI, которые также будут работать.

1 голос
/ 21 декабря 2008

Я предпочитаю CruiseControl.Net с cppUnit, но у меня нет никакого опыта или знаний о тестовой среде Google. Однако для простой и бесплатной непрерывной интеграции нельзя превзойти CruiseControl.NET, особенно со всеми инфраструктурами тестирования, системами сборки и другими дополнениями, которые он поддерживает.

0 голосов
/ 05 марта 2009

Мы используем UnitTest ++ и Hudson.

Я считаю Hudson очень простым в использовании и чрезвычайно настраиваемым, с множеством плагинов.

...