286 lines
8.0 KiB
TeX
286 lines
8.0 KiB
TeX
% ===== Introduction =====
|
|
\section{Introduction}
|
|
|
|
% ===== Main features =====
|
|
\subsection{Main features}
|
|
|
|
\begin{frame}{\tum{testium} main features}
|
|
\begin{columns}
|
|
\column{0.45\textwidth}
|
|
\begin{itemize}
|
|
\item Automates the execution of tests
|
|
\item GUI or console mode
|
|
\item Stores logs
|
|
\item Generates test reports
|
|
\item Usable for production and engineering testings
|
|
\item Mainly based on:
|
|
\begin{itemize}
|
|
\item Python3
|
|
\item QT6
|
|
\item Jinja2
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\column{0.55\textwidth}
|
|
\vfill
|
|
\includegraphics[width=\linewidth]{testium_gui.png}
|
|
\vfill
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{ \tum{testium} input files}
|
|
\begin{columns}
|
|
\column{0.5\textwidth}
|
|
\begin{itemize}
|
|
\item Test scripts (.tum)
|
|
\begin{itemize}
|
|
\item Files written in \incode{YAML}
|
|
\item Wide range of test items
|
|
\item Loops, Variables, conditional execution
|
|
\item Modular templating using \incode{Jinja2}
|
|
\end{itemize}
|
|
\item Configuration files (.yaml, .yml)
|
|
\begin{itemize}
|
|
\item \incode{YAML} test configuration / parameters
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\begin{listing}[H]
|
|
\begin{minted}{yaml}
|
|
# All sub directory in items are evaluated as a list
|
|
items: $| [os.path.basename(f.path) for f in os.scandir(os.path.join("$(test_directory)", "items")) if f.is_dir()] |
|
|
|
|
# Parameters of the validation execution
|
|
validation_report_path: $(test_directory)/../tmp/
|
|
validation_report_file: validation
|
|
|
|
# various parameters
|
|
windows_prompt: ">"
|
|
linux_prompt: "$ "
|
|
[...]
|
|
\end{minted}
|
|
\caption{Example of config file}
|
|
\end{listing}
|
|
|
|
\column{0.5\textwidth}
|
|
\begin{listing}[H]
|
|
\begin{minted}{yaml}
|
|
config_file:
|
|
- param.yaml
|
|
{% for item in items %}
|
|
- "items/{{ item }}/param.yaml"
|
|
{% endfor %}
|
|
main:
|
|
name: testium validation suite
|
|
action:
|
|
- group:
|
|
name: Test preparation
|
|
action:
|
|
- let:
|
|
name: Set test variables for Linux
|
|
condition: "'$(os)' == 'Linux'"
|
|
values:
|
|
- terminal_prompt: $(linux_prompt)
|
|
- psep: "/"
|
|
- let:
|
|
name: Set test variables for Windows
|
|
condition: "'$(os)' == 'Widarkbluendows'"
|
|
values:
|
|
[...]
|
|
\end{minted}
|
|
\caption{Example of test file}
|
|
\end{listing}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\begin{frame}{command line interface}
|
|
\begin{itemize}
|
|
\item \tum{testium} can be invoked with the following options:
|
|
\begin{itemize}
|
|
\item \incode{-h}: command line help
|
|
\item \incode{-b}: batc5h mode (execution of the test script without GUI)
|
|
\item \incode{-c}: Use a specific config file
|
|
\item \incode{-i}: Set a specific include path
|
|
\item \incode{-g}: Run in debug mode (for vscode debug only)
|
|
\item \incode{-r}: Run the test and close
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{Test scripts}
|
|
\begin{columns}
|
|
\column{0.6\textwidth}
|
|
\begin{itemize}
|
|
\item Hierarchic list of test items
|
|
\begin{itemize}
|
|
\item \incode{main} is the root of the test script
|
|
\item \incode{config\_file} list of config/params files
|
|
\item \incode{report} global report parameters section
|
|
\end{itemize}
|
|
\item \incode{main} contains test items
|
|
\begin{itemize}
|
|
\item executed iteratively from top to bottom
|
|
\item container items can have children
|
|
\begin{itemize}
|
|
\item \incode{loop}
|
|
\item \incode{group}
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\item \incode{!include} directive
|
|
\begin{itemize}
|
|
\item include sub-tests
|
|
\item allow the use of templates
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\column{0.4\textwidth}
|
|
\begin{listing}[H]
|
|
\begin{minted}{yaml}
|
|
|
|
config_file:
|
|
- param.yaml
|
|
|
|
main:
|
|
name: Training file demo
|
|
action:
|
|
- item1:
|
|
[...]
|
|
|
|
- loop:
|
|
name: Training file demo
|
|
action:
|
|
- item2:
|
|
[...]
|
|
|
|
- item3:
|
|
[...]
|
|
|
|
[...]
|
|
|
|
- !include path/to/my/subtest.tum
|
|
|
|
[...]
|
|
|
|
report:
|
|
[...]
|
|
\end{minted}
|
|
\caption{A main test file}
|
|
\end{listing}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\subsection{Advanced features}
|
|
|
|
\begin{frame}{Variable expansion \& global dictionary}
|
|
\begin{columns}
|
|
\column{0.5\textwidth}
|
|
\begin{itemize}
|
|
\item Persistence between steps
|
|
\item Variable expansion: \incode{\$(my\_variable)}
|
|
\begin{itemize}
|
|
\item The \incode{my\_variable} value is taken in the global dictionary if the key exists
|
|
\end{itemize}
|
|
\item Accessed from python functions:
|
|
\begin{itemize}
|
|
\item \incode{tm.getgd}
|
|
\item \incode{tm.setgd}
|
|
\item \incode{tm.delgd}
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\column{0.5\textwidth}
|
|
\begin{itemize}
|
|
\item Built-in variables:
|
|
\begin{itemize}
|
|
\item \incode{test\_directory}: the folder of the main tum file
|
|
\item \incode{test\_main\_file}: the main tum file
|
|
\item \incode{os}: The OS used by the system (Linux or Windows)
|
|
\item \incode{host\_name}: The hostname of the machine
|
|
\item \incode{home}: The home directory of the user
|
|
\item \incode{test\_outputs}: The list of the paths of the test log and test report
|
|
\item \incode{testrun\_date}: The date when the test started YYYY-MM-DD
|
|
\item \incode{testrun\_time}: The time when the test started HH:MM:SS
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{Inline evaluation of python statements}
|
|
\begin{columns}
|
|
\column{0.6\textwidth}
|
|
\begin{itemize}
|
|
\item \incode{\$|<statement>|}
|
|
\begin{itemize}
|
|
\item Python evaluation of \incode{statement}
|
|
\item Evaluated in:
|
|
\begin{itemize}
|
|
\item YAML config files
|
|
\item tum files
|
|
\item compatible with variables expansion
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\column{0.4\textwidth}
|
|
\begin{listing}[H]
|
|
\begin{minted}{yaml}
|
|
[...]
|
|
- loop:
|
|
name: Test loop
|
|
stop_on_failure: false
|
|
iterator: $(stuff_number)
|
|
action:
|
|
|
|
- json_rpc:
|
|
name: Start a important step
|
|
udp:
|
|
server: $(dut_eth0_ip)
|
|
snd_port: $(ctrl_snd_port)
|
|
rcv_port: $(ctrl_rcv_port)
|
|
timeout: 30
|
|
mute: False
|
|
action:
|
|
- query:
|
|
method: record.start
|
|
params:
|
|
- slot: $|$(loop_index) + 1|
|
|
input: $|($(test_data))[$(loop_index)]|
|
|
quality: medium
|
|
[...]
|
|
\end{minted}
|
|
\caption{variables expansion and evaluation examples}
|
|
\end{listing}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Inline evaluation of python statements - Examples}
|
|
\begin{itemize}
|
|
\item simple
|
|
\begin{itemize}
|
|
\item \incode{\$|\$(loop\_index)+1|}
|
|
\end{itemize}
|
|
\item table indexing
|
|
\begin{itemize}
|
|
\item \incode{\$|(\$(my\_table))[\$(loop\_index)]|}
|
|
\end{itemize}
|
|
\item string
|
|
\begin{itemize}
|
|
\item \incode{\$|"\$(video\_path)"+(\$(vstream\_formats))[0]+".mkv"|}
|
|
\end{itemize}
|
|
\item Random list of integers
|
|
\begin{itemize}
|
|
\item \incode{\$|[random.sample(range(0,8), k=4)]|}
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
% ===== Links for documentation / code =====evaluation and
|
|
\subsection{Documentation and example code}
|
|
|
|
\begin{frame}{Links for documentation and example code}
|
|
\begin{itemize}
|
|
\item Git repository
|
|
\begin{itemize}
|
|
\item \url{https://git.beafrancois.fr/v_and_v/testium}
|
|
\item Also possibility to do suggestions or raise tickets
|
|
\end{itemize}
|
|
\item \href{https://git.beafrancois.fr/v-and-v/testium/src/branch/main/doc/manual/testium_manual.pdf}{Reference documentation}
|
|
\item \href{https://git.beafrancois.fr/v-and-v/testium/src/branch/main/test/validation}{ \tum{testium} validation suite}
|
|
\end{itemize}
|
|
\end{frame}
|