2010-02-21 2 views
10

У нас есть большой проект Delphi (1,5 миллиона строк кода), и мы переходим к использованию гибких процессов.Получение статистики тестирования DUnit с использованием FinalBuilder и AQTime

У нас уже есть непрерывная интеграционная среда (FinalBuilder), которую я обновил, чтобы включить в e-mail все тесты в модуле (dUnit) и кодовые метрики (CodeHealer) всем в нашей команде разработчиков. Наше подразделение по тестированию не очень велико, поэтому теперь я пытаюсь получить AQtime в миксе для некоторых результатов тестирования на каждой сборке.

Я использую задачу «Выполнять программу», чтобы запустить исполняемый файл блока, занести в журнал результаты и проанализировать файл после этого. Я намерен использовать задачу «Запустить сценарий» для запуска AQtime (через COM) и экспортировать результаты в XML, чтобы я мог проанализировать эти результаты.

Проблема, с которой я сталкиваюсь, заключается в том, что AQtime запускает исполняемый модуль unit test, я теряю возможность напрямую контролировать исполняемый файл блока. Я бы хотел, чтобы FinalBuilder проанализировал результаты обеих задач. Кто-нибудь знает, как получить доступ к результатам dUnit, когда он вызывается из AQtime?

ответ

7

Мы стекающий этот же путь, и мы не запускать DUnit тест из AQTime,

Вместо этого мы создаем и запускаем наши тесты Dunit с помощью FinalBuilder.

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

Обновление: Последнее обновление FinalBuilder 7.0 теперь поддерживает DUnit. Это через собственный XMLTestrunner.pas, который находится после каталога FinalBuilder после установки. Этот бегун выводит результаты теста в том же формате, что и NUnit. Затем он отлично интегрируется в FinalBuilder Server.

+0

Спасибо, Роберт. Версия dUnit, которая была в нашей сборке, не имела XMLTestRunner. Я загрузил dUnit 9.3 из sourceforge и схватил XMLTestRunner из папки Contrib. Делает все, что я хотел, чтобы это делалось. – Catharz

+1

Catharz, вы должны принять ответ, если вам ответили. –

2

Вы как-то описываете установку, в которую мы медленно развиваемся.

  • DUnit тесты составляются как консольные приложения с помощью TTextTestListener определено в блоке TextTestRunner.
  • CI-сервер - это cmd-скрипт, который строит все проекты и выполняет все тесты.
  • Результаты тестов передаются в файл.

Раствор может быть, чтобы иметь AQTime профиль этих консольных приложений в то же время быть в состоянии трубы результаты в файл, который может быть разобранной потом ?!

Другого решения может быть реализовать свой собственный объект TestListener и есть этот объект писать TestResults в журнал события, непосредственно в лог-файл, базу данных или там, где вам нравится, и есть это подобрано FinalBuilder.

Вместо того, чтобы иметь что-то вроде этого в файле проекта

Application.Initialize; 
    if System.IsConsole then TextTestRunner.RunRegisteredTests 
    else GUITestRunner.RunRegisteredTests; 

он стал бы что-то вроде этого

Application.Initialize; 
    if System.IsConsole then OurEventLogTestRunner.RunRegisteredTests 
    else GUITestRunner.RunRegisteredTests; 
+0

Спасибо, что ответ Lieven. Я попытался получить AQtime для передачи результатов исполняемого файла dUnit в файл, но это не сработало. Я также посмотрел на реализацию моего собственного TestListener, который выглядел довольно легко. Но после просмотра XMLTestRunner из dUnit 9.3 это выглядело еще проще. – Catharz

+0

Кроме того, я предлагаю вам изменить свой код на: TextTestRunner.RunRegisteredTests (rxbHaltOnFailures) , чтобы вы получили код ошибки <> 0, когда какой-либо тест не прошел. Отлично подходит для непрерывной интеграции. – marius

+0

@marius: thx, я этого не знал. Прямо сейчас, мы делаем поиск grep в результатах теста, чтобы найти количество ошибок/сбоев. –