A QUTest test script contains a group of related tests (a test group). The basic job of these tests is to send commands to the test fixture running in the Target and to compare the QSPY textual output produced by the Target with the expectations of the tests.
The QUTest test scripts are executed in the host by the "QUTest front-end" that communicates with the QSPY host application via the UDP interface. The "QUTest front-end" is itself implemented in Python (Python 3.3+).
The Python test scripts are executed by the Python module qtools/qspy/py/qutest.py, with the following usage:
python3 <qutest-dir>qutest.py [-x] [test-scripts] [host_exe] [qspy_host[:udp_port]] [qspy_tcp_port]
where:
<qutest-dir>
is the directory with the qutest.py
script
[test_scripts] | optional specification of the Python test scripts to run. If not specified, qutest will try to run all *.py files in the current directory as test scripts |
[host_exe] | optional specification of the host executable to launch for testing embedded code on the host computer. If host_exe is not specified, or is specified as a placeholder "" , an embedded target is assumed. The special value DEBUG means that qutest.py will start in the debug mode, in which it will NOT launch the host executables and it will wait for the Target reset and other responses from the Target. |
[qspy_host[:udp_port]] | optional host-name/IP-address:port for the host running the QSpy utility. If not specified, the default is localhost:7701. |
[tcp_port] | optional the QSpy TCP port number for connecting host executables. |
Usage examples (for Windows):
python3 %QTOOLS%\qspy\py\qutest.py python3 %QTOOLS%\qspy\py\qutest.py *.py python3 %QTOOLS%\qspy\py\qutest.py *.py build\dpp.exe python3 %QTOOLS%\qspy\py\qutest.py *.py build\dpp.exe 192.168.1.100:7705 python3 %QTOOLS%\qspy\py\qutest.py *.py "" localhost:7701 6605 python3 %QTOOLS%\qspy\py\qutest.py *.py DEBUG python3 %QTOOLS%\qspy\py\qutest.py *.py DEBUG localhost:7701 6605
Usage examples (for Linux/MacOS):
python3 $(QTOOLS)/qspy/py/qutest.py python3 $(QTOOLS)/qspy/py/qutest.py *.py python3 $(QTOOLS)/qspy/py/qutest.py *.py build/dpp python3 $(QTOOLS)/qspy/py/qutest.py *.py build/dpp 192.168.1.100:7705 python3 $(QTOOLS)/qspy/py/qutest.py *.py "" localhost:7701 6605 python3 $(QTOOLS)/qspy/py/qutest.py *.py DEBUG python3 $(QTOOLS)/qspy/py/qutest.py *.py DEBUG localhost:7701 6605
The Python module qtools/qspy/py/qutest.py defines a small Domain Specific Language (DSL) for writing test scripts in Python. The structure of this DSL is very simple. Each test script consists of two sections:
The "preamble" section of a test script file specifies include scripts and defines callback functions common to all tests in this file. It can contain the following functions:
The on_...()
callback functions can call any of the test commands.
The "tests" section of a test script file contains the actual tests. Each test starts with the test() command and can contain any number of the test commands. The test continues until another test() command, or the skip() command.
The commands that you can place in the tests (as well as inside the callback functions) are:
To write effective test scripts you need to understand the main categories of QSPY output, which are illustrated in the picture below: