Manos Pitsidianakis <manos.pitsidiana...@linaro.org> writes: > On Thu, Jul 17, 2025 at 11:42 AM Alex Bennée <alex.ben...@linaro.org> wrote: >> >> Manos Pitsidianakis <manos.pitsidiana...@linaro.org> writes: >> >> > Add argument parsing to functional tests to improve developer experience >> > when running individual tests. All logs are printed to stdout >> > interspersed with TAP output. >> > >> > ./pyvenv/bin/python3 ../tests/functional/test_aarch64_virt.py --help >> > usage: test_aarch64_virt [-h] [-d] >> >> Am I holding it wrong? >> >> ➜ ./pyvenv/bin/python ../../tests/functional/test_aarch64_virt.py --help >> Traceback (most recent call last): >> File >> "/home/alex/lsrc/qemu.git/builds/all/../../tests/functional/test_aarch64_virt.py", >> line 16, in <module> >> from qemu_test import QemuSystemTest, Asset, >> exec_command_and_wait_for_pattern >> File "/home/alex/lsrc/qemu.git/tests/functional/qemu_test/__init__.py", >> line 14, in <module> >> from .testcase import QemuBaseTest, QemuUserTest, QemuSystemTest >> File "/home/alex/lsrc/qemu.git/tests/functional/qemu_test/testcase.py", >> line 26, in <module> >> from qemu.machine import QEMUMachine >> ModuleNotFoundError: No module named 'qemu' >> >> I thought the point of the venv is we had all the modules we need >> automatically available to the PYTHONPATH? > > Is PYTHONPATH exported? Check that you've done the instructions > detailed here: > https://www.qemu.org/docs/master/devel/testing/functional.html#running-tests
We should probably include enough in the commit message so a blind copy and paste works, or at least indicates you need more setup to run the test: set -x PYTHONPATH ../../python:../../tests/functional/ env QEMU_TEST_QEMU_BINARY=./qemu-system-aarch64 ./pyvenv/bin/python ../../tests/functional/test_aarch64_virt.py --debug >> >> > >> > QEMU Functional test >> > >> > options: >> > -h, --help show this help message and exit >> > -d, --debug Also print test and console logs on stdout. This will >> > make the TAP output invalid and is meant for debugging >> > only. >> > >> > Signed-off-by: Manos Pitsidianakis <manos.pitsidiana...@linaro.org> >> > --- >> > docs/devel/testing/functional.rst | 2 ++ >> > tests/functional/qemu_test/testcase.py | 51 >> > ++++++++++++++++++++++++++++++++-- >> > 2 files changed, 50 insertions(+), 3 deletions(-) >> > >> > diff --git a/docs/devel/testing/functional.rst >> > b/docs/devel/testing/functional.rst >> > index >> > 9e56dd1b1189216b9b4aede00174c15203f38b41..9d08abe2848277d635befb0296f578cfaa4bd66d >> > 100644 >> > --- a/docs/devel/testing/functional.rst >> > +++ b/docs/devel/testing/functional.rst >> > @@ -63,6 +63,8 @@ directory should be your build folder. For example:: >> > $ export QEMU_TEST_QEMU_BINARY=$PWD/qemu-system-x86_64 >> > $ pyvenv/bin/python3 ../tests/functional/test_file.py >> > >> > +By default, functional tests redirect informational logs and console >> > output to >> > +log files. Specify the ``--debug`` flag to also print those to standard >> > output. >> > The test framework will automatically purge any scratch files created >> > during >> > the tests. If needing to debug a failed test, it is possible to keep these >> > files around on disk by setting ```QEMU_TEST_KEEP_SCRATCH=1``` as an env >> > diff --git a/tests/functional/qemu_test/testcase.py >> > b/tests/functional/qemu_test/testcase.py >> > index >> > 2082c6fce43b0544d4e4258cd4155f555ed30cd4..fad7a946c6677e9ef5c42b8f77187ba836c11aeb >> > 100644 >> > --- a/tests/functional/qemu_test/testcase.py >> > +++ b/tests/functional/qemu_test/testcase.py >> > @@ -11,6 +11,7 @@ >> > # This work is licensed under the terms of the GNU GPL, version 2 or >> > # later. See the COPYING file in the top-level directory. >> > >> > +import argparse >> > import logging >> > import os >> > from pathlib import Path >> > @@ -31,6 +32,20 @@ >> > from .uncompress import uncompress >> > >> > >> > +def parse_args(test_name: str) -> argparse.Namespace: >> > + parser = argparse.ArgumentParser( >> > + prog=test_name, description="QEMU Functional test" >> > + ) >> > + parser.add_argument( >> > + "-d", >> > + "--debug", >> > + action="store_true", >> > + help="Also print test and console logs on stdout. This will make >> > the" >> > + " TAP output invalid and is meant for debugging only.", >> > + ) >> > + return parser.parse_args() >> > + >> > + I'm definitely onboard for improving the ergonomics of calling the tests directly. Others to consider: - triggering the behaviour of QEMU_TEST_KEEP_SCRATCH - dumping the command line without the test harness QMP/serial pipes connected <snip> -- Alex Bennée Virtualisation Tech Lead @ Linaro