.. zephyr:code-sample:: pytest_shell :name: Pytest shell application testing Execute pytest tests against the Zephyr shell. 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 :ref:`here `. Requirements ************ Board (hardware, ``native_sim`` or ``QEMU``) with UART console. Building and Running ******************** Build and run sample by Twister: .. code-block:: console $ ./scripts/twister -vv --platform native_sim -T samples/subsys/testsuite/pytest/shell Sample Output ============= .. code-block:: console ... samples/subsys/testsuite/pytest/shell/pytest/test_shell.py::test_shell_print_help INFO: send "help" command DEBUG: #: uart:~$ help DEBUG: #: Please press the button to see all available commands. DEBUG: #: You can also use the 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 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 ...