def report(self, repHandler=slog.info, sumTitle='Test Summary:'): repRes = self.reportResult() if self.isInMode('show') or self.isInMode('scenario'): repHandler('\r\nFind Test Case(%s of %s):', repRes[MTConst.passed], repRes['num']) self.reportResult(MTConst.passed, repHandler) repHandler('Summary: %s of %s', repRes[MTConst.passed], repRes['num']) else: repHandler('\r\n%s\r\n%s' % (sumTitle, '-' * 60)) sumInfo = '\r\nTotal\t%s, %sm:\r\n\t' % (repRes['num'], int(repRes['time'] / 60 + 0.5)) hasRunRes = False for resType in range(4): try: resInfo = self.getResInfo(resType) resNum = ObjOperation.tryGetVal(repRes, resType, 0) if resType != MTConst.notRun: repHandler('%s\t%s:', resInfo, resNum) self.reportResult(resType, repHandler) sumInfo += (" + %s: %s" if hasRunRes else "%s: %s") % (resInfo, resNum) hasRunRes = True except Exception as ex: slog.warn(ex) continue repHandler(sumInfo) # repHandler('\r\nLog File:\r\n\t%s\n\n' % self.tlog.GetLoggerPath()) return repRes
def __registerService(self, exip, ports): from libs.syslog import slog slog.warn("%s:%s register to %s with %s" % (exip, ", ".join([str(p) for p in ports]), self.regServer, self.regName)) if self.regServer is not None: from server.cclient import curlCservice curlCservice(self.regServer, 'CServiceTool/RegistServer', hostport="%s:%s" % (exip, ports[0]), serverName=self.regName)
def __callObjFun__(self, reqPath, reqParam): try: return self.ws.callObjFunInworker(reqPath, reqParam) except WorkerManager.WorkerFullException as ex: slog.warn(str(ex)) except: slog.error(str(traceback.format_exc())) # If worker is full or exception, deal request in main process return ObjHandler.__callObjFun__(self, reqPath, reqParam)
def receiveSyncTask(self, tasks): tkeys = [] for task in tasks: if self.nodename == task['tnode']: try: tkeys.append(self.task.addOnlineTask(self._taskmgr, task['taskid'], task['tkey'], task['targs'], task['ttype'], task['hour'], task['minute'], task['span'], task['maxCount'], task['runCount'], notifycond=task['notifycond'], opstatus=task['status'])['key']) except Exception as ex: slog.warn("Drop task for {0} {taskid} {tkey}".format(ex, **task)) else: slog.warn("Node not match, drop task {tkey} {taskid}".format(**task)) return tkeys
def __log(self, levelIndex, eleName, content, **eleAttrs): try: if content != None: content = "%s %s" % (time.strftime("[%Y-%m-%d %H:%M:%S]"), content) if self.__isXmlLog: self.__xlog.AddElement(eleName, content, **eleAttrs) else: eleAttrDesp = "" for eleAttr in eleAttrs.keys(): eleAttrDesp = eleAttrDesp + " [%s] %s" % (eleAttr, eleAttrs[eleAttr]) self.__logLine("%s<%s> %s%s\r\n" % ("\r\n" if levelIndex == 0 else (levelIndex * 2 * " "), eleName, content if content != None else '', eleAttrDesp)) except Exception as ex: slog.warn("Logging: %s" % ex)
def runHandler(self, *args, **vargs): startTime = time.time() isSuccess, ret = True, None try: ret = self.stsHandler(*args, **vargs) except Exception as ex: slog.warn("FAIL %s" % ex) isSuccess = False if self.isDebug: import traceback print(traceback.format_exc()) endTime = time.time() runTime = endTime - startTime return self._statisticRunInfo(endTime, runTime, isSuccess), ret
def __registerService(self, exip, ports, initMethods): from libs.syslog import slog slog.warn( "%s:%s register to %s with %s" % (exip, ", ".join([str(p) for p in ports]), self.regServer, self.regName)) import time time.sleep(1) if self.regServer != "": from server.cclient import curlCservice curlCservice(self.regServer, 'CServiceTool/registServer', hostport="%s:%s" % (exip, ports[0]), serverName=self.regName, initMethods=initMethods)
def runHandler(self, *args, **vargs): startTime = time.time() e, ret = None, None try: ret = self.stsHandler(*args, **vargs) except Exception as ex: e = ex if self.isDebug: import traceback print(traceback.format_exc()) finally: endTime = time.time() runTime = endTime - startTime sr = self._statisticRunInfo(endTime, runTime, e is None) if e: slog.warn("\tPFAIL %s" % ex) return sr, ret
def analyzeLogs(self, product, version, environment, runInfo, logfiles=None): if logfiles is not None: for f in logfiles: try: self.la.parseLogFile(f) except Exception as ex: slog.warn("Fail to parse log file %s: %s" % (f, ex)) subject, htmlContent = self.la.makeHtmlSummary(product, version, environment, runInfo) self.subject = subject self.htmlContent = htmlContent
def init(self, runMode="debug", testrunConfig="", logFilePath="", tcPattern=None, outTcPattern=None, searchKey=None, propConf={}): if not self.tprop.load(testrunConfig): if testrunConfig != "": slog.warn("Not found testrunConfig: %s" % testrunConfig) self.isModeling = False self.setRunCase(tcPattern, outTcPattern, searchKey, runMode) self.setRunLog(logFilePath)
def __getProxyInfo__(self, headers, address, path): ip, port, host = "", 80, "" if tryGet(headers, "cfrom", None) != self.localHosts: try: # get by host ip = headers["host"].lower() ps = ip.split(":") if len(ps) == 2: ip, port = ps[0], int(ps[1]) ps = self.hostIp[ip] ip, port, host = ps['ip'], ps['port'], ps['host'] except: # get by path ps = self.__getPathProxy__(path) if self.pathIp else None if ps is None: if self.isDebugMode: slog.warn("Not found proxy: %s \t%s" % (ip, path)) else: ip, port, host = ps['ip'], ps['port'], ps['host'] if ip == "": if self.isDebugMode: slog.error("No proxy hosts: %s" % headers) raise ProxyHttpHandle.NoHostException() return ip, port, host
def runTest(self, tempObj, tcInfo, tempFun, caseInfo, isInfoExcept): resCode = None try: startTime = time.time() if not tcInfo.isTested: tempObj.setUp() tcInfo.isTested = True tempObj.beginTestCase() self.debugTest(tempFun, tempObj, tempObj.param) tempObj.endTestCase() excuteTime = time.time() - startTime resCode = MTConst.warned if self.tassert.isWarned else MTConst.passed except Exception as ex: excuteTime = time.time() - startTime exInfo = self.getMTestTraceBack() self.tlog.error(exInfo) if isInfoExcept: slog.warn(exInfo) else: try: resCode = tempObj.errorHandle(ex, caseInfo) except Exception as ex: slog.warn("ErrorHandle Should NOT Fail! MSG:%s", ex) try: tempObj.endTestCase() except Exception as ex: slog.warn("EndTestCase Should NOT Fail! MSG:%s", ex) if not isinstance(resCode, int) or resCode <= 3: resCode = MTConst.failed return resCode, int(excuteTime * 100 + 0.5) / 100.0
def __runCases__(self, *modelTypes): slog.info(time.strftime("%Y-%m-%d %H:%M:%S testing...")) for modelType in modelTypes: if self.tc.isInMode("run", 1): try: tcObj = modelType() except Exception as ex: slog.warn('Instance Class: %s with %s' % (modelType, ex)) continue else: tcObj = modelType() try: tcInfo, caseRunList = self.tc.getRunInfo(tcObj.__class__.__name__, tcObj) except Exception as ex: slog.error("No case: %s" % ex) continue if len(caseRunList) == 0: continue for caseName in caseRunList: if eval("tcObj.%s()" % caseName) == False: return False if self.endScenarioHandler != None: self.endScenarioHandler(tcObj, caseName) if tcInfo.isTested: if self.tc.isInMode("run", 1): try: tcObj.tearDown() except Exception as ex: slog.warn('tearDown Should NOT Fail! %s: %s' % (ex, self.getMTestTraceBack())) else: tcObj.tearDown() if self.endModelHandler != None: self.endModelHandler(tcInfo) self.tlog.close() return self.tc.report()
def init(self, runMode="debug", testrunConfig="", logFilePath="", tcPattern=None, outTcPattern=None, searchKey=None, propConf={}): if not self.tprop.load(testrunConfig): if testrunConfig != "": slog.warn("Not found testrunConfig: %s" % testrunConfig) for sec in propConf: if not self.tprop.sections.__contains__(sec): self.tprop.sections[sec] = propConf[sec] else: for p in propConf[sec]: self.tprop.sections[sec][p] = propConf[sec][p] self.isModeling = False self.setRunCase(tcPattern, outTcPattern, searchKey, runMode) self.setRunLog(logFilePath)
def runScenario(self, tcObj, tcFun, caseName, param, where, group, status, despFormat, searchKey): # Status is for status modeling isInfoExcept = self.tc.isInMode("debug") clsName = tcObj.__class__.__name__ tcInfo = self.tc.getTCInfo(clsName) tsInfo = tcInfo[caseName] for sKey in tcInfo.searchKey: if not searchKey.__contains__(sKey): searchKey[sKey] = tcInfo.searchKey[sKey] if status != None: from tmodel.model.statusmodel import TestModeling self.tc.isModeling = True modelLauncher = TestModeling( tcObj, ObjOperation.tryGetVal(status, "start", "Start"), ObjOperation.tryGetVal(status, "coverage", "all")) self.tc.isModeling = False param["sPath"] = modelLauncher.generatePaths() try: where["combine"].append("sPath") except: where = copy.deepcopy(where) where["combine"] = ["sPath"] tcFun = modelLauncher.launchTestPath try: mparam = ObjOperation.tryGetVal(where, "handle", CombineGroupParam)(param, where, group) except Exception as ex: slog.warn( "Fail to generate parameter, case %s\nerror: %s\nparam= %s\nwhere= %s\ngroupParam= %s" % (caseName, "%s %s" % (ex.__class__.__name__, ex), param, where, group)) return not isInfoExcept while True: try: sparam = mparam.nextParam() except Exception as ex: sparam = None slog.warn( "Fail to generate parameter, case %s\nerror: %s\nparam= %s\nwhere= %s\ngroupParam= %s" % (caseName, "%s %s" % (ex.__class__.__name__, ex), param, where, group)) if sparam is None: break desp = self.tc.getTCDespcription(sparam, despFormat) caseInfo = self.tc.getCaseInfo(tsInfo, sparam.pIndex, desp, searchKey) caseFullName = self.tc.getTCFullName(caseName, sparam.pIndex, desp) if not self.tc.isInScope(caseFullName, searchKey): continue if self.tc.isInMode("show", -1): caseInfo['r'] = MTConst.passed if self.tc.isInMode("param"): slog.info("%s\n%s\n", caseFullName, sparam) elif self.tc.isInMode("look"): slog.info("%s\n%s\n%s\n", caseFullName, searchKey, sparam) elif self.tc.isInMode("scenario", -1): if self.tc.isInMode("slook"): slog.info("%s\n%s\n%s\n", caseFullName, searchKey, param) tsInfo[0]['d'] = "" return continue self.tassert.isWarned = False tcObj.param = sparam caseSimpleName = caseFullName.split(" ")[0] slog.info(MTConst.beginTestCaseInfo, caseFullName) self.tlog.beginTestCase(clsName, caseSimpleName, desp, sparam, searchKey) if self.tc.isInMode("debug", 1, True): resCode, exeTime = self.runTest(tcObj, tcInfo, tcFun, desp, isInfoExcept) if isInfoExcept and (resCode == MTConst.failed or resCode >= 3): return False if self.endTestHandler != None: self.endTestHandler(caseName, sparam, sparam.pIndex, searchKey, tcInfo, caseInfo) try: resInfo = self.tc.getResInfo(resCode) except: resCode = MTConst.failed resInfo = self.tc.getResInfo(resCode) caseInfo['t'] = exeTime caseInfo['r'] = resCode (slog.warn if resCode == MTConst.failed else slog.info)( MTConst.endTestCaseInfo, resInfo, caseSimpleName) self.tlog.endTestCase(caseSimpleName, resInfo, resCode, exeTime)