mirror of
https://github.com/python/cpython.git
synced 2025-10-25 18:54:53 +00:00
gh-137242: Add a --no-randomize option, and use it in Android CI (#138649)
Adds a --no-randomize option to the CI runner, so that randomisation can be easily disabled for --fast-ci and --slow-ci configurations on single-threaded testing platforms like Android, iOS, and Emscripten. --------- Co-authored-by: Malcolm Smith <smith@chaquo.com>
This commit is contained in:
parent
22cb9ba8f9
commit
01895d233b
3 changed files with 40 additions and 7 deletions
|
|
@ -737,12 +737,10 @@ def ci(context):
|
||||||
# Prove the package is self-contained by using it to run the tests.
|
# Prove the package is self-contained by using it to run the tests.
|
||||||
shutil.unpack_archive(package_path, temp_dir)
|
shutil.unpack_archive(package_path, temp_dir)
|
||||||
|
|
||||||
# Arguments are similar to --fast-ci, but in single-process mode.
|
# Randomization is disabled because order-dependent failures are
|
||||||
|
# much less likely to pass on a rerun in single-process mode.
|
||||||
launcher_args = ["--managed", "maxVersion", "-v"]
|
launcher_args = ["--managed", "maxVersion", "-v"]
|
||||||
test_args = [
|
test_args = ["--fast-ci", "--single-process", "--no-randomize"]
|
||||||
"--single-process", "--fail-env-changed", "--rerun", "--slowest",
|
|
||||||
"--verbose3", "-u", "all,-cpu", "--timeout=600"
|
|
||||||
]
|
|
||||||
run(
|
run(
|
||||||
["./android.py", "test", *launcher_args, "--", *test_args],
|
["./android.py", "test", *launcher_args, "--", *test_args],
|
||||||
cwd=temp_dir
|
cwd=temp_dir
|
||||||
|
|
|
||||||
|
|
@ -271,6 +271,9 @@ def _create_parser():
|
||||||
group = parser.add_argument_group('Selecting tests')
|
group = parser.add_argument_group('Selecting tests')
|
||||||
group.add_argument('-r', '--randomize', action='store_true',
|
group.add_argument('-r', '--randomize', action='store_true',
|
||||||
help='randomize test execution order.' + more_details)
|
help='randomize test execution order.' + more_details)
|
||||||
|
group.add_argument('--no-randomize', dest='no_randomize', action='store_true',
|
||||||
|
help='do not randomize test execution order, even if '
|
||||||
|
'it would be implied by another option')
|
||||||
group.add_argument('--prioritize', metavar='TEST1,TEST2,...',
|
group.add_argument('--prioritize', metavar='TEST1,TEST2,...',
|
||||||
action='append', type=priority_list,
|
action='append', type=priority_list,
|
||||||
help='select these tests first, even if the order is'
|
help='select these tests first, even if the order is'
|
||||||
|
|
@ -539,6 +542,8 @@ def _parse_args(args, **kwargs):
|
||||||
ns.use_resources.append(r)
|
ns.use_resources.append(r)
|
||||||
if ns.random_seed is not None:
|
if ns.random_seed is not None:
|
||||||
ns.randomize = True
|
ns.randomize = True
|
||||||
|
if ns.no_randomize:
|
||||||
|
ns.randomize = False
|
||||||
if ns.verbose:
|
if ns.verbose:
|
||||||
ns.header = True
|
ns.header = True
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -182,6 +182,22 @@ def test_randomize(self):
|
||||||
self.assertTrue(regrtest.randomize)
|
self.assertTrue(regrtest.randomize)
|
||||||
self.assertIsInstance(regrtest.random_seed, int)
|
self.assertIsInstance(regrtest.random_seed, int)
|
||||||
|
|
||||||
|
def test_no_randomize(self):
|
||||||
|
ns = self.parse_args([])
|
||||||
|
self.assertIs(ns.randomize, False)
|
||||||
|
|
||||||
|
ns = self.parse_args(["--randomize"])
|
||||||
|
self.assertIs(ns.randomize, True)
|
||||||
|
|
||||||
|
ns = self.parse_args(["--no-randomize"])
|
||||||
|
self.assertIs(ns.randomize, False)
|
||||||
|
|
||||||
|
ns = self.parse_args(["--randomize", "--no-randomize"])
|
||||||
|
self.assertIs(ns.randomize, False)
|
||||||
|
|
||||||
|
ns = self.parse_args(["--no-randomize", "--randomize"])
|
||||||
|
self.assertIs(ns.randomize, False)
|
||||||
|
|
||||||
def test_randseed(self):
|
def test_randseed(self):
|
||||||
ns = self.parse_args(['--randseed', '12345'])
|
ns = self.parse_args(['--randseed', '12345'])
|
||||||
self.assertEqual(ns.random_seed, 12345)
|
self.assertEqual(ns.random_seed, 12345)
|
||||||
|
|
@ -189,6 +205,10 @@ def test_randseed(self):
|
||||||
self.checkError(['--randseed'], 'expected one argument')
|
self.checkError(['--randseed'], 'expected one argument')
|
||||||
self.checkError(['--randseed', 'foo'], 'invalid int value')
|
self.checkError(['--randseed', 'foo'], 'invalid int value')
|
||||||
|
|
||||||
|
ns = self.parse_args(['--randseed', '12345', '--no-randomize'])
|
||||||
|
self.assertEqual(ns.random_seed, 12345)
|
||||||
|
self.assertFalse(ns.randomize)
|
||||||
|
|
||||||
def test_fromfile(self):
|
def test_fromfile(self):
|
||||||
for opt in '-f', '--fromfile':
|
for opt in '-f', '--fromfile':
|
||||||
with self.subTest(opt=opt):
|
with self.subTest(opt=opt):
|
||||||
|
|
@ -428,11 +448,12 @@ def create_regrtest(self, args):
|
||||||
|
|
||||||
return regrtest
|
return regrtest
|
||||||
|
|
||||||
def check_ci_mode(self, args, use_resources, rerun=True):
|
def check_ci_mode(self, args, use_resources, *, rerun=True, randomize=True):
|
||||||
regrtest = self.create_regrtest(args)
|
regrtest = self.create_regrtest(args)
|
||||||
self.assertEqual(regrtest.num_workers, -1)
|
self.assertEqual(regrtest.num_workers, -1)
|
||||||
self.assertEqual(regrtest.want_rerun, rerun)
|
self.assertEqual(regrtest.want_rerun, rerun)
|
||||||
self.assertTrue(regrtest.randomize)
|
self.assertEqual(regrtest.fail_rerun, False)
|
||||||
|
self.assertEqual(regrtest.randomize, randomize)
|
||||||
self.assertIsInstance(regrtest.random_seed, int)
|
self.assertIsInstance(regrtest.random_seed, int)
|
||||||
self.assertTrue(regrtest.fail_env_changed)
|
self.assertTrue(regrtest.fail_env_changed)
|
||||||
self.assertTrue(regrtest.print_slowest)
|
self.assertTrue(regrtest.print_slowest)
|
||||||
|
|
@ -469,6 +490,15 @@ def test_slow_ci(self):
|
||||||
regrtest = self.check_ci_mode(args, use_resources)
|
regrtest = self.check_ci_mode(args, use_resources)
|
||||||
self.assertEqual(regrtest.timeout, 20 * 60)
|
self.assertEqual(regrtest.timeout, 20 * 60)
|
||||||
|
|
||||||
|
def test_ci_no_randomize(self):
|
||||||
|
all_resources = set(cmdline.ALL_RESOURCES)
|
||||||
|
self.check_ci_mode(
|
||||||
|
["--slow-ci", "--no-randomize"], all_resources, randomize=False
|
||||||
|
)
|
||||||
|
self.check_ci_mode(
|
||||||
|
["--fast-ci", "--no-randomize"], all_resources - {'cpu'}, randomize=False
|
||||||
|
)
|
||||||
|
|
||||||
def test_dont_add_python_opts(self):
|
def test_dont_add_python_opts(self):
|
||||||
args = ['--dont-add-python-opts']
|
args = ['--dont-add-python-opts']
|
||||||
ns = cmdline._parse_args(args)
|
ns = cmdline._parse_args(args)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue