def __execTaskJob(taskInfo):
     taskInstanceId = taskInfo.get("instanceid")
     logger.info("exec task [{0}]:".format(taskInstanceId))
     args = {}
     args.setdefault("instanceId", taskInstanceId)
     args.setdefault("build_start", datetime.datetime.now())
     result = DataResult()
     taskGlobalStatus = "Error"
     try:
         #set metaq queue status is received
         metaq_args = {}
         metaq_args.setdefault("status", "2")
         #hostname
         hostname = socket.gethostname()
         ip = socket.gethostbyname(hostname)
         metaq_args.setdefault("running_consumer",
                               "{0}|{1}".format(ip, hostname))
         metaq_args.setdefault("msg_id", os.getpid())
         metaq_args.setdefault("taskId", taskInfo.get("id"))
         TaskMetaqInfoDaoInterface().updateTaskInfo(metaq_args)
         #query task instance info by id
         logger.info("query task instance [{0}] ...".format(taskInstanceId))
         dataResult = TestCaseInstanceDaoInterface(
         ).getTestInstanceInfoById(args)
         if dataResult.getSuccess() and len(dataResult.getMessage()) > 0:
             suiteId = dataResult.getMessage()[0].get("suite_id")
             userId = dataResult.getMessage()[0].get("create_userid")
             #set instance Running
             args.setdefault("build_end", None)
             args.setdefault("status", "Running")
             TestCaseInstanceDaoInterface().updateTestInstance(args)
             logger.info("query suite [{0}]by instance [{1}] ...".format(
                 suiteId, taskInstanceId))
             dataResult = TestSuiteDaoInterface().getSuiteInfoById(
                 {"suiteId": suiteId})
             if dataResult.getSuccess() and len(
                     dataResult.getMessage()) > 0:
                 envId = dataResult.getMessage()[0].get("envid")
                 caseIds = dataResult.getMessage()[0].get("testcaseids")
                 #get global env param
                 envResult = EnvironmentDaoInterface(
                 ).getEnvironmentInfoById({"envId": envId})
                 if envResult.getSuccess() and len(
                         envResult.getMessage()) <= 0:
                     logger.error(
                         "Test suite [{0}]:No env config".format(suiteId))
                     taskGlobalStatus = "Failed"
                     return result
                 if caseIds is None or len(caseIds) == 0:
                     logger.info("Test suite [{0}]:No case".format(suiteId))
                     taskGlobalStatus = "Success"
                 else:
                     # get init case for save session
                     initResult = TaskCenterService.__getInitCaseJob(
                         caseIds)
                     if not initResult.getSuccess():
                         logger.error(
                             "Test suite [{0}]:No init case".format(
                                 suiteId))
                         taskGlobalStatus = "Failed"
                         return result
                     initCaseInfo = initResult.getMessage()[0]
                     initCaseId = initCaseInfo.get("id")
                     #return request Object
                     initRequest = TaskCenterService.__execTaskCaseJob(
                         initCaseId, userId, envResult[0], None, True,
                         taskInstanceId, "init")
                     for caseId in list(caseIds):
                         if caseId == initCaseId:
                             continue
                         dataResult = TestCaseInstanceDaoInterface(
                         ).getTestInstanceInfoById(args)
                         if dataResult.getMessage()[0].get(
                                 "status") not in ["Stopped", "TimeOut"]:
                             execResult = TaskCenterService.__execTaskCaseJob(
                                 caseId, None, envResult[0],
                                 initRequest.getMessage(), True,
                                 taskInstanceId, None)
                             if not execResult.getSuccess():
                                 #set instance db
                                 taskGlobalStatus = execResult.getMessage()
                                 return result
                         else:
                             logger.error(
                                 "Task instance [{0}] is stopped".format(
                                     args.get("instanceId")))
                             taskGlobalStatus = dataResult.getMessage(
                             )[0].get("status")
                             return result
                     taskGlobalStatus = "Success"
                     result.setSuccess(True)
                     return result
     except Exception as e:
         logger.error("Exception:{0}".format(traceback.format_exc()))
         return result
     finally:
         args.setdefault("build_end", datetime.datetime.now())
         args.setdefault("status", taskGlobalStatus)
         TestCaseInstanceDaoInterface().updateTestInstance(args)
 def __execTaskCaseJob(caseId,userId=None,envConfig=False,requestObject=None,init=False, \
                       instanceId=None,caseName=None):
     if not envConfig:
         caseInfo = TestCaseDaoInterface().getCaseInfosById(
             {"caseId", caseId})
         if caseInfo.getSuccess() and len(caseInfo.getMessage()) > 0:
             envId = caseInfo.getMessage()[0].get("envid")
             envResult = EnvironmentDaoInterface().getEnvironmentInfoById(
                 {"envId": envId})
             if envResult.getSuccess() and len(envResult.getMessage()) <= 0:
                 logger.error(
                     "Test envId [{0}]:No env config".format(envId))
                 return
             envConfig = envResult[0]
         else:
             return
     if init:
         saveSession = False
     elif requestObject is not None:
         saveSession = False
     else:
         saveSession = True
     exec_start_flag = time.time()
     exec_start = datetime.datetime.now()
     contentResult = CaseContentDaoInterface().getContentInfosByCaseId(
         caseId)
     Presult = {}
     statusFlag = True
     if contentResult.getSuccess() and len(contentResult.getMessage()) > 0:
         for content in sorted(contentResult.getMessage(),
                               key=attrgetter('step')):
             #TODO "DATARESULT" + STEP
             response = None
             #request api
             if content.get("type") == 0:
                 if envConfig.get("datatemplate").endswith("/"):
                     url = envConfig.get("datatemplate")[:-1] + content.get(
                         "url")
                 else:
                     url = envConfig.get("datatemplate") + content.get(
                         "url")
                 params = TaskCenterService.__rendeTemplate(
                     content.get("request_params"),
                     envConfig.get("datatemplate"), Presult)
                 requestUtil = RequestBase(url=url,
                                           method=content.get("method"),
                                           format=content.get("format"),
                                           params=params,
                                           object=requestObject,
                                           userId=userId,
                                           saveSession=saveSession)
                 response, obj = requestUtil.route()
                 try:
                     response = json.loads(response)
                 except Exception as e:
                     logger.warn(
                         "return result is not json:{0} Exception:{1}".
                         format(response, e))
             #request sql
             elif content.get("type") == 1:
                 dbConfig = {}
                 dbConfig.setdefault("db", envConfig.get("dbname"))
                 dbConfig.setdefault("host", envConfig.get("dbhostname"))
                 dbConfig.setdefault("user", envConfig.get("dbusername"))
                 dbConfig.setdefault("passwd", envConfig.get("dbpasswd"))
                 dbConfig.setdefault("port", envConfig.get("dbport"))
                 dbUtil = DbBaseHelper()
                 response = dbUtil.execReadOnlySQL(
                     dbConfig,
                     TaskCenterService.__rendeTemplate(
                         content.get("sqlcontent"),
                         envConfig.get("datatemplate"), Presult, False))
             Presult.setdefault("DATAREAULT" + str(content.get("step")),
                                response)
             #assert
             assertResult = AssertDaoInterface().getAssertInfosByContentId(
                 content.get("id"))
             if assertResult.getSuccess():
                 for assertInfo in assertResult:
                     result = TaskCenterService.__execAssertJob(
                         eval("Presult." + assertInfo.get("actual")),
                         assertInfo.get("expect"),
                         assertInfo.get("assert_type"))
                     if not result.getSuccess():
                         statusFlag = False
                         break
     if saveSession:
         exec_end_flag = time.time()
         exec_end = datetime.datetime.now()
         if statusFlag:
             status = "Success"
         else:
             status = "Failed"
         #caseResult
         caseResultInfo = {}
         caseResultInfo.setdefault("instanceid", instanceId)
         caseResultInfo.setdefault("caseid", caseId)
         caseResultInfo.setdefault("casename", caseName)
         caseResultInfo.setdefault("runtime",
                                   exec_end_flag - exec_start_flag)
         caseResultInfo.setdefault("exec_start", exec_start)
         caseResultInfo.setdefault("exec_end", exec_end)
         caseResultInfo.setdefault("status", status)
         caseResultInfo.setdefault("messaga", response)
         caseResultInfo.setdefault("remarks", None)
         CaseResultDaoInterface().addCaseResult(caseResultInfo)
     dataResult = DataResult()
     dataResult.setSuccess(statusFlag)
     if init:
         dataResult.setMessage(obj)
     else:
         dataResult.setMessage(status)
     return dataResult