All of lore.kernel.org
 help / color / mirror / Atom feed
* [qa-tools][PATCH v2] testopia_update: Improvements on update action functionality
@ 2017-03-08 21:58 jose.perez.carranza
  0 siblings, 0 replies; only message in thread
From: jose.perez.carranza @ 2017-03-08 21:58 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 update test run
   - 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..50c3325 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 update_test_run(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)
+        update_test_run(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))
+        update_test_run(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] only message in thread

only message in thread, other threads:[~2017-03-08 21:58 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-08 21:58 [qa-tools][PATCH v2] testopia_update: Improvements on update action functionality jose.perez.carranza

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.