Получение статистики тестирования DUnit Test с использованием FinalBuilder и AQTime

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

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

Возможно, решение должно иметь профиль 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;