summaryrefslogtreecommitdiff
path: root/odoo/modules/module.py
diff options
context:
space:
mode:
authorXavier Morel <xmo@odoo.com>2020-07-23 08:13:50 +0000
committerXavier Morel <xmo@odoo.com>2020-07-27 09:30:51 +0000
commit92903e22f893f569d4cce0214b4adef82c2fe825 (patch)
treeac5e06d7d0878008e6cae3f2abb2b4442757da8e /odoo/modules/module.py
parent297c3d83785453b6a273af324a955d9d038e989d (diff)
[IMP] core: reporting after tests
Currently there are a few issues with testing reporting (at the command-line): 1. there is a global report after at_install tests, but it gets "scrolled off" by long post_install tests, and is thus easy to miss 2. with test tags, it's easy to fat finger a typo and run 0 tests, which look like everything's running fine (no failure) To improve this, print a global report at shutdown (in `--stop-after-init` mode if tests are enabled) which recapitulates the test results *and prints a warning if no tests were run at all*. Also update the reporting collection to make this more reliable: * have `run_unit_tests` return `None` if it has run no tests, the assertion reporting machinery counts this as neither success nor failure which is exactly what we want * have load_test only report a success *if files were actually loaded* (by having `load_data` return that information) Task 2301268 closes odoo/odoo#54812 Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
Diffstat (limited to 'odoo/modules/module.py')
-rw-r--r--odoo/modules/module.py17
1 files changed, 11 insertions, 6 deletions
diff --git a/odoo/modules/module.py b/odoo/modules/module.py
index 14c9d229b40..0223eea7f63 100644
--- a/odoo/modules/module.py
+++ b/odoo/modules/module.py
@@ -575,12 +575,11 @@ class OdooTestRunner(object):
return result
current_test = None
-
def run_unit_tests(module_name, position='at_install'):
"""
:returns: ``True`` if all of ``module_name``'s tests succeeded, ``False``
- if any of them failed.
- :rtype: bool
+ if any of them failed, ``None`` if no tests were ran.
+ :rtype: bool | None
"""
global current_test
# avoid dependency hell
@@ -590,7 +589,7 @@ def run_unit_tests(module_name, position='at_install'):
threading.currentThread().testing = True
config_tags = TagsSelector(tools.config['test_tags'])
position_tag = TagsSelector(position)
- r = True
+ ran_tests = failures = False
for m in mods:
tests = unwrap_suite(unittest.TestLoader().loadTestsFromModule(m))
suite = OdooSuite(t for t in tests if position_tag.check(t) and config_tags.check(t))
@@ -604,13 +603,19 @@ def run_unit_tests(module_name, position='at_install'):
if time.time() - t0 > 5:
log_level = logging.RUNBOT
_logger.log(log_level, "%s ran %s tests in %.2fs, %s queries", m.__name__, result.testsRun, time.time() - t0, odoo.sql_db.sql_counter - t0_sql)
+ ran_tests = True
if not result.wasSuccessful():
- r = False
+ failures = True
_logger.error("Module %s: %d failures, %d errors", module_name, len(result.failures), len(result.errors))
current_test = None
threading.currentThread().testing = False
- return r
+
+ if failures:
+ return False
+ if ran_tests:
+ return True
+ return None
def unwrap_suite(test):
"""