test: py: Add --persist flag to keep test artefacts

When iterating on C test code, the Python fixtures that create disk
images run each time, even though the images have not changed. This
slows down the development cycle unnecessarily.

Add a -P/--persist option to prevent cleanup of test-generated files
like disk images. This allows re-running C tests directly, without
re-running the Python fixture each time.

Update the ext4l test to respect the persist flag.

Co-developed-by: Claude Opus 4.5 <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
This commit is contained in:
Simon Glass
2025-12-28 20:47:21 -07:00
committed by Simon Glass
parent 0f1d14835b
commit 1dd04b3fcb
3 changed files with 12 additions and 2 deletions

View File

@@ -246,6 +246,13 @@ Command-line options
sets the directory used to store persistent test data. This is test data that
may be re-used across test runs, such as file-system images.
-P, --persist
prevents cleanup of test-generated files like disk images after the test run
completes. This is useful when iterating on C test code, allowing you to
re-run the C tests without re-running the Python fixture that creates the
test images. Note that this must be individually supported by each test, e.g.
with a check against u_boot_config.persist before removing images.
--timing
shows a histogram of test duration, at the end of the run. The columns are:

View File

@@ -100,6 +100,8 @@ def pytest_addoption(parser):
help="Assume that U-Boot is ready and don't wait for a prompt")
parser.addoption('--timing', default=False, action='store_true',
help='Show info on test timing')
parser.addoption('-P', '--persist', default=False, action='store_true',
help='Persist test artifacts (do not clean up after tests)')
def run_build(config, source_dir, build_dir, board_type, log):
@@ -346,6 +348,7 @@ def pytest_configure(config):
ubconfig.dtb = build_dir + '/arch/sandbox/dts/test.dtb'
ubconfig.connection_ok = True
ubconfig.timing = config.getoption('timing')
ubconfig.persist = config.getoption('persist')
ubconfig.role = config.getoption('role')
ubconfig.allow_exceptions = config.getoption('allow_exceptions')

View File

@@ -65,8 +65,8 @@ class TestExt4l:
yield image_path
# Cleanup
if os.path.exists(image_path):
# Cleanup (skip if --persist flag is set)
if not u_boot_config.persist and os.path.exists(image_path):
os.remove(image_path)
def test_probe(self, ubman, ext4_image):