123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- # -*- coding: utf-8 -*-
- import sys,os,time
- reload(sys)
- sys.setdefaultencoding('utf-8')
- from utils.test_task import *
- from utils.platform_Util import *
- from sat_environment import *
- from utils import *
- from core.process_sync import *
- import shutil,json
- from runner import runner_sender
- class ResultTool(ProcessSync):
- Result_DIR = getResultDir()
- Result_DETAIL = "detail"
- Result_Total_XSL = r"config/all-result.xsl"
- Result_Detail_XSL = r"config/case_result_detail.xsl"
- Python_Home = sys.prefix
- Action_DetailResult = "detail_result"
- Action_CaseResult = "case_result"
- Key_CaseName = "case_name"
- Key_CaseResult = "case_result"
- Key_ItemName = "item_name"
- Key_ItemResult = "item_result"
- Key_ItemScreen = "item_screen"
- Key_ItemLog = "item_log"
- File_Name = "unknown"
- def __init__(self, resultxml = "all-result.xml"):
- print "Init ResultTool"
- ProcessSync.__init__(self)
- ResultTool.updateBaseDir(getResultDir())
- self.Result_XMLFile = ResultTool.Result_DIR + "/" +resultxml
- self.task = xml_util.parseAllResult(self.Result_XMLFile)
- self.Case_Result = "NotExcuted"
- self.detailItemIndex = 0
- self.caseName = ""
- def continueNextItem(self, itemName, itemDesc="None"):
- self.detailItemIndex += 1
- runner_sender.sendActionStart(self.tc.name, self.detailItemIndex, itemName, itemDesc)
- def setNextItem(self, itemName, itemIndex, itemDesc="None"):
- self.detailItemIndex = itemIndex
- runner_sender.sendActionStart(self.tc.name, self.detailItemIndex, itemName, itemDesc)
- # 通过Script_Activity告诉ResultTool,当前脚本名,用于拼接结果文件保存路径
- @staticmethod
- def setFileName(fileName):
- ResultTool.File_Name = fileName
- @staticmethod
- def checkResultDIR():
- ResultTool.mkCHdir(ResultTool.Result_DIR)
- ResultTool.mkCHdir(ResultTool.Result_DIR_DETAIL)
- ResultTool.mkCHdir(ResultTool.Result_DIR_LOG)
- ResultTool.mkCHdir(ResultTool.Result_DIR_SCREEN)
- ResultTool.mkCHdir(ResultTool.Result_DIR_SCRIPTS)
- @staticmethod
- def mkCHdir(dir):
- #print "mkCHdir,dir=", dir
- if (os.path.exists(dir)):
- return
- #例如:D:/SAT/result_schedule_id_schedule_name_task_number//detail
- #os.path.splite结果:('D:/SAT/result_schedule_id_schedule_name_task_number', 'detail')
- #过滤//多个分割符的情况
- preDir = os.path.split(dir)[0]
- #print "mkdir,preDir=", preDir
- if (not os.path.exists(preDir)):
- ResultTool.mkCHdir(preDir)
- #防止目录字符串最后带有/的情况,会出现两次创建同一个目录
- #例如: D:/SAT/。会创建D:/SAT和D:/SAT/
- if (not os.path.exists(dir)):
- os.mkdir(dir)
- @staticmethod
- def copyInitFile():
- Result_Total_XSL_Path = ResultTool.Python_Home + Environment.SDK_Relative_Path + ResultTool.Result_Total_XSL
- Result_Detail_XSL_Path = ResultTool.Python_Home + Environment.SDK_Relative_Path + ResultTool.Result_Detail_XSL
- shutil.copyfile(Result_Total_XSL_Path, ResultTool.Result_DIR + "/all-result.xsl")
- shutil.copyfile(Result_Detail_XSL_Path, ResultTool.Result_DIR_DETAIL + "/case_result_detail.xsl")
- @staticmethod
- def updateBaseDir(dir):
- print "updateBaseDir,dir=",dir
- ResultTool.Result_DIR = unicode(dir)
- ResultTool.Result_DIR_DETAIL = ResultTool.Result_DIR + "/" + ResultTool.Result_DETAIL
- ResultTool.Result_DIR_LOG = ResultTool.Result_DIR + "/adb_log/"
- ResultTool.Result_DIR_SCREEN = ResultTool.Result_DIR + "/screen/"
- ResultTool.Result_DIR_SCRIPTS = ResultTool.Result_DIR + "/scripts/"
- ResultTool.checkResultDIR()
- ResultTool.copyInitFile()
- @staticmethod
- def setBaseDir(dir):
- setResultDir(dir)
- def getBaseDir(self):
- return ResultTool.Result_DIR
- def getDetailDir(self):
- return ResultTool.Result_DIR_DETAIL
- def getLogDir(self):
- return ResultTool.Result_DIR_LOG
- def getScreenDir(self):
- return ResultTool.Result_DIR_SCREEN
- def addTestCase(self, caseName):
- tcase = self.task.getCaseByName(caseName)
- if (tcase == None):
- self.tc = TestCase()
- self.tc.name = caseName
- self.task.addTestCase(self.tc)
- else:
- self.tc = tcase
- return self.tc
- def getItemByName(self, itemlist, itemname):
- for item in itemlist:
- if (item.name == itemname):
- return item
- return None
- def addItemPicture(self, casename, picpath):
- # print "addItemPicture,",casename, picpath
- destPicDir = os.path.join(self.getScreenDir(), casename)
- self.mkCHdir(destPicDir)
- destPicPath = os.path.join(destPicDir,os.path.basename(picpath))
- if os.path.isdir(destPicPath):
- print u"图片路径为空"
- return ""
- try:
- shutil.copy(picpath,destPicPath)
- except IOError, e:
- print u"拷贝图片失败"
- print e
- return casename + "/" + os.path.basename(picpath), os.path.basename(picpath)
- def saveDetailResult2(self, destxml, itemname, result, picNameList, logName, data="",remark="", caseFinish=0):
- print "saveDetailResult2,picNameList:", picNameList
- print "saveDetailResult:",destxml
- itemList = xml_util.parseDetailResult(destxml.decode('utf-8'))
- if itemname is not None:
- item = self.getItemByName(itemList,itemname)
- if (item == None):
- item = Item()
- item.name = itemname
- itemList.append(item)
- item.result = result
- del item.screenPathList[:]
- for picName in picNameList:
- item.screenPathList.append("../screen/" + picName)
- if logName <> "":
- item.logPath = "../adb_log/" + logName
- item.data =data
- item.remark = remark
- xml_util.saveDetailResult(destxml.decode('utf-8'), itemList, caseFinish)
- """
- picpathList:图片路径数组.最多存储6张图片
- """
- def saveDetailResult(self, xmlName, itemname, result, picpathList, logpath="", data="", remark="", caseFinish=0):
- xmlPath = ResultTool.Result_DIR_DETAIL + "/"+ xmlName
- # print "saveDetailResult,xmlPath=", xmlPath
- # print "saveDetailResult,picpathList:", picpathList
- if (result == "Fail"):
- self.Case_Result = result
- #兼容之前的参数字符串定义
- picList = []
- if (type(picpathList) == type("") and picpathList <> "")\
- or (type(picpathList) == type(u"") and picpathList <> u""):
- # print u"screen字符串"
- picList.append(picpathList)
- else:
- picList = picpathList
- # print "saveDetailResult,picList:", picList
- rePicNameList = []
- picNameList = []
- for picpath in picList:
- if picpath is None or picpath.__len__() < 5:
- break
- rePicName, picName = self.addItemPicture(self.tc.name, picpath)
- rePicNameList.append(rePicName)
- picNameList.append(picName)
- logname = os.path.basename(logpath)
- self.saveDetailResult2(xmlPath, itemname, result,rePicNameList, logname, data, remark,caseFinish=caseFinish)
- # destPicDir = os.path.join(self.getScreenDir(), self.tc.name)
- # runner_sender.sendActionResult(self.tc.name, self.detailItemIndex, itemname, "", result, remark, destPicDir,"", picNameList,"",data)
- def setCaseFinish(self, xmlName, caseFinish):
- self.saveDetailResult(xmlName,None,"",[],caseFinish=caseFinish)
- def saveCaseResult2(self, result, detailFilePath):
- self.tc.result = result
- self.tc.rdetail = detailFilePath
- #print "saveCaseResult2,Result_XMLFile=", self.Result_XMLFile
- xml_util.saveAllResult(self.task, self.Result_XMLFile.decode('utf-8'))
- #Packet case result
- #兼容制定测试用例名,和不指定测试用例的情况
- '''
- 用于保存all-case中的测试结果
- '''
- def saveCaseResult(self,result, detailFileName):
- #detailFilePath = ResultTool.Result_DIR + detailFileName
- detailFilePath = ResultTool.Result_DETAIL + "/"+detailFileName
- self.Case_Result = result
- self.saveCaseResult2(self.Case_Result, detailFilePath)
- # runner_sender.sendCaseResult(self.tc.name, self.detailItemIndex, result, "", "", "")
- if __name__ == "__main__":
- # Result_XMLFile = "all-result.xml"
- # detailXml = "test-result.xml"
- # # ResultTool.setBaseDir(u"D:/SAT/中文测试/")
- # reTool = ResultTool(Result_XMLFile)
- # reTool.addTestCase("中文测试")
- # reTool.saveDetailResult(detailXml, "测试", "Pass", "item2.png&item3.png", "log.txt")
- # reTool.saveCaseResult("Fail", detailXml)
- destxml = r"E:\SAT\results\detail\source_select_result.xml"
- itemList = xml_util.parseDetailResult(destxml.decode('utf-8'))
- print "itemList:",itemList
- for item in itemList:
- print "item.name:",item.name
- print "item.data:",item.data
- print "item.remark:",item.remark
- print "item.result:",item.result,type(item.result)
- print "item.screenPathList:",item.screenPathList
- # itemScreenPathList = item.screenPathList
- # imageName =
- print "item.logPath:",item.logPath
|