Skip to content

Unify ways to run the Python test suite #109566

Description

@vstinner

There are at least 15 known ways to run the Python test suite. IMO it's too much, it's hard to keep all these code paths consistent. IMO python -m test should be enough to fit all use cases.

Maybe we need a --ci, --buildbot, or --strict option which would run tests is "strict" mode.


Portable way to run tests:

./python -m test
./python -m test.regrtest
./python -m test.libregrtest
./python -m test.autotest

./python Lib/test/regrtest.py
./python Lib/test/autotest.py

./python -c 'from test import autotest'

The main drawback is that running ./python doesn't work when Python is built with ./configure --enable-shared, and it doesn't work when Python is cross-compiled (WASM/WASI buildbots). Moreover, on macOS, ./python.exe must be run instead. On Windows, it's just python.

Unix, from Python source code:

make buildbottest TESTOPTS="..."
make test
make testall
make testuniversal
make hostrunnertest

./python Tools/scripts/run_tests.py

Windows, from Python source code:

PCbuild\rt.bat
Tools\buildbot\test.bat

  • Lib/test/autotest.py just runs test.libregrtest.main().

  • Lib/test/regrtest.py runs test.libregrtest.main() and remove Lib/test/ from sys.path and make __file__ an absolute path.

  • PCbuild\rt.bat:

    • python: pass -u -Wd -E -bb options
    • regrtest: pass options passed to rt.bat (except of options specific to rt.bat)
    • most options are to get the path to the python.exe program in PCbuild/
  • Tools\buildbot\test.bat runs PCbuild\rt.bat:

    • rt.bat: pass -q -d options.
    • regrtest: pass -j1 -uall -rwW --slowest --timeout=1200 --fail-env-changed options.
    • ARM32 SSH pass -unetwork -udecimal -usubprocess -uurlfetch -utzdata -rwW --slowest --timeout=1200 --fail-env-changed options.
  • make buildbottest runs Tools/scripts/run_tests.py:

    • python: pass $(TESTPYTHONOPTS) options.
    • regrtest: pass -j 1 -u all -W --slowest --fail-env-changed --timeout=$(TESTTIMEOUT) $(TESTOPTS) options.
  • Tools/scripts/run_tests.py:

    • python: pass -u -W default -bb -E options -- also cross-compilation options, not detailed here
    • regrtest: pass -r -w -j0 -u all,-largefile,-audio,-gui options, add -n on Windows.

GitHub Action workflow uses, .github/workflows/build.yml:

  • Windows x86: .\PCbuild\rt.bat -p Win32 -d -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
  • Windows x64: .\PCbuild\rt.bat -p x64 -d -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
  • macOS: make buildbottest TESTOPTS="-j4 -uall,-cpu"
  • Ubuntu: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu"
  • Address Sanitizer: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu"

Buildbot use, master/custom/factories.py:

  • UnixBuild and UnixCrossBuild: make buildbottest TESTOPTS="..." TESTPYTHONOPTS="..." TESTTIMEOUT="..." with code to select TESTOPTS, TESTPYTHONOPTS and TESTTIMEOUT.
  • UnixInstalledBuild: /path/to/python -m test ... with code to select -m test options.
  • BaseWindowsBuild: Tools\buildbot\test.bat ... with code to select .... options

Linked PRs

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    testsTests in the Lib/test dir

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions