0
0
mirror of https://github.com/python/cpython.git synced 2024-11-24 17:47:13 +01:00

gh-108388: Split test_multiprocessing_spawn (#108396)

Split test_multiprocessing_fork, test_multiprocessing_forkserver and
test_multiprocessing_spawn into test packages. Each package is made
of 4 sub-tests: processes, threads, manager and misc. It allows
running more tests in parallel and so reduce the total test duration.
This commit is contained in:
Victor Stinner 2023-08-24 05:35:39 +02:00 committed by GitHub
parent 174e9da083
commit aa9a359ca2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 117 additions and 27 deletions

View File

@ -6126,7 +6126,8 @@ class ThreadsMixin(BaseMixin):
# Functions used to create test cases from the base ones in this module # Functions used to create test cases from the base ones in this module
# #
def install_tests_in_module_dict(remote_globs, start_method): def install_tests_in_module_dict(remote_globs, start_method,
only_type=None, exclude_types=False):
__module__ = remote_globs['__name__'] __module__ = remote_globs['__name__']
local_globs = globals() local_globs = globals()
ALL_TYPES = {'processes', 'threads', 'manager'} ALL_TYPES = {'processes', 'threads', 'manager'}
@ -6139,6 +6140,10 @@ def install_tests_in_module_dict(remote_globs, start_method):
continue continue
assert set(base.ALLOWED_TYPES) <= ALL_TYPES, base.ALLOWED_TYPES assert set(base.ALLOWED_TYPES) <= ALL_TYPES, base.ALLOWED_TYPES
for type_ in base.ALLOWED_TYPES: for type_ in base.ALLOWED_TYPES:
if only_type and type_ != only_type:
continue
if exclude_types:
continue
newname = 'With' + type_.capitalize() + name[1:] newname = 'With' + type_.capitalize() + name[1:]
Mixin = local_globs[type_.capitalize() + 'Mixin'] Mixin = local_globs[type_.capitalize() + 'Mixin']
class Temp(base, Mixin, unittest.TestCase): class Temp(base, Mixin, unittest.TestCase):
@ -6149,6 +6154,9 @@ def install_tests_in_module_dict(remote_globs, start_method):
Temp.__module__ = __module__ Temp.__module__ = __module__
remote_globs[newname] = Temp remote_globs[newname] = Temp
elif issubclass(base, unittest.TestCase): elif issubclass(base, unittest.TestCase):
if only_type:
continue
class Temp(base, object): class Temp(base, object):
pass pass
Temp.__name__ = Temp.__qualname__ = name Temp.__name__ = Temp.__qualname__ = name

View File

@ -132,6 +132,9 @@ PROGRESS_MIN_TIME = 30.0 # seconds
SPLITTESTDIRS = { SPLITTESTDIRS = {
"test_asyncio", "test_asyncio",
"test_multiprocessing_fork",
"test_multiprocessing_forkserver",
"test_multiprocessing_spawn",
} }
# Storage of uncollectable objects # Storage of uncollectable objects

View File

@ -1,7 +1,6 @@
import unittest import os.path
import test._test_multiprocessing
import sys import sys
import unittest
from test import support from test import support
if support.PGO: if support.PGO:
@ -13,7 +12,5 @@ if sys.platform == "win32":
if sys.platform == 'darwin': if sys.platform == 'darwin':
raise unittest.SkipTest("test may crash on macOS (bpo-33725)") raise unittest.SkipTest("test may crash on macOS (bpo-33725)")
test._test_multiprocessing.install_tests_in_module_dict(globals(), 'fork') def load_tests(*args):
return support.load_package_tests(os.path.dirname(__file__), *args)
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,7 @@
import unittest
from test._test_multiprocessing import install_tests_in_module_dict
install_tests_in_module_dict(globals(), 'fork', only_type="manager")
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,7 @@
import unittest
from test._test_multiprocessing import install_tests_in_module_dict
install_tests_in_module_dict(globals(), 'fork', exclude_types=True)
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,7 @@
import unittest
from test._test_multiprocessing import install_tests_in_module_dict
install_tests_in_module_dict(globals(), 'fork', only_type="processes")
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,7 @@
import unittest
from test._test_multiprocessing import install_tests_in_module_dict
install_tests_in_module_dict(globals(), 'fork', only_type="threads")
if __name__ == '__main__':
unittest.main()

View File

@ -1,7 +1,6 @@
import unittest import os.path
import test._test_multiprocessing
import sys import sys
import unittest
from test import support from test import support
if support.PGO: if support.PGO:
@ -10,7 +9,5 @@ if support.PGO:
if sys.platform == "win32": if sys.platform == "win32":
raise unittest.SkipTest("forkserver is not available on Windows") raise unittest.SkipTest("forkserver is not available on Windows")
test._test_multiprocessing.install_tests_in_module_dict(globals(), 'forkserver') def load_tests(*args):
return support.load_package_tests(os.path.dirname(__file__), *args)
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,7 @@
import unittest
from test._test_multiprocessing import install_tests_in_module_dict
install_tests_in_module_dict(globals(), 'forkserver', only_type="manager")
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,7 @@
import unittest
from test._test_multiprocessing import install_tests_in_module_dict
install_tests_in_module_dict(globals(), 'forkserver', exclude_types=True)
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,7 @@
import unittest
from test._test_multiprocessing import install_tests_in_module_dict
install_tests_in_module_dict(globals(), 'forkserver', only_type="processes")
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,7 @@
import unittest
from test._test_multiprocessing import install_tests_in_module_dict
install_tests_in_module_dict(globals(), 'forkserver', only_type="threads")
if __name__ == '__main__':
unittest.main()

View File

@ -1,12 +0,0 @@
import unittest
import test._test_multiprocessing
from test import support
if support.PGO:
raise unittest.SkipTest("test is not helpful for PGO")
test._test_multiprocessing.install_tests_in_module_dict(globals(), 'spawn')
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,9 @@
import os.path
import unittest
from test import support
if support.PGO:
raise unittest.SkipTest("test is not helpful for PGO")
def load_tests(*args):
return support.load_package_tests(os.path.dirname(__file__), *args)

View File

@ -0,0 +1,7 @@
import unittest
from test._test_multiprocessing import install_tests_in_module_dict
install_tests_in_module_dict(globals(), 'spawn', only_type="manager")
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,7 @@
import unittest
from test._test_multiprocessing import install_tests_in_module_dict
install_tests_in_module_dict(globals(), 'spawn', exclude_types=True)
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,7 @@
import unittest
from test._test_multiprocessing import install_tests_in_module_dict
install_tests_in_module_dict(globals(), 'spawn', only_type="processes")
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,7 @@
import unittest
from test._test_multiprocessing import install_tests_in_module_dict
install_tests_in_module_dict(globals(), 'spawn', only_type="threads")
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,4 @@
Split test_multiprocessing_fork, test_multiprocessing_forkserver and
test_multiprocessing_spawn into test packages. Each package is made of 4
sub-tests: processes, threads, manager and misc. It allows running more tests
in parallel and so reduce the total test duration. Patch by Victor Stinner.