All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Aníbal Limón" <anibal.limon@linux.intel.com>
To: jose.perez.carranza@linux.intel.com, yocto@yoctoproject.org
Subject: Re: [qa-tools][PATCH] testopia_update: Improvements on update action functionality
Date: Wed, 8 Mar 2017 15:53:05 -0600	[thread overview]
Message-ID: <58C07D41.5060102@linux.intel.com> (raw)
In-Reply-To: <20170308155659.14202-1-jose.perez.carranza@linux.intel.com>

[-- Attachment #1: Type: text/plain, Size: 7854 bytes --]



On 03/08/2017 09:56 AM, jose.perez.carranza@linux.intel.com wrote:
> From: Jose Perez Carranza <jose.perez.carranza@linux.intel.com>
> 
> Some improvements were applied when using option
> action=create :
> 
>    - Create a new option to update test runs by ID
>    - Create functions to load results and check missing test cases
>    - Add warning to use –testrun-id
>    - Improvements to update_test_run using exiting data of test run
>    - Create function get test run details by ID
>    - Create Dummy product to use on cases when specific product is not
>      relevant
> 
> Signed-off-by: Jose Perez Carranza <jose.perez.carranza@linux.intel.com>
> ---
>  testopia_update.py                  | 60 +++++++++++++++++++++++++++++--------
>  testopia_update/product/__init__.py | 17 +++++++++--
>  2 files changed, 61 insertions(+), 16 deletions(-)
> 
> diff --git a/testopia_update.py b/testopia_update.py
> index 044074a..9cd9ad1 100755
> --- a/testopia_update.py
> +++ b/testopia_update.py
> @@ -17,6 +17,29 @@ ACTIONS = ('create', 'update')
>  BRANCHES = ('master', 'jethro', 'dizzy', 'daisy', 'noexists')
>  CATEGORIES = ('AUTO', 'MANUAL')
>  
> +
> +def check_missing_tc(env, build, test_run, results):
> +    missing = product.update_test_run(test_run, results)
> +    for tcid in missing:
> +        logger.warn("%s: Test run %d, Case %d wasn't updated" %
> +                    (sys.argv[0], test_run['run_id'], tcid))

Only one comment, change the check_missing_tc to something like
update_test_run because the first time i read the function name, i
thought that do other thing.

	alimon

> +
> +
> +def load_results(results_log):
> +    if not results_log:
> +        logger.error("%s: For action update --results-log needs to be specified"
> +                     % (sys.argv[0]))
> +        sys.exit(1)
> +    if not os.path.exists(args.results_log):
> +        logger.error("%s: Results log (%s) doesn't exists."
> +                     % (sys.argv[0], results_log))
> +        sys.exit(1)
> +
> +    res = product.parse_results_log(args.results_log)
> +
> +    return res
> +
> +
>  def load_opts(args, opts_list, opts):
>      for to in opts_list:
>          if to in vars(args):
> @@ -26,6 +49,9 @@ def load_opts(args, opts_list, opts):
>          if not hasattr(opts, to):
>              logger.error("%s: Requires testopia %s in arguments or config." % \
>                  (sys.argv[0], to))
> +            if args.action == "update":
> +                logger.warn('for action create you can use only --testrun-id ' +
> +                            'and --results-log if test run was already created')
>              sys.exit(1)
>  
>  class Options(object):
> @@ -73,6 +99,9 @@ def get_args():
>      parser.add_argument('--test-plan', required=False,
>          dest="plan_name", help='Name of the test plan of the product, used when \
>                                  test plan name is different from product name.')
> +    parser.add_argument('--testrun-id', required=False,
> +        dest="trun_id", help='Number of the test run to be updated, this \
> +                              option should be used along with update action.')
>  
>      parser.add_argument('--results-log', required=False,
>          dest="results_log", help='Results log.')
> @@ -131,6 +160,21 @@ if __name__ == '__main__':
>              print("%s\n" % p.name)
>          sys.exit(0)
>  
> +    if args.action == 'update' and args.trun_id:
> +        args.product_name = 'Dummy'
> +        product = get_product_class(args.product_name, products)
> +        try:
> +            tr = product.get_existing_test_run(int(args.trun_id))
> +        except Exception as e:
> +            logger.error("%s: Problem found with Test Run %s: \n==>%s"
> +                         % (sys.argv[0], args.trun_id, e))
> +            sys.exit(1)
> +
> +        results = load_results(args.results_log)
> +        check_missing_tc(tr['environment_id'], tr['build_id'], tr, results)
> +
> +        sys.exit(0)
> +
>      load_opts(args, testopia_opts, opts)
>  
>      params = ['action', 'product_name', 'branch_name', 'env_name']
> @@ -205,16 +249,8 @@ if __name__ == '__main__':
>                  " and ID (%s)." % (sys.argv[0], template_test_run['run_id'],
>                  test_run['summary'], test_run['run_id']))
>      elif args.action == "update":
> -        if not args.results_log:
> -            logger.error("%s: For update --results-log needs to be specified." \
> -                % (sys.argv[0]))
> -            sys.exit(1)
> -        if not os.path.exists(args.results_log):
> -            logger.error("%s: Results log (%s) don't exists." \
> -                % (sys.argv[0], args.results_log))
> -            sys.exit(1)
> +        results = load_results(args.results_log)
>  
> -        results = product.parse_results_log(args.results_log)
>          test_run = product.get_test_run(test_plan, env, build, args.project_date,
>                  args.project_version, args.category_name, args.optional)
>          if not test_run:
> @@ -224,8 +260,6 @@ if __name__ == '__main__':
>                  args.optional))
>              sys.exit(1)
>  
> -        missing = product.update_test_run(env, build, test_run, results)
> -        for tcid in missing:
> -            logger.warn("%s: Product %s, Test run %d, Case %d wasn't updated" %\
> -                    (sys.argv[0], args.product_name, test_run['run_id'], tcid))
> +        check_missing_tc(env, build, test_run, results)
> +
>      sys.exit(0)
> diff --git a/testopia_update/product/__init__.py b/testopia_update/product/__init__.py
> index 18b112e..f31190c 100644
> --- a/testopia_update/product/__init__.py
> +++ b/testopia_update/product/__init__.py
> @@ -160,6 +160,7 @@ class Product(object):
>          results = {}
>          with open(log_file, "r") as f:
>              for line in f:
> +                line = line.strip()
>                  m = regex_comp.search(line)
>                  if m:
>                      results[int(m.group('case_id'))] = m.group('status')
> @@ -174,15 +175,14 @@ class Product(object):
>          else:
>              return 0
>  
> -    def update_test_run(self, env, build, tr, results):
> +    def update_test_run(self, tr, results):
>          missing = []
> -
>          test_case_ids = self._get_test_case_ids(tr)
>          for tcid in test_case_ids:
>              if tcid in results:
>                  status_id = self._get_status_id(results[tcid])
>                  self.testopia.testcaserun_update(tr['run_id'], tcid,
> -                        build['build_id'], env['environment_id'],
> +                        tr['build_id'], tr['environment_id'],
>                          case_run_status_id=status_id)
>                  continue
>  
> @@ -190,6 +190,15 @@ class Product(object):
>  
>          return missing
>  
> +    def get_existing_test_run(self, testrun_id):
> +        tr_id = self.testopia.testrun_get(testrun_id)
> +
> +        return tr_id
> +
> +class DummyProduct(Product):
> +    #Dummy product to use when specific product is not required
> +    name = 'Dummy'
> +
>  def get_products(testopia, opts, config, logger, **kwargs):
>  
>  
> @@ -220,6 +229,8 @@ def get_products(testopia, opts, config, logger, **kwargs):
>      products.append(esdk.eSDKProduct(testopia, opts, logger, config, **kwargs))
>      products.append(kernel.KernelProduct(testopia, opts, logger, config, **kwargs))
>      products.append(general_runtime.GeneralRuntimeProduct(testopia, opts, logger, config, **kwargs))
> +    products.append(DummyProduct(testopia, opts, logger, config, **kwargs))
> +
>  
>      return products
>  
> 


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

      reply	other threads:[~2017-03-08 21:49 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-08 15:56 [qa-tools][PATCH] testopia_update: Improvements on update action functionality jose.perez.carranza
2017-03-08 21:53 ` Aníbal Limón [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=58C07D41.5060102@linux.intel.com \
    --to=anibal.limon@linux.intel.com \
    --cc=jose.perez.carranza@linux.intel.com \
    --cc=yocto@yoctoproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.