mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	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
					
				
					 4 changed files with 75 additions and 16 deletions
				
			
		|  | @ -133,6 +133,8 @@ | ||||||
| 
 | 
 | ||||||
|     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. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										45
									
								
								Tools/scripts/run_tests.py
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										45
									
								
								Tools/scripts/run_tests.py
									
										
									
									
									
										Executable file
									
								
							|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Nadeem Vawda
						Nadeem Vawda