|
| 1 | +\chapter{A \textit{Reporter} komponens} |
| 2 | + |
| 3 | +A \textit{Reporter} szoftver komponens felelős a teszt keretrendszer kimenetét különböző formátumokra hozni. |
| 4 | +Kiemelendő, hogy ez a komponens egy külön parancsosori futtatható a teszt keretrendszertől. Ezt az architektúrális |
| 5 | +döntés a \emph{Unix filozófia} alapján hoztam meg, miszerint: |
| 6 | + |
| 7 | +\begin{foreigndisplaycquote}{american}{bst-journal} |
| 8 | + Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding |
| 9 | + new features. |
| 10 | +\end{foreigndisplaycquote} |
| 11 | + |
| 12 | +A~\ref{sec:intro-reporter} fejezetben említett két kimeneti formátumot támogatja a komponens, amelyek rendre: |
| 13 | + |
| 14 | +\begin{itemize} |
| 15 | + \item Humán olvasható, \textit{HTML} jelentés. |
| 16 | + \item Harmadik féltől számrazó programok által ovlasható \textit{JUnit XML}. |
| 17 | +\end{itemize} |
| 18 | + |
| 19 | +A kimeneti formátumok kiválasztásánál először csak a \textit{JUnit XML} lehetőséget vettem figyelembe. Azonban hamar rá |
| 20 | +kellett hogy jöjjek, hogy egy szoftver eszköz mint a \textit{SuperSet} teszt keretrendszer, csak akkor teremt értéket |
| 21 | +ha a tesztelők könnyen vizualizálni tudják a kimenetét. Ha a \textit{HTML} kimenet nem valósult volna meg, akkor a |
| 22 | +keretrendszer felhasználói kénytelenek lettek volna harmadik féltől számazó szoftvereket alkalmazni. Vagy az |
| 23 | +\textit{SQLite} adatbázis megnyitásához, és lekérdezéséhez, vagy a \textit{JUnit XML} vizsualizálásához. |
| 24 | + |
| 25 | +A két formátum kezelésére két külön-külön álló szoftver komponenst implementáltam, ezek a \textit{HTMLReporter} és a |
| 26 | +\textit{JXmlReporter} komponensek. A komponensek közel azonos adaton dolgoznak. |
| 27 | + |
| 28 | +Mindkét komponensnek szüksége van egy aggregált statisztikára ez a \textit{Stats} típus. Ez a típus gyakorlatilag egy |
| 29 | +összefoglalót ad az egész teszt futtatásról. Az összefoglalóban szerepel az összes konfigurációval kiválasztott |
| 30 | +teszteset száma, valamint hogy ezek közül mennyi teszteset volt sikeres, sikertelen, vagy kihagyott. Ezenkívül a |
| 31 | +futtatás idejét is tartalmazza másodpercben mérve. A \textbf{\ref{fig:stats-implementation}. ábrán} látható a |
| 32 | +\textit{Stats} típus. |
| 33 | + |
| 34 | +\begin{figure}[ht] |
| 35 | + \centering |
| 36 | + \begin{minted}{python} |
| 37 | +@dataclass(slots=True) |
| 38 | +class Stats(tuple[float, int, int, int, int, int]): |
| 39 | + time: float = 0 |
| 40 | + passes: int = 0 |
| 41 | + fails: int = 0 |
| 42 | + errors: int = 0 |
| 43 | + skipped: int = 0 |
| 44 | + tests: int = 0 |
| 45 | + \end{minted} |
| 46 | + \caption{\label{fig:stats-implementation} A \textit{Stats} típus implementációja} |
| 47 | +\end{figure} |
| 48 | + |
| 49 | +\newpage |
| 50 | +\section{A \textit{JXmlReporter} komponens} |
| 51 | + |
| 52 | + A \textit{JxmlReporter} komponens mind működésében mind implementációjában szerényebb mint a \textit{HTMLReporter} |
| 53 | + társa. Ez a tény gyakorlatilag a formátum egyszerűségéből adódik. |
| 54 | + |
| 55 | + A formátumot először az \emph{Apache Ant\textsuperscript{\texttrademark}}~\cite{ant} használta, és |
| 56 | + szabványosította, majd \textit{de-facto} szabvány lett az automata szoftvertesztek eredményeinek tárolására. |
| 57 | + |
| 58 | + A \textbf{\ref{fig:jxml-report}. ábrán} látható példa egy a \textit{SuperSet} teszt keretrendszer által generált |
| 59 | + \textit{JUnit XML-re}. |
| 60 | + |
| 61 | + \begin{figure}[ht] |
| 62 | + \centering |
| 63 | + \begin{minted}{xml} |
| 64 | +<?xml version="1.0" encoding="UTF-8"?> |
| 65 | +<testsuites name="SuperSet" tests="3" errors="0" failures="0" skipped="0" time="1.164"> |
| 66 | + <testsuite name="C99LANG-ARMV8-O0" tests="1" errors="0" failures="0" skipped="0" time="0.291"> |
| 67 | + <test_case name="2/1/1/2/t01" time="0.291" /> |
| 68 | + </testsuite> |
| 69 | + <testsuite name="C99LIB-ARMV8-O0" tests="1" errors="0" failures="0" skipped="0" time="0.416"> |
| 70 | + <test_case name="4/1/2/t33fsnofloat" time="0.416" /> |
| 71 | + </testsuite> |
| 72 | + <testsuite name="LOOPS-ARMV8-O0" tests="1" errors="0" failures="0" skipped="0" time="0.457"> |
| 73 | + <test_case name="optimize/s314/ts314intrestrict" time="0.457" /> |
| 74 | + </testsuite> |
| 75 | +</testsuites> |
| 76 | + \end{minted} |
| 77 | + \caption{\label{fig:jxml-report} Példa a \textit{JUnit XML} jelentésre} |
| 78 | + \end{figure} |
| 79 | +
|
| 80 | +\section{A \textit{HTMLReporter} komponens} |
| 81 | +
|
| 82 | + A könnyű áttekintés érdekében az eredmények kategorizálásra kerülnek. A \textit{HTMLReporter} komponens hét |
| 83 | + különböző kategóriát különböztet meg. Ezek a következők: |
| 84 | +
|
| 85 | + \begin{itemize} |
| 86 | + \item \textit{SKIPPED}: kihagyott teszteset. |
| 87 | + \item \textit{CFAIL}: fordítási hibás teszteset. |
| 88 | + \item \textit{XCFAIL}: imsert fordítási hibás teszteset. |
| 89 | + \item \textit{CPASS}: fordítási sikeres teszteset. |
| 90 | + \item \textit{RFAIL}: futtatási hibás teszteset. |
| 91 | + \item \textit{XRFAIL}: ismert futtatási hibás teszteset. |
| 92 | + \item \textit{RPASS}: futtatási sikeres teszteset. |
| 93 | + \end{itemize} |
| 94 | +
|
| 95 | + A \textit{HTMLReporter} komponens struktúráltan prezentálja az információt a felhasználó felé. A struktúra egy fába |
| 96 | + van rendezve. |
| 97 | +
|
| 98 | + Az első gyökér elem, egy fejléc van, ami felsorolja a teljes futásra vonatkozó statisztikákat. Ahogy haladunk |
| 99 | + beljebb a listában, szintén minden elem egy statisztika fejléccel kezdődik, azonban az a fejléc csak az arra a |
| 100 | + lista elemre szűrt statisztikákat jeleníti meg. |
| 101 | +
|
| 102 | + A lista elemek a könnyű vizuális keresés érdekében, szemantikusan színezettek, a kategóriák alapján. Erősségi |
| 103 | + sorrend szerint, pirossal ha sikertelen teszteset van a kategóriában, zölddel ha minden teszteset sikeres, és |
| 104 | + sárgával ha minden teszteset ki lett hagyva. |
| 105 | +
|
| 106 | + A lista elemek ezután a következő sorrendben ágyazódnak egymásba: |
| 107 | +
|
| 108 | + \begin{enumerate} |
| 109 | + \item A tesztcsomag neve. |
| 110 | + \item A \textit{Target} neve és a hozzátartozó konfiguráció. |
| 111 | + \item A hét kategória bontás. |
| 112 | + \item A kategórián belül az eredményeket mutató táblázat. |
| 113 | + \end{enumerate} |
| 114 | +
|
| 115 | + A fa szerkezet leveleiben lévő táblázatok, a kategóriájukna megfelelő oszlopokat tartalmaznak. Általánosan |
| 116 | + elmondható, hogy minden táblázatban van egy \emph{név} oszlop, hogy a teszteset azonosítható legyen. |
| 117 | +
|
| 118 | + A sikeresen futott teszteseteknél a futtatás ideje látható. A kihagyott teszteseteknél a lista ami alapján a teszt |
| 119 | + ki lett hagyva. A sikertelen teszteseteknél a futtatás ideje, a program kimenete mind az \textit{STDOUT-ra} és |
| 120 | + \textit{STDERR-re}, valamint egy konfigurációs fájl amivel reprodukálni lehet a bukást. A |
| 121 | + \textbf{\ref{fig:html-report-passes}.~\ref{fig:html-report-skips}. és~\ref{fig:html-report-errors}. ábrák} |
| 122 | + bemutatják a különböző táblázat formátumokat egy \textit{HTML} jelentés részletén. |
0 commit comments