diff options
author | PCMan <pcman.tw@gmail.com> | 2021-12-28 10:47:39 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-27 18:47:39 -0800 |
commit | 76b4a21da7bef01646c159ae7770dc431a2efcff (patch) | |
tree | 41b19a327b5bc4e6025d59ff8d13b17af3b0450b /tests/mobly/base_test_test.py | |
parent | bb94c868c38f59b361540c4bb44220f09b256828 (diff) | |
download | mobly-76b4a21da7bef01646c159ae7770dc431a2efcff.tar.gz |
Add basic `retry()` and `repeat()` support to generated tests. (#766)
When generating tests, if the `test_logic` function is decorated with
either `retry()` or `repeat()` decorators, apply the settings to the
generated test methods.
Diffstat (limited to 'tests/mobly/base_test_test.py')
-rwxr-xr-x | tests/mobly/base_test_test.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/mobly/base_test_test.py b/tests/mobly/base_test_test.py index c8f5a1e..ebac0e0 100755 --- a/tests/mobly/base_test_test.py +++ b/tests/mobly/base_test_test.py @@ -2291,6 +2291,27 @@ class BaseTestTest(unittest.TestCase): for i, record in enumerate(bt_cls.results.passed): self.assertEqual(record.test_name, f'test_something_{i}') + def test_repeat_generated(self): + repeat_count = 3 + + class MockBaseTest(base_test.BaseTestClass): + + @base_test.repeat(count=repeat_count) + def _run_test_logic(self, arg): + pass + + def setup_generated_tests(self): + self.generate_tests( + self._run_test_logic, + name_func=lambda arg: f'test_generated_{arg}', + arg_sets=[(1,)]) + + bt_cls = MockBaseTest(self.mock_test_cls_configs) + bt_cls.run() + self.assertEqual(repeat_count, len(bt_cls.results.passed)) + for i, record in enumerate(bt_cls.results.passed): + self.assertEqual(record.test_name, f'test_generated_1_{i}') + def test_repeat_with_failures(self): repeat_count = 3 mock_action = mock.MagicMock() @@ -2456,6 +2477,38 @@ class BaseTestTest(unittest.TestCase): self.assertIs(error_record_1, error_record_2.retry_parent) self.assertIs(error_record_2, pass_record.retry_parent) + def test_retry_generated_test_last_pass(self): + max_count = 3 + mock_action = mock.MagicMock( + side_effect = [Exception('Fail 1'), Exception('Fail 2'), None]) + + class MockBaseTest(base_test.BaseTestClass): + + @base_test.retry(max_count=max_count) + def _run_test_logic(self, arg): + mock_action() + + def setup_generated_tests(self): + self.generate_tests( + self._run_test_logic, + name_func=lambda arg: f'test_generated_{arg}', + arg_sets=[(1,)]) + + bt_cls = MockBaseTest(self.mock_test_cls_configs) + bt_cls.run() + self.assertTrue(bt_cls.results.is_all_pass, + 'This test run should be considered pass.') + self.assertEqual(3, len(bt_cls.results.executed)) + self.assertEqual(1, len(bt_cls.results.passed)) + pass_record = bt_cls.results.passed[0] + self.assertEqual(pass_record.test_name, f'test_generated_1_retry_2') + self.assertEqual(2, len(bt_cls.results.error)) + error_record_1, error_record_2 = bt_cls.results.error + self.assertEqual(error_record_1.test_name, 'test_generated_1') + self.assertEqual(error_record_2.test_name, 'test_generated_1_retry_1') + self.assertIs(error_record_1, error_record_2.retry_parent) + self.assertIs(error_record_2, pass_record.retry_parent) + def test_retry_all_fail(self): max_count = 3 mock_action = mock.MagicMock() |