From cd6aa6a48139e3d6a99545a412b620fc6b8b0712 Mon Sep 17 00:00:00 2001 From: Craig Citro Date: Thu, 2 Jan 2020 13:06:51 -0800 Subject: Allow setting `$TEST_RANDOMIZE_ORDERING_SEED` after absltest import. The goal is allowing users to customize this env var programmatically *after* all imports but *before* beginning test execution. PiperOrigin-RevId: 287881783 Change-Id: I6c1a18ff541194d1a416025ceb7fc33e1d414cf1 --- absl/testing/absltest.py | 24 ++++++++++++++-------- absl/testing/tests/absltest_randomization_test.py | 10 ++++++++- .../tests/absltest_randomization_testcase.py | 8 ++++++++ 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/absl/testing/absltest.py b/absl/testing/absltest.py index 180f904..6362bef 100644 --- a/absl/testing/absltest.py +++ b/absl/testing/absltest.py @@ -207,7 +207,12 @@ def _get_default_randomize_ordering_seed(): ValueError: Raised when the flag or env value is not one of the options above. """ - randomize = FLAGS.test_randomize_ordering_seed + if FLAGS['test_randomize_ordering_seed'].present: + randomize = FLAGS.test_randomize_ordering_seed + elif 'TEST_RANDOMIZE_ORDERING_SEED' in os.environ: + randomize = os.environ['TEST_RANDOMIZE_ORDERING_SEED'] + else: + randomize = '' if not randomize: return 0 if randomize == 'random': @@ -236,14 +241,15 @@ flags.DEFINE_string('test_srcdir', flags.DEFINE_string('test_tmpdir', get_default_test_tmpdir(), 'Directory for temporary testing files', allow_override_cpp=True) -flags.DEFINE_string('test_randomize_ordering_seed', - os.environ.get('TEST_RANDOMIZE_ORDERING_SEED', ''), - 'If positive, use this as a seed to randomize the ' - 'execution order for test cases. If "random", pick a ' - 'random seed to use. If 0 or not set, do not randomize ' - 'test case execution order. This flag also overrides ' - 'the TEST_RANDOMIZE_ORDERING_SEED environment variable.', - allow_override_cpp=True) +flags.DEFINE_string( + 'test_randomize_ordering_seed', + '', + 'If positive, use this as a seed to randomize the ' + 'execution order for test cases. If "random", pick a ' + 'random seed to use. If 0 or not set, do not randomize ' + 'test case execution order. This flag also overrides ' + 'the TEST_RANDOMIZE_ORDERING_SEED environment variable.', + allow_override_cpp=True) flags.DEFINE_string('xml_output_file', '', 'File to store XML test results') diff --git a/absl/testing/tests/absltest_randomization_test.py b/absl/testing/tests/absltest_randomization_test.py index 62ea2c2..16b330c 100644 --- a/absl/testing/tests/absltest_randomization_test.py +++ b/absl/testing/tests/absltest_randomization_test.py @@ -37,6 +37,7 @@ class TestOrderRandomizationTest(parameterized.TestCase): """ def setUp(self): + super(TestOrderRandomizationTest, self).setUp() self._test_name = 'absl/testing/tests/absltest_randomization_testcase' def _run_test(self, extra_argv, extra_env): @@ -107,7 +108,14 @@ class TestOrderRandomizationTest(parameterized.TestCase): 'env': { 'TEST_RANDOMIZE_ORDERING_SEED': '1' }, - },) + }, + { + 'argv': [], + 'env': { + 'LATE_SET_TEST_RANDOMIZE_ORDERING_SEED': '1' + }, + }, + ) def test_fixed_seed(self, argv, env): output, tests, exit_code = self._run_test(argv, env) self.assertEqual(0, exit_code, msg='command output: ' + output) diff --git a/absl/testing/tests/absltest_randomization_testcase.py b/absl/testing/tests/absltest_randomization_testcase.py index 25ce228..18b20ff 100644 --- a/absl/testing/tests/absltest_randomization_testcase.py +++ b/absl/testing/tests/absltest_randomization_testcase.py @@ -18,11 +18,19 @@ from __future__ import absolute_import from __future__ import division from __future__ import print_function +import os import sys from absl.testing import absltest +# This stanza exercises setting $TEST_RANDOMIZE_ORDERING_SEED *after* importing +# the absltest library. +if os.environ.get('LATE_SET_TEST_RANDOMIZE_ORDERING_SEED', ''): + os.environ['TEST_RANDOMIZE_ORDERING_SEED'] = os.environ[ + 'LATE_SET_TEST_RANDOMIZE_ORDERING_SEED'] + + class ClassA(absltest.TestCase): def test_a(self): -- cgit v1.2.3