Move src/lib/ → src/testium/runtime/ (internal plumbing)
Move src/testium/libs/ → src/testium/api/ (public SDK for test scripts)
Move src/py_func/ → src/testium/py_func/ (Python subprocess)
Move src/lua_func/ → src/testium/lua_func/ (Lua subprocess data)
The package now ships as a single coherent unit instead of four sibling
top-level packages (testium, lib, py_func, lua_func) — pip install
gives a clean site-packages/testium/ with no namespace pollution; .lua
files travel with the wheel via package_data; the wheel installs
cleanly and `testium -b` runs end-to-end including py_func subprocesses
and entry-point exporter plugins.
Naming:
- runtime/ (internal, no API guarantees) clearer than lib/
- api/ (public SDK consumed as `import api.testium as tm`) clearer than libs/
Imports updated en masse: from lib. → from runtime. and from libs. →
from api., plus the importlib.import_module("libs.*") strings in
test_item_console.py and test_item_runtime_plot.py. Test/example
scripts (helper_lib.py, parallel.py, post_execution.py) and the
fake_exporter test suite migrated too.
paths.py: subproc_path() now returns testium_path() — both point at
the testium package directory since the subprocesses live inside.
pyproject.toml: removed exclude=["lua_func", "py_func"] (no longer
needed), added package-data for testium.lua_func/*.lua, removed the
license classifier (PEP 639 conflict with license expression).
Subprocess isolation contract: py_func/ and lua_func/ may only import
runtime/ and their own modules — never interpreter/, main_win/, api/,
or testium/. Enforced by test/validation/items/isolation/ which runs a
py_func that statically scans subprocess source files for forbidden
imports. The contract holds today; the test prevents future drift.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Documentation
License
Copyright (c) 2025-2026 François Dausseur.
testium is distributed under the European Union Public Licence v. 1.2 (EUPL-1.2) — see the LICENSE file for the full text.
SPDX identifier: EUPL-1.2
Contributions are accepted under the same licence (inbound = outbound). See CONTRIBUTING.md for details.
run testium
From the root path, on windows cmd:
run.bat
On windows powershell:
run.ps1
On linux:
./run.sh
The virtual environment is created if needed and testium is started.
Manual setup
A python virtual environment should be created:
python3 -m venv <testium_venv>
Requirements
In the virtual environment, the following modules must be installed:
- pyside6
- pyserial
- pyyaml
- pexpect
- gitpython
- jinja2
- colorama
- matplotlib
- junit-xml
- lxml
A requirements.txt file is also available in the git repository in the path testium/src/.
run testium
from the testium path, execute
python3 -m src/testium
Doc generation
Install sphinx
pip install sphinx linuxdoc
Generate the doc
Execute
doc/manual/sphinx/./build_doc.sh
This command works if texlive package has been installed on the system. It can be done by invoking the following command.
sudo apt install texlive-full
QT GUI
QT GUI modification
Open the ".ui" file with qtcreator and modify the gui. Then regenerate the python code.
On linux, a helper script has been created: scripts/./qt_generate.sh
Debugging
In order to debug testium or your python script executed within testium.
In VSCODE
This is the prefered method :
- Create a debug configuration like the following:
"configurations": [
{
"name": "Python : testium",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/src/testium",
"console": "integratedTerminal",
"args": ["-g"],
"justMyCode": true
},
]
-
Install debugpy module in python
python -m pip install debugpy
-
Then get to the "RUN AND DEBUG" tab and press the play button.
-
A testium window will pops up ; start execution of your tum.
-
Do not forget to put breakpoints where you want to investigate.
Icons
Icons are coming from the following site: https://github.com/free-icons/free-icons.git
testium Release
Pre-requisite
A python virtual environment must have been set as described above.
Install pyinstaller
Install pyinstaller package using pip.
Generate the binary package
The procedure for a binary release is as follows:
- update the
release_note.txtfile - modify the version in
src/VERSIONfile - be sure that the documentation is up to date, and if not execute
doc/manual/sphinx/build_doc.shscript - push modifications and create a tag with the new version on the git repository
- generate an executable file by calling
package/pyinstaller/./build.sh - run the complete validation test for each generated binary
- check that all the validation results are OK
Troubleshooting
The testium exe crashes wl_proxy_marshal_flags
Error message
/testium: symbol lookup error: /tmp/_MEIOhDCPF/libQt6WaylandClient.so.6: undefined symbol: wl_proxy_marshal_flags
Solution
Set the appropriate environment variable
export QT_QPA_PLATFORM=xcb
testium
xcb plugin missing
Error message
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
Solution
A package is missing
sudo apt install libxcb-cursor0
sudo apt-get install libicu-dev
sudo apt-get install libxcb-cursor-dev
The testium appimage crashes when opening a file
This is usually because wayland is defined as the default X server.
To change it :
-
Disable Wayland by uncommenting WaylandEnable=false in the
/etc/gdm3/daemon.conf -
Add
QT_QPA_PLATFORM=xcbin/etc/environment -
After a reboot, check that the environment variable value returns
x11:$ echo $XDG_SESSION_TYPE x11