Esempio n. 1
0
    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))
Esempio n. 2
0
    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)
Esempio n. 3
0
                        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/",