Mam Hudson jako serwer ciągłej integracji i chcę użyć opcji „Publikuj raport wyników testu JUnit”. Ale nie używam narzędzi xUnit do testowania, zamiast tego mam skrypty powłoki, które uruchamiają testy i zwracają wyniki w prostym formacie. Zastanawiam się nad stworzeniem skryptu, który przekształci te wyniki w format JUnit. Ciekawe, jak powinien wyglądać plik JUnit?
183
Odpowiedzi:
Podobne działanie zrobiłem kilka miesięcy temu i okazało się, że ten prosty format wystarczył, aby Hudson zaakceptował go jako protokół testowy:
To pytanie zawiera odpowiedzi z dalszymi szczegółami: Spec. dla danych wyjściowych JUnit XML
źródło
class
został odrzucony iclassname
działał tylko .<testsuite tests="(number of tests)">
ex.<testsuite tests="10">
.<testcase classname="foo.bar" name="ATest" />
spowoduje to umieszczenie klasy bar w pakiecie foo na Jenkins, dzięki czemu twoja kolekcja testowa będzie bardziej zorganizowana.Właśnie chwyciłem junit-4.xsd, z którym inni się połączyli, i użyłem narzędzia o nazwie XMLSpear do konwersji schematu na pusty plik XML z opcjami pokazanymi poniżej. Oto (lekko oczyszczony) wynik:
Niektóre z tych elementów mogą występować wiele razy:
testsuites
element, ponieważ tak działa XML, ale element może zawierać wieletestsuite
elementówtestsuites
.properties
element może mieć wieleproperty
dzieci.testsuite
element może mieć wieletestcase
dzieci.testcase
element może mieć wieleerror
,failure
,system-out
anisystem-err
dzieci.źródło
Rootelement
:testsuites
,Max recursive de...
:2
,Max Repeat factor
:2
,include optional elements
: (yes = zaznaczone)include optional attributes
: (yes = zaznaczone)Top odpowiedź na pytanie Anders Lindahl odnosi się do pliku XSD .
Osobiście uważam ten plik xsd za bardzo przydatny (nie pamiętam, jak go znalazłem). Wygląda to nieco mniej onieśmielająco i, o ile go użyłem, wszystkie elementy i atrybuty wydają się być rozpoznawane przez Jenkinsa (v1.451)Jedno tylko: przy dodawaniu wielu
<failure ...
elementów tylko jeden zachował się w Jenkins. Podczas tworzenia pliku xml łączę teraz wszystkie błędy w jednym.Aktualizacja 2016-11 Link jest teraz zepsuty. Lepszą alternatywą jest ta strona z cubic.org: format pliku raportowania JUnit XML , gdzie podjęto starania, aby dostarczyć sensownego udokumentowanego przykładu. Przykład i xsd są kopiowane poniżej, ale ich strona wygląda o wiele ładniej.
przykładowy plik XML JUnit
Plik JDnit XSD
źródło
Nie mogłem znaleźć żadnych dobrych informacji na ten temat, więc zrobiłem kilka prób i błędów. Jenkins (v1.585) rozpoznaje następujące atrybuty i pola (i tylko te).
(Zacząłem od tego przykładowego dokumentu XML i od tego momentu zacząłem pracować wstecz).
źródło
Podstawowa struktura Oto przykład pliku wyjściowego JUnit, pokazujący pominięcie i nieudany wynik, a także pojedynczy wynik.
Poniżej znajduje się udokumentowana struktura typowego raportu JUnit XML. Zauważ, że raport może zawierać 1 lub więcej zestawów testów. Każdy zestaw testowy ma zestaw właściwości (informacje o środowisku rejestrowania). Każdy zestaw testowy zawiera również 1 lub więcej przypadków testowych, a każdy przypadek testowy będzie zawierał węzeł pominięty, błędu lub błędu, jeśli test nie przejdzie pomyślnie. Jeśli przypadek testowy minął, nie będzie zawierał żadnych węzłów. Aby uzyskać więcej informacji o tym, które atrybuty są prawidłowe dla każdego węzła, zapoznaj się z następną sekcją „Schemat”.
źródło
Istnieje wiele schematów dla wyników „JUnit” i „xUnit”.
model/xsd
)Należy pamiętać, że istnieje kilka wersji schematu używanych przez wtyczkę Jenkins xunit (obecna najnowsza wersja
junit-10.xsd
dodaje obsługę formatu Erlang / OTP Junit).Niektóre frameworki testowe, a także wtyczki raportujące w stylu „xUnit” również używają własnego tajnego sosu do generowania raportów w stylu „xUnit”, mogą one nie używać określonego schematu (przeczytaj: próbują, ale narzędzia mogą nie sprawdzać poprawności w stosunku do dowolnego jeden schemat). Python unittests w Jenkins? daje szybkie porównanie kilku z tych bibliotek i niewielkie różnice między wygenerowanymi raportami xml.
źródło
Dobre odpowiedzi tutaj na temat używania Pythona: (istnieje wiele sposobów, aby to zrobić) Python unittests w Jenkins?
IMHO najlepszym sposobem jest napisanie testów w języku Python i zainstalowanie pytest (coś w stylu „yum install pytest”), aby zainstalować py.test. Następnie uruchom testy w następujący sposób: „py.test --junitxml results.xml test.py” . Możesz uruchomić dowolny niezabezpieczony skrypt Pythona i uzyskać wyniki jUnit xml.
https://docs.python.org/2.7/library/unittest.html
W konfiguracji kompilacji jenkins Akcje po kompilacji Dodaj akcję „Publikuj raport wyników testu JUnit” wraz z plikiem result.xml i innymi tworzonymi plikami wyników testu.
źródło
Postanowiłem opublikować nową odpowiedź, ponieważ niektóre istniejące odpowiedzi są nieaktualne lub niepełne.
Po pierwsze: nie ma nic takiego
JUnit XML Format Specification
, po prostu dlatego, że JUnit nie tworzy żadnego rodzaju raportów XML ani HTML.Samo generowanie raportów XML pochodzi z zadania Ant JUnit / Maven Surefire Plugin / Gradle (w zależności od tego, którego używasz do uruchamiania testów). Format raportu XML został po raz pierwszy wprowadzony przez Anta, a później dostosowany przez Maven (i Gradle).
Jeśli ktoś potrzebuje tylko oficjalnego formatu XML, to:
Mam nadzieję, że to komuś pomoże.
źródło
**/build/test-results/**/TEST-*.xml
. Dziękuję Ci bardzo!!!