mirror of https://github.com/python/cpython
Issue #11651: Move options for running tests into a Python script.
This will be particularly useful to Windows users. run_tests.py originally written by Brett Cannon.
This commit is contained in:
parent
b0fa4b8433
commit
3c01d16ed9
|
@ -133,6 +133,8 @@ resources to test. Currently only the following are defined:
|
||||||
|
|
||||||
all - Enable all special resources.
|
all - Enable all special resources.
|
||||||
|
|
||||||
|
none - Disable all special resources (this is the default).
|
||||||
|
|
||||||
audio - Tests that use the audio device. (There are known
|
audio - Tests that use the audio device. (There are known
|
||||||
cases of broken audio drivers that can crash Python or
|
cases of broken audio drivers that can crash Python or
|
||||||
even the Linux kernel.)
|
even the Linux kernel.)
|
||||||
|
@ -387,6 +389,9 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
|
||||||
if r == 'all':
|
if r == 'all':
|
||||||
use_resources[:] = RESOURCE_NAMES
|
use_resources[:] = RESOURCE_NAMES
|
||||||
continue
|
continue
|
||||||
|
if r == 'none':
|
||||||
|
del use_resources[:]
|
||||||
|
continue
|
||||||
remove = False
|
remove = False
|
||||||
if r[0] == '-':
|
if r[0] == '-':
|
||||||
remove = True
|
remove = True
|
||||||
|
@ -424,6 +429,8 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
|
||||||
use_mp = 2 + multiprocessing.cpu_count()
|
use_mp = 2 + multiprocessing.cpu_count()
|
||||||
except (ImportError, NotImplementedError):
|
except (ImportError, NotImplementedError):
|
||||||
use_mp = 3
|
use_mp = 3
|
||||||
|
if use_mp == 1:
|
||||||
|
use_mp = None
|
||||||
elif o == '--header':
|
elif o == '--header':
|
||||||
header = True
|
header = True
|
||||||
elif o == '--slaveargs':
|
elif o == '--slaveargs':
|
||||||
|
|
|
@ -747,14 +747,15 @@ $(LIBRARY_OBJS) $(MODOBJS) Modules/python.o: $(PYTHON_HEADERS)
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
|
TESTOPTS= $(EXTRATESTOPTS)
|
||||||
|
TESTPYTHON= $(RUNSHARED) ./$(BUILDPYTHON) $(TESTPYTHONOPTS)
|
||||||
|
TESTRUNNER= $(TESTPYTHON) $(srcdir)/Tools/scripts/run_tests.py
|
||||||
|
TESTTIMEOUT= 3600
|
||||||
|
|
||||||
# Run a basic set of regression tests.
|
# Run a basic set of regression tests.
|
||||||
# This excludes some tests that are particularly resource-intensive.
|
# This excludes some tests that are particularly resource-intensive.
|
||||||
TESTOPTS= $(EXTRATESTOPTS)
|
|
||||||
TESTPROG= $(srcdir)/Lib/test/regrtest.py
|
|
||||||
TESTPYTHON= $(RUNSHARED) ./$(BUILDPYTHON) -Wd -E -bb $(TESTPYTHONOPTS)
|
|
||||||
TESTTIMEOUT= 3600
|
|
||||||
test: all platform
|
test: all platform
|
||||||
$(TESTPYTHON) $(TESTPROG) -j0 $(TESTOPTS)
|
$(TESTRUNNER) $(TESTOPTS)
|
||||||
|
|
||||||
# Run the full test suite twice - once without .pyc files, and once with.
|
# Run the full test suite twice - once without .pyc files, and once with.
|
||||||
# In the past, we've had problems where bugs in the marshalling or
|
# In the past, we've had problems where bugs in the marshalling or
|
||||||
|
@ -765,10 +766,10 @@ test: all platform
|
||||||
# sample data.
|
# sample data.
|
||||||
testall: all platform
|
testall: all platform
|
||||||
-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
|
-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
|
||||||
$(TESTPYTHON) $(srcdir)/Lib/compileall.py
|
$(TESTPYTHON) -E $(srcdir)/Lib/compileall.py
|
||||||
-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
|
-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
|
||||||
-$(TESTPYTHON) $(TESTPROG) -j0 -uall $(TESTOPTS)
|
-$(TESTRUNNER) -u all $(TESTOPTS)
|
||||||
$(TESTPYTHON) $(TESTPROG) -j0 -uall $(TESTOPTS)
|
$(TESTRUNNER) -u all $(TESTOPTS)
|
||||||
|
|
||||||
# Run the test suite for both architectures in a Universal build on OSX.
|
# Run the test suite for both architectures in a Universal build on OSX.
|
||||||
# Must be run on an Intel box.
|
# Must be run on an Intel box.
|
||||||
|
@ -777,25 +778,24 @@ testuniversal: all platform
|
||||||
echo "This can only be used on OSX/i386" ;\
|
echo "This can only be used on OSX/i386" ;\
|
||||||
exit 1 ;\
|
exit 1 ;\
|
||||||
fi
|
fi
|
||||||
$(TESTPYTHON) $(TESTPROG) -j0 -uall $(TESTOPTS)
|
$(TESTRUNNER) -u all $(TESTOPTS)
|
||||||
$(RUNSHARED) /usr/libexec/oah/translate ./$(BUILDPYTHON) -E $(TESTPROG) -j0 -uall $(TESTOPTS)
|
$(RUNSHARED) /usr/libexec/oah/translate \
|
||||||
|
./$(BUILDPYTHON) -E -m test -j 0 -u all $(TESTOPTS)
|
||||||
|
|
||||||
# Like testall, but with only one pass.
|
# Like testall, but with only one pass and without multiple processes.
|
||||||
# Run an optional script to include information about the build environment.
|
# Run an optional script to include information about the build environment.
|
||||||
buildbottest: all platform
|
buildbottest: all platform
|
||||||
-@if which pybuildbot.identify >/dev/null 2>&1; then \
|
-@if which pybuildbot.identify >/dev/null 2>&1; then \
|
||||||
pybuildbot.identify "CC='$(CC)'" "CXX='$(CXX)'"; \
|
pybuildbot.identify "CC='$(CC)'" "CXX='$(CXX)'"; \
|
||||||
fi
|
fi
|
||||||
$(TESTPYTHON) $(TESTPROG) -uall -rwW --timeout=$(TESTTIMEOUT) $(TESTOPTS)
|
$(TESTRUNNER) -j 1 -u all -W --timeout=$(TESTTIMEOUT) $(TESTOPTS)
|
||||||
|
|
||||||
QUICKTESTOPTS= $(TESTOPTS) -x test_subprocess test_io test_lib2to3 \
|
QUICKTESTOPTS= $(TESTOPTS) -x test_subprocess test_io test_lib2to3 \
|
||||||
test_multibytecodec test_urllib2_localnet test_itertools \
|
test_multibytecodec test_urllib2_localnet test_itertools \
|
||||||
test_multiprocessing test_mailbox test_socket test_poll \
|
test_multiprocessing test_mailbox test_socket test_poll \
|
||||||
test_select test_zipfile
|
test_select test_zipfile test_concurrent_futures
|
||||||
quicktest: all platform
|
quicktest: all platform
|
||||||
-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
|
$(TESTRUNNER) $(QUICKTESTOPTS)
|
||||||
-$(TESTPYTHON) $(TESTPROG) -j0 $(QUICKTESTOPTS)
|
|
||||||
$(TESTPYTHON) $(TESTPROG) -j0 $(QUICKTESTOPTS)
|
|
||||||
|
|
||||||
|
|
||||||
install: altinstall bininstall
|
install: altinstall bininstall
|
||||||
|
|
|
@ -1147,6 +1147,13 @@ Extension Modules
|
||||||
Tests
|
Tests
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Issue #11651: Improve the Makefile test targets to run more of the test suite
|
||||||
|
more quickly. The --multiprocess option is now enabled by default, reducing
|
||||||
|
the amount of time needed to run the tests. "make test" and "make quicktest"
|
||||||
|
now include some resource-intensive tests, but no longer run the test suite
|
||||||
|
twice to check for bugs in .pyc generation. Tools/scripts/run_test.py provides
|
||||||
|
as an easy platform-independent way to run test suite with sensible defaults.
|
||||||
|
|
||||||
- Issue #12331: The test suite for the packaging module can now run from an
|
- Issue #12331: The test suite for the packaging module can now run from an
|
||||||
installed Python.
|
installed Python.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
"""Run Python's test suite in a fast, rigorous way.
|
||||||
|
|
||||||
|
The defaults are meant to be thorough but to skip certain resources are not
|
||||||
|
used (by default) which can consume a lot of time and resources (e.g.,
|
||||||
|
largefile) or can be distracting (e.g., audio and gui). These defaults
|
||||||
|
can be overridden by simply passing a -u option to this script.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import test.support
|
||||||
|
|
||||||
|
|
||||||
|
def is_multiprocess_flag(arg):
|
||||||
|
return arg.startswith('-j') or arg.startswith('--multiprocess')
|
||||||
|
|
||||||
|
|
||||||
|
def is_resource_use_flag(arg):
|
||||||
|
return arg.startswith('-u') or arg.startswith('--use')
|
||||||
|
|
||||||
|
|
||||||
|
def main(regrtest_args):
|
||||||
|
args = [sys.executable,
|
||||||
|
'-W', 'default', # Warnings set to 'default'
|
||||||
|
'-bb', # Warnings about bytes/bytearray
|
||||||
|
'-E', # Ignore environment variables
|
||||||
|
]
|
||||||
|
# Allow user-specified interpreter options to override our defaults.
|
||||||
|
args.extend(test.support.args_from_interpreter_flags())
|
||||||
|
args.extend(['-m', 'test', # Run the test suite
|
||||||
|
'-r', # Randomize test order
|
||||||
|
'-w', # Re-run failed tests in verbose mode
|
||||||
|
])
|
||||||
|
if not any(is_multiprocess_flag(arg) for arg in regrtest_args):
|
||||||
|
args.extend(['-j', '0']) # Use all CPU cores
|
||||||
|
if not any(is_resource_use_flag(arg) for arg in regrtest_args):
|
||||||
|
args.extend(['-u', 'all,-largefile,-audio,-gui'])
|
||||||
|
args.extend(regrtest_args)
|
||||||
|
print(' '.join(args))
|
||||||
|
os.execv(sys.executable, args)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(sys.argv[1:])
|
Loading…
Reference in New Issue