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

Reply via email to