Pytest shell application testing
Overview
The sample project illustrates usage of pytest framework integrated with Twister test runner.
A simple application provides basic Zephyr shell interface. Twister builds it
and then calls pytest in subprocess which runs tests from
pytest/test_shell.py
file. The first test verifies valid response for
help
command, second one verifies if application is able to return
information about used kernel version. Both tests use shell
fixture, which
is defined in pytest-twister-harness
plugin. More information about plugin
can be found here.
Requirements
Board (hardware, native_sim
or QEMU
) with UART console.
Building and Running
Build and run sample by Twister:
$ ./scripts/twister -vv --platform native_sim -T samples/subsys/testsuite/pytest/shell
Sample Output
...
samples/subsys/testsuite/pytest/shell/pytest/test_shell.py::test_shell_print_help
INFO: send "help" command
DEBUG: #: uart:~$ help
DEBUG: #: Please press the <Tab> button to see all available commands.
DEBUG: #: You can also use the <Tab> button to prompt or auto-complete all commands or its subcommands.
DEBUG: #: You can try to call commands with <-h> or <--help> parameter for more information.
DEBUG: #: Shell supports following meta-keys:
DEBUG: #: Ctrl + (a key from: abcdefklnpuw)
DEBUG: #: Alt + (a key from: bf)
DEBUG: #: Please refer to shell documentation for more details.
DEBUG: #: Available commands:
DEBUG: #: clear :Clear screen.
DEBUG: #: device :Device commands
DEBUG: #: devmem :Read/write physical memory
DEBUG: #: Usage:
DEBUG: #: Read memory at address with optional width:
DEBUG: #: devmem address [width]
DEBUG: #: Write memory at address with mandatory width and value:
DEBUG: #: devmem address <width> <value>
DEBUG: #: help :Prints the help message.
DEBUG: #: history :Command history.
DEBUG: #: kernel :Kernel commands
DEBUG: #: rem :Ignore lines beginning with 'rem '
DEBUG: #: resize :Console gets terminal screen size or assumes default in case the
DEBUG: #: readout fails. It must be executed after each terminal width change
DEBUG: #: to ensure correct text display.
DEBUG: #: retval :Print return value of most recent command
DEBUG: #: shell :Useful, not Unix-like shell commands.
DEBUG: #: uart:~$
INFO: response is valid
PASSED
samples/subsys/testsuite/pytest/shell/pytest/test_shell.py::test_shell_print_version
INFO: send "kernel version" command
DEBUG: #: uart:~$ kernel version
DEBUG: #: Zephyr version 3.5.99
DEBUG: #: uart:~$
INFO: response is valid
PASSED
...