[OE-core] [PATCH] context: Include a command line argument to run all except certain tests
Leonardo Sandoval
leonardo.sandoval.gonzalez at linux.intel.com
Mon Aug 7 20:42:56 UTC 2017
On Mon, 2017-08-07 at 15:29 -0500, Aníbal Limón wrote:
> Hi,
>
> The code looks ok but i prefer to implement this kind of feature inside
> loader instead of at context module, this is because the oeqa loader has
> all the logic to get tests and filter it if is necessary.
I included it at context* because the tests to be skipped come from the
command line and command line stuff is manage there.
>
> Cheers,
> Anibal
>
> On 08/02/2017 12:22 PM, Leoanardo Sandoval wrote:
> > Useful command line argument (-R, which is the oposite of current -r) that allows
> > to run all test cases except the ones indicated through the command line.
> >
> > Some command line examples:
> >
> > * Run all except the distro test case:
> > $ oe-selftest -R distrodata
> >
> > * Run all except the archiver test case and a single bblayers unit test
> > $ oe-selftest -R archiver bblayers.BitbakeLayers.test_bitbakelayers_add_remove
> >
> > [YOCTO #11847]
> >
> > Signed-off-by: Leoanardo Sandoval <leonardo.sandoval.gonzalez at linux.intel.com>
> > ---
> > meta/lib/oeqa/core/context.py | 20 +++++++++++++++++---
> > meta/lib/oeqa/selftest/context.py | 11 ++++++++---
> > 2 files changed, 25 insertions(+), 6 deletions(-)
> >
> > diff --git a/meta/lib/oeqa/core/context.py b/meta/lib/oeqa/core/context.py
> > index 422e289992..acd547416f 100644
> > --- a/meta/lib/oeqa/core/context.py
> > +++ b/meta/lib/oeqa/core/context.py
> > @@ -41,6 +41,14 @@ class OETestContext(object):
> >
> > return modules
> >
> > + def skipTests(self, skips):
> > + if not skips:
> > + return
> > + for test in self.suites:
> > + for skip in skips:
> > + if test.id().startswith(skip):
> > + setattr(test, 'setUp', lambda: test.skipTest('Skip by the command line argument "%s"' % skip))
> > +
> > def loadTests(self, module_paths, modules=[], tests=[],
> > modules_manifest="", modules_required=[], filters={}):
> > if modules_manifest:
> > @@ -50,9 +58,12 @@ class OETestContext(object):
> > modules_required, filters)
> > self.suites = self.loader.discover()
> >
> > - def runTests(self):
> > + def runTests(self, skips=[]):
> > self.runner = self.runnerClass(self, descriptions=False, verbosity=2)
> >
> > + # Dinamically skip those tests specified though arguments
> > + self.skipTests(skips)
> > +
> > self._run_start_time = time.time()
> > result = self.runner.run(self.suites)
> > self._run_end_time = time.time()
> > @@ -128,7 +139,8 @@ class OETestContextExecutor(object):
> > self.tc_kwargs = {}
> > self.tc_kwargs['init'] = {}
> > self.tc_kwargs['load'] = {}
> > - self.tc_kwargs['run'] = {}
> > + self.tc_kwargs['list'] = {}
> > + self.tc_kwargs['run'] = {}
> >
> > self.tc_kwargs['init']['logger'] = self._setup_logger(logger, args)
> > if args.test_data_file:
> > @@ -143,6 +155,8 @@ class OETestContextExecutor(object):
> > else:
> > self.tc_kwargs['load']['modules'] = []
> >
> > + self.tc_kwargs['run']['skips'] = []
> > +
> > self.module_paths = args.CASES_PATHS
> >
> > def _pre_run(self):
> > @@ -159,7 +173,7 @@ class OETestContextExecutor(object):
> > sys.exit(1)
> >
> > if args.list_tests:
> > - rc = self.tc.listTests(args.list_tests, **self.tc_kwargs['run'])
> > + rc = self.tc.listTests(args.list_tests, **self.tc_kwargs['list'])
> > else:
> > self._pre_run()
> > rc = self.tc.runTests(**self.tc_kwargs['run'])
> > diff --git a/meta/lib/oeqa/selftest/context.py b/meta/lib/oeqa/selftest/context.py
> > index 990c761f29..9e90d3c256 100644
> > --- a/meta/lib/oeqa/selftest/context.py
> > +++ b/meta/lib/oeqa/selftest/context.py
> > @@ -25,14 +25,14 @@ class OESelftestTestContext(OETestContext):
> > self.custommachine = None
> > self.config_paths = config_paths
> >
> > - def runTests(self, machine=None):
> > + def runTests(self, machine=None, skips=[]):
> > if machine:
> > self.custommachine = machine
> > if machine == 'random':
> > self.custommachine = choice(self.machines)
> > self.logger.info('Run tests with custom MACHINE set to: %s' % \
> > self.custommachine)
> > - return super(OESelftestTestContext, self).runTests()
> > + return super(OESelftestTestContext, self).runTests(skips)
> >
> > def listTests(self, display_type, machine=None):
> > return super(OESelftestTestContext, self).listTests(display_type)
> > @@ -51,6 +51,9 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
> > group.add_argument('-a', '--run-all-tests', default=False,
> > action="store_true", dest="run_all_tests",
> > help='Run all (unhidden) tests')
> > + group.add_argument('-R', '--skip-tests', required=False, action='store',
> > + nargs='+', dest="skips", default=None,
> > + help='Run all (unhidden) tests except the ones specified. Format should be <module>[.<class>[.<test_method>]]')
> > group.add_argument('-r', '--run-tests', required=False, action='store',
> > nargs='+', dest="run_tests", default=None,
> > help='Select what tests to run (modules, classes or test methods). Format should be: <module>.<class>.<test_method>')
> > @@ -133,6 +136,8 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
> > copyfile(self.tc_kwargs['init']['config_paths']['bblayers'],
> > self.tc_kwargs['init']['config_paths']['bblayers_backup'])
> >
> > + self.tc_kwargs['run']['skips'] = args.skips
> > +
> > def _pre_run(self):
> > def _check_required_env_variables(vars):
> > for var in vars:
> > @@ -203,7 +208,7 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
> > sys.exit(1)
> >
> > if args.list_tests:
> > - rc = self.tc.listTests(args.list_tests, **self.tc_kwargs['run'])
> > + rc = self.tc.listTests(args.list_tests, **self.tc_kwargs['list'])
> > else:
> > self._pre_run()
> > rc = self.tc.runTests(**self.tc_kwargs['run'])
> >
More information about the Openembedded-core
mailing list