All of lore.kernel.org
 help / color / mirror / Atom feed
* [qa-tools][PATCH] testopia_update: Improvements on update action functionality
@ 2017-03-08 15:56 jose.perez.carranza
  2017-03-08 21:53 ` Aníbal Limón
  0 siblings, 1 reply; 2+ messages in thread
From: jose.perez.carranza @ 2017-03-08 15:56 UTC (permalink / raw)
  To: yocto

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))
+
+
+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
 
-- 
2.11.0



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [qa-tools][PATCH] testopia_update: Improvements on update action functionality
  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
  0 siblings, 0 replies; 2+ messages in thread
From: Aníbal Limón @ 2017-03-08 21:53 UTC (permalink / raw)
  To: jose.perez.carranza, yocto

[-- 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 --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-03-08 21:49 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 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.