def resultAnalysis(self, strTestTempPath): """ Analysis files under ~/abts/mnt/test_result/ """ listReporAttachment = [] #return Attachment list add by libin859 listReportImage = [] dictIssueList = {} dictTestResult = {"Pass": None, "Fail": None, "Skip": None, "Abort": None} for key in dictTestResult: dictTestResult[key] = {"TotalNum": 0, "TestCase": []} strTestResultFilePath = os.path.join( strTestTempPath, "testresult.json") if os.path.isfile(strTestResultFilePath) is False: logger.warning("Canot Find Test Result File Under '%s'" % strTestResultFilePath) return (dictTestResult, dictIssueList, listReportImage, listReporAttachment) try: # fileResultXml = open(strTestResultFilePath, 'r') # strResultXml = fileResultXml.read() # ordereddictResult = XmlToDict.parse(strResultXml) # ordereddictResult = ordereddictResult.get("TestResult", {}) fileResultJson = open(strTestResultFilePath, 'r') strResultJson = fileResultJson.read() dictResult = json.loads(strResultJson, encoding="utf-8") logger.info("Make Sure No Unicode") dictResult = CodecUtil.transferUnicodeToStr(dictResult) except Exception, e: logger.exception("Exception Caught: %s" %str(e))
def resultAnalysis(self, strTestTempPath): """ Analysis files under ~/abts/mnt/test_result/ """ listReportImage = [] dictIssueList = {} dictTestResult = { "Pass": None, "Fail": None, "Skip": None, "Abort": None } for key in dictTestResult: dictTestResult[key] = {"TotalNum": 0, "TestCase": []} strTestResultFilePath = os.path.join(strTestTempPath, "testresult.json") if os.path.isfile(strTestResultFilePath) is False: logger.warning("Canot Find Test Result File Under '%s'" % strTestResultFilePath) return (dictTestResult, dictIssueList, listReportImage) try: # fileResultXml = open(strTestResultFilePath, 'r') # strResultXml = fileResultXml.read() # ordereddictResult = XmlToDict.parse(strResultXml) # ordereddictResult = ordereddictResult.get("TestResult", {}) fileResultJson = open(strTestResultFilePath, 'r') strResultJson = fileResultJson.read() dictResult = json.loads(strResultJson, encoding="utf-8") logger.info("Make Sure No Unicode") dictResult = CodecUtil.transferUnicodeToStr(dictResult) except Exception: logger.exception("Exception Caught") else: fileResultJson.close() listTestDetailsInfo = dictResult.get("TestDetails", []) listReportImage = dictResult.get("ReportImage", []) logger.info("Analysis On Test Test Details") for dictCurrentTestDetailInfo in listTestDetailsInfo: strCurrentTestResult = dictCurrentTestDetailInfo.get( "Result", "Unknown").capitalize() if strCurrentTestResult not in dictTestResult: logger.warning( "Test Result Not Valid, Use 'Abort' Instead") strCurrentTestResult = "Abort" strCurrentTestName = dictCurrentTestDetailInfo.get( "TestName", "Unknown") strCurrentTestErrorMsg = dictCurrentTestDetailInfo.get( "ErrorMsg", "") dictTestResult[strCurrentTestResult]["TestCase"].append( strCurrentTestName) dictTestResult[strCurrentTestResult]["TotalNum"] += 1 if strCurrentTestResult != "Pass": logger.info("Test Case '%s' %s, Analysis" % (strCurrentTestName, strCurrentTestResult)) dictCurrentIssueJiraTicketInfo = dictCurrentTestDetailInfo.get( "JiraTicket", None) listCurrentIssueJiraAttachment = dictCurrentTestDetailInfo.get( "JiraAttachment", []) strCurrentJiraTicketUrl = None if dictCurrentIssueJiraTicketInfo is not None: logger.info("Submit A Jira Ticket") (boolJiraCreatedResult, dictJiraTicketInfo) = JiraRest.creatIssue( self.strProjectKey, "Bug", dictCurrentIssueJiraTicketInfo) if boolJiraCreatedResult is False: strCurrentJiraTicketUrl = "Failed To Create" logger.error("Failed to create Jira ticket") else: strJiraKey = dictJiraTicketInfo.get("key", "") logger.info("Jira Ticket Created, Key: '%s'" % strJiraKey) strCurrentJiraTicketUrl = "https://pjira.oneplus.cn/jira/browse/%s" % strJiraKey for strJiraAttachmentPath in listCurrentIssueJiraAttachment: logger.info( "Upload Attachment '%s' To Jira Ticket" % strJiraAttachmentPath) JiraRest.addAttachment(strJiraKey, strJiraAttachmentPath) logger.info("Add Info To Issue List") dictIssueList[strCurrentTestName] = {} dictIssueList[strCurrentTestName][ "ErrorMsg"] = strCurrentTestErrorMsg dictIssueList[strCurrentTestName][ "IssueType"] = strCurrentTestResult dictIssueList[strCurrentTestName][ "JiraTicket"] = strCurrentJiraTicketUrl logger.info("Analysis On Test Report Image") for dictReportImageInfo in listReportImage: strCurrentImagePath = dictReportImageInfo.get("Path", None) if strCurrentImagePath is None or os.path.isfile( strCurrentImagePath) is False: logger.warning("Report Image '%s' Not Valid, Remove" % str(dictReportImageInfo)) listReportImage.remove(dictReportImageInfo) return (dictTestResult, dictIssueList, listReportImage)
keyResult] += intCurrentResultNum dictTestDetails.setdefault( strTestScriptName, {})[keyResult] = dictCurrentTestResult[keyResult].get( "TestCase", [])[:] if len(dictCurrentIssueList) > 0: dictIssueList[ strTestScriptName] = dictCurrentIssueList.copy() listReportImage.extend(listCurrentReportImage) finally: CurrentTestScript = None logger.info("Make Sure No Unicode") dictIssueList = CodecUtil.transferUnicodeToStr(dictIssueList) listReportImage = CodecUtil.transferUnicodeToStr(listReportImage) dictTestDetails = CodecUtil.transferUnicodeToStr(dictTestDetails) return (boolResult, strLastError, dictTestSummarize, dictIssueList, listReportImage, dictTestDetails) if __name__ == '__main__': import sys hdlr = logging.StreamHandler(sys.stdout) hdlr.setFormatter( logging.Formatter( '%(asctime)s - %(name)s [%(levelname)s]: %(message)s')) logger.addHandler(hdlr) aaa = TestRunner("/home/rafe/abts/testqueuepool/1464943670101/",