Order the overall test case list in the resulting test suite by priority (by default all test cases do have a priority of 50). In a second round move test cases with test dependencies accordingly. New method 'orderSuites' can be explictly overridden to disable usage of the new 'priority' decorator.
Signed-off-by: Konrad Weihmann <[email protected]> --- v2: - mind test cases without any decorator - rename new method to orderSuites meta/lib/oeqa/core/context.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/meta/lib/oeqa/core/context.py b/meta/lib/oeqa/core/context.py index 2abe353d27..2ca9ec0c56 100644 --- a/meta/lib/oeqa/core/context.py +++ b/meta/lib/oeqa/core/context.py @@ -66,6 +66,34 @@ class OETestContext(object): if (cid + '.').startswith(skip + '.'): setattr(tclass, 'setUpHooker', skipfuncgen('Skip by the command line argument "%s"' % skip)) + def orderSuites(self, suites): + _tests = {} + for _test in suites._tests: + _prio = 50 + _depends = [] + for x in getattr(_test, "decorators", []): + if hasattr(x, "depends"): + _depends += getattr(x, "depends") + if hasattr(x, "priority"): + _prio = getattr(x, "priority") + _tests[_test.id()] = {"prio": _prio, "deps": _depends, "ref": _test} + + def set_suite_prio(suites, suite): + for dep in suite["deps"]: + if dep not in suites: + try: + dep = [x for x in suites.keys() if x.endswith(dep)][0] + except: + continue + suite["prio"] = max(suite["prio"], set_suite_prio(suites, suites[dep]) + 1) + return suite["prio"] + + for k, v in _tests.items(): + _tests[k]["prio"] = set_suite_prio(_tests, v) + + suites._tests = [x[1]["ref"] for x in sorted(_tests.items(), key=lambda tup: tup[1]["prio"])] + return suites + def loadTests(self, module_paths, modules=[], tests=[], modules_manifest="", modules_required=[], **kwargs): if modules_manifest: @@ -73,7 +101,7 @@ class OETestContext(object): self.loader = self.loaderClass(self, module_paths, modules, tests, modules_required, **kwargs) - self.suites = self.loader.discover() + self.suites = self.orderSuites(self.loader.discover()) def prepareSuite(self, suites, processes): return suites -- 2.25.1
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#147319): https://lists.openembedded.org/g/openembedded-core/message/147319 Mute This Topic: https://lists.openembedded.org/mt/80137093/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
