Testing

Run the fast test suite during development:

pytest tests/ -v

Slow, GPU, Simpleware, experiment, and tutorial tests are auto-skipped unless their opt-in flag is passed. Tests that depend on downloadable data fetch it automatically via the session fixtures, so no marker filter is needed for them.

Opt-in Buckets

Each --run-<bucket> flag enables one marker family:

pytest tests/ -v --run-slow         # tests marked 'slow'
pytest tests/ -v --run-gpu          # tests marked 'requires_gpu'
pytest tests/ -v --run-simpleware   # tests marked 'requires_simpleware'
pytest tests/ -v --run-physicsnemo  # tests marked 'requires_physicsnemo'
pytest tests/ -v --run-experiments  # tests marked 'experiment'
pytest tests/ -v --run-tutorials    # tests marked 'tutorial'

Flags compose. A typical local GPU profile is:

pytest tests/ -v --run-gpu --run-slow

--run-all is a convenience flag that turns on every --run-* bucket at once. The self-hosted CI GPU runner uses it (after installing .[test,cuda13,physicsnemo]):

pytest tests/ -v --run-all

Test Categories

# CLI help smoke tests
pytest tests/test_cli_smoke.py -v

# Public import surface
pytest tests/test_import_public_api.py -v

Specific Areas

pytest tests/test_convert_vtk_to_usd.py -v
pytest tests/test_convert_image_4d_to_3d.py -v
pytest tests/test_contour_tools.py -v
pytest tests/test_transform_tools.py -v
pytest tests/test_image_tools.py -v

Real Data and GPU Tests

Tests that need downloadable data request the session fixtures (test_directories, download_test_data, test_images); the data is downloaded on first use, so these tests run by default. GPU-bound tests are marked requires_gpu (opt-in via --run-gpu); Simpleware-bound tests are marked requires_simpleware (opt-in via --run-simpleware and require a licensed Simpleware Medical installation locally).

Continuous Integration

CI runs the fast subset by default. The self-hosted GPU runner installs .[test,cuda13,physicsnemo] and invokes pytest with --run-all (which enables every --run-* bucket); tests whose host requirements aren’t met (e.g. a licensed Simpleware install on a runner without one) runtime-skip cleanly via their internal guards.

See Also