2010-02-21 15 views
10

Mamy duży projekt Delphi (1,5 miliona linii kodu) i przechodzimy do używania procesów zwinnych.Uzyskiwanie statystyk DUnit Test Coverage przy użyciu FinalBuilder i AQTime

Mamy już ciągłe środowisko integracyjne (FinalBuilder), które zaktualizowałem, aby uwzględnić testy jednostkowe (dUnit) i metryki kodu (CodeHealer) w wiadomościach e-mail dla wszystkich w naszym zespole programistycznym. Nasz zasięg testów jednostkowych nie jest świetny, więc teraz próbuję uzyskać AQtime w miksie dla niektórych wyników pokrycia testowego dla każdej wersji.

Używam zadania "Wykonaj program", aby uruchomić plik wykonywalny testu urządzenia, zapisz wyniki i przeanalizuj plik później. Zamierzam użyć zadania "Uruchom skrypt", aby uruchomić AQtime (przez COM) i wyeksportować wyniki do XML, aby móc analizować te wyniki.

Problem, który mam z AQtime uruchamiającym plik wykonywalny testu jednostkowego, tracę możliwość bezpośredniego monitorowania pliku wykonywalnego testu jednostkowego. Chciałbym, aby FinalBuilder przeanalizował wyniki obu zadań. Czy ktokolwiek wie, jak uzyskać dostęp do wyników dUnit, gdy jest wywoływany z AQtime?

Odpowiedz

7

wpadliśmy w dół tą drogą, a my nie działają DUNIT test z AQTime,

Zamiast tego budujemy i uruchamiamy nasze testy Dunit za pomocą FinalBuilder.

W naszych testach jednostkowych używamy XmlTestRunner, wtedy możemy dowiedzieć się, czy test nie powiedzie się lub nie bardzo łatwo za pomocą zapytania XPath na wynikowym pliku XML.

Aktualizacja: Ostatnia aktualizacja FinalBuilder 7.0 obsługuje teraz DUnit. Jest to poprzez własną XMLTestrunner.pas, która znajduje się w katalogu FinalBuilder po instalacji. Ta aplikacja wyświetla wyniki testu w tym samym formacie co NUnit. Następnie bardzo dobrze integruje się z serwerem FinalBuilder.

+0

Dzięki Robert. Wersja dUnit, która była w naszym kompilacji, nie zawierała XMLTestRunner. Pobrałem dUnit 9.3 z sourceforge i pobrałem XMLTestRunner z folderu Contrib. Czy wszystko, co chciałem zrobić. – Catharz

+1

Catharz, powinieneś zaakceptować odpowiedź, jeśli otrzymałeś odpowiedź. –

2

W pewnym sensie opisujesz konfigurację, do której powoli ewoluujemy.

  • DUNIT testów zestawiono w zastosowaniach konsoli stosując TTextTestListener zdefiniowany w jednostce TextTestRunner.
  • Serwer CI to skrypt cmd, który buduje wszystkie projekty i wykonuje wszystkie testy.
  • Wyniki testów są przekierowywane do pliku.

Rozwiązanie może być posiadanie AQTime profil tych aplikacji konsolowych, a jednocześnie móc rury wyniki do pliku, który może być przetwarzany potem ?!

Innym rozwiązaniem może być wdrożyć swój własny obiekt TestListener i mają ten przedmiot pisać tego testu w dzienniku zdarzeń, bezpośrednio do pliku dziennika, bazy danych lub gdziekolwiek chcesz i mieć ten odebrany przez FinalBuilder.

Zamiast coś takiego w pliku projektu

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

stałoby się coś takiego

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

Dzięki za odpowiedź Lieven. Próbowałem uzyskać AQtime, aby przesłać wyniki pliku wykonywalnego dUnit do pliku, ale to nie zadziałało. Spróbowałem także wdrożyć mój własny testListener, który wyglądał całkiem łatwo. Ale patrząc na XMLTestRunner z dUnit 9.3, wyglądało to jeszcze łatwiej. – Catharz

+0

Sugeruję również, aby zmienić kod na: TextTestRunner.RunRegisteredTests (rxbHaltOnFailures) , aby uzyskać kod błędu <> 0, gdy niektóre testy zakończą się niepowodzeniem. Doskonały do ​​ciągłej integracji. – marius

+0

@marius: thx, nie wiedziałem o tym. W tej chwili wykonujemy wyszukiwanie grep w wynikach testu, aby znaleźć liczbę błędów/niepowodzeń. –

Powiązane problemy