123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- # -*- coding:utf-8 -*-
- import os
- import sys
- reload(sys)
- sys.setdefaultencoding('utf-8')
- import xml.dom.minidom
- import xml.dom
- from xml.dom.minidom import parse
- import json
- from test_task import *
- import platform_Util
- def create_element(doc,tag,attr):
- elementNode = doc.createElement(tag)
- textNode = doc.createTextNode(str(attr))
- elementNode.appendChild(textNode)
- return elementNode
- def saveAllResult(task, destxml):
- resultDom = xml.dom.getDOMImplementation()
- doc = resultDom.createDocument(None, "all", None)
- xsl = doc.createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="all-result.xsl"')
- root = doc.documentElement
- doc.insertBefore(xsl, root)
- #软件版本信息
- swInfoRootNode = doc.createElement(TestTask.swInfoNodeName)
- for index in range(0, task.swInfoValue.__len__()):
- hardwareNode = create_element(doc, task.swInfoKeys[index], task.swInfoValue[index])
- swInfoRootNode.appendChild(hardwareNode)
- root.appendChild(swInfoRootNode)
- #每条测试用例的结果
- allcase = task.allCase
- for tc in allcase:
- caseNode = doc.createElement(TestCase.caseNodeName)
- cnNode = create_element(doc, TestCase.cnNodeName, tc.name)
- dependNode = create_element(doc, TestCase.dependNodeName, tc.depend)
- descNode = create_element(doc, TestCase.descNodeName, tc.desc)
- scriptNode = create_element(doc, TestCase.scriptNodeName, tc.script)
- resultNode = create_element(doc, TestCase.resultNodeName, tc.result)
- detailNode = create_element(doc, TestCase.detailNodeName, tc.rdetail)
- logNode = create_element(doc, TestCase.logNodeName, tc.log)
- caseNode.appendChild(cnNode)
- caseNode.appendChild(dependNode)
- caseNode.appendChild(descNode)
- caseNode.appendChild(scriptNode)
- caseNode.appendChild(resultNode)
- caseNode.appendChild(detailNode)
- caseNode.appendChild(logNode)
- root.appendChild(caseNode)
- xmlfile = open(destxml, "w")
- doc.writexml(xmlfile, addindent=' ' * 4, newl='\n', encoding="utf-8")
- xmlfile.close()
- '''
- <?xml version="1.0" encoding="utf-8"?>
- <?xml-stylesheet type="text/xsl" href="case_result_detail.xsl"?>
- <results caseFinish="0">
- 设置caseFinish状态:0 代表脚本未结束;1 代表脚本结束
- '''
- def saveDetailResult(destxml, results, caseFinish=0):
- print "saveDetailResult"
- resultDom = xml.dom.getDOMImplementation()
- doc = resultDom.createDocument(None, Item.NODE_RESULTS, None)
- xsl = doc.createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="case_result_detail.xsl"')
- root = doc.documentElement
- root.setAttribute("caseFinish",str(caseFinish))
- doc.insertBefore(xsl, root)
- # 每条子项测试的结果
- for item in results:
- itemNode = doc.createElement(Item.NODE_ITEM)
- nameNode = create_element(doc, Item.NODE_NAME, item.name)
- resultNode = create_element(doc, Item.NODE_RESULT, item.result)
- dataNode = create_element(doc, Item.NODE_DATA, item.data)
- screenNodeList = []
- for index in range(item.screenPathList.__len__()):
- if index == Item.Screen_Max:
- break
- screenNode = create_element(doc, item.getScreenNode(), item.screenPathList[index])
- screenNodeList.append(screenNode)
- logNode = create_element(doc, Item.NODE_LOG, item.logPath)
- remarkNode = create_element(doc, Item.NODE_REMARK, item.remark)
- itemNode.appendChild(nameNode)
- itemNode.appendChild(resultNode)
- itemNode.appendChild(dataNode)
- for screenNode in screenNodeList:
- itemNode.appendChild(screenNode)
- itemNode.appendChild(logNode)
- itemNode.appendChild(remarkNode)
- root.appendChild(itemNode)
- xmlfile = open(destxml, "w")
- doc.writexml(xmlfile, addindent=' ' * 4, newl='\n', encoding="utf-8")
- xmlfile.close()
- def parseDetailResult(resultxml):
- print "parseDetailResult"
- resultList = []
- if (os.path.isfile(resultxml)):
- DOMTree = xml.dom.minidom.parse(resultxml)
- rootAll = DOMTree.documentElement
- allItemNode = rootAll.getElementsByTagName(Item.NODE_ITEM)
- for itemNode in allItemNode:
- item = Item()
- nameNodes = itemNode.getElementsByTagName(Item.NODE_NAME)
- if nameNodes.__len__() > 0 and nameNodes[0].childNodes.__len__() > 0:
- nodeName = nameNodes[0].childNodes[0].nodeValue.strip()
- item.name = nodeName.encode('utf-8')
- resultNodes = itemNode.getElementsByTagName(Item.NODE_RESULT)
- if resultNodes.__len__() > 0 and resultNodes[0].childNodes.__len__() > 0:
- nodeResult = resultNodes[0].childNodes[0].nodeValue.strip()
- item.result = nodeResult.encode("utf-8")
- dataNodes = itemNode.getElementsByTagName(Item.NODE_DATA)
- if dataNodes.__len__() > 0 and dataNodes[0].childNodes.__len__()>0:
- nodeData = dataNodes[0].childNodes[0].nodeValue.strip()
- item.data = nodeData.encode('utf-8')
- nodeList = itemNode.getElementsByTagName(item.getScreenNode())
- for index in range(nodeList.__len__()):
- screenNode = nodeList[index]
- if (screenNode.childNodes.__len__() > 0):
- desc = screenNode.childNodes[0].nodeValue.strip()
- item.screenPathList.append(desc.encode('utf-8'))
- logNode = itemNode.getElementsByTagName(Item.NODE_LOG)[0]
- if (logNode.childNodes.__len__()>0):
- desc = logNode.childNodes[0].nodeValue.strip()
- item.logPath = desc.encode('utf-8')
- remarkNodes = itemNode.getElementsByTagName(Item.NODE_REMARK)
- if remarkNodes.__len__() > 0 and remarkNodes[0].childNodes.__len__() > 0:
- nodeRemark = remarkNodes[0].childNodes[0].nodeValue.strip()
- item.remark = nodeRemark.encode('utf-8')
- resultList.append(item)
- return resultList
- def parseAllResult(resultxml):
- if (os.path.isfile(resultxml)):
- ttask = TestTask()
- DOMTree = xml.dom.minidom.parse(resultxml)
- rootAll = DOMTree.documentElement
- swInformation = rootAll.getElementsByTagName(TestTask.swInfoNodeName)
- for nodeName in ttask.swInfoKeys:
- valueNodes = swInformation[0].getElementsByTagName(nodeName)
- if (valueNodes.__len__() <= 0):
- continue
- if (valueNodes[0].childNodes.__len__() > 0):
- value = valueNodes[0].childNodes[0].nodeValue.strip()
- ttask.swInfoValue.append(value)
- print "parseAllResult,swInformation:", ttask.swInfoValue
- allcaseNode = rootAll.getElementsByTagName(TestCase.caseNodeName)
- for caseNode in allcaseNode:
- tc = TestCase()
- caseName = caseNode.getElementsByTagName(TestCase.cnNodeName)[0].childNodes[0].nodeValue.strip()
- tc.name = caseName.encode('utf-8')
- dependNode = caseNode.getElementsByTagName(TestCase.dependNodeName)[0]
- if (dependNode.childNodes.__len__() > 0):
- tc.depend = dependNode.childNodes[0].nodeValue.strip()
- descNode = caseNode.getElementsByTagName(TestCase.descNodeName)[0]
- if (descNode.childNodes.__len__() > 0):
- desc =descNode.childNodes[0].nodeValue.strip()
- tc.desc = desc.encode('utf-8')
- resultNode = caseNode.getElementsByTagName(TestCase.resultNodeName)[0]
- if (resultNode.childNodes.__len__() > 0):
- tc.result = resultNode.childNodes[0].nodeValue.strip()
- scriptNode = caseNode.getElementsByTagName(TestCase.scriptNodeName)[0]
- if (scriptNode.childNodes.__len__() > 0):
- tc.script = scriptNode.childNodes[0].nodeValue.strip()
- rdetailNode = caseNode.getElementsByTagName(TestCase.detailNodeName)[0]
- if (rdetailNode.childNodes.__len__() > 0):
- tc.rdetail = rdetailNode.childNodes[0].nodeValue.strip()
- logNode = caseNode.getElementsByTagName(TestCase.logNodeName)[0]
- if (logNode.childNodes.__len__() > 0):
- tc.log = logNode.childNodes[0].nodeValue.strip()
- print tc.name,":",tc.depend
- ttask.allCase.append(tc)
- return ttask
- return TestTask()
- def correctPath(filepath):
- return filepath.replace("/", platform_Util.getFileSeprator())
- def parseTask(taskpath):
- if (os.path.isfile(taskpath)):
- DOMTree = xml.dom.minidom.parse(taskpath)
- rootNode = DOMTree.documentElement
- caseFilePath=[]
- caseNodeList = rootNode.getElementsByTagName(TestTask.testCaseNameNode)
- for caseNode in caseNodeList:
- if (caseNode.hasAttribute(TestTask.caseNodeAttrFilePathLabel)):
- filePath = caseNode.getAttribute(TestTask.caseNodeAttrFilePathLabel)
- asFilePath = platform_Util.Environment.taskRootDir + platform_Util.getFileSeprator() + correctPath(filePath)
- #print "asFilePath=", asFilePath
- caseFilePath.append(asFilePath)
- return caseFilePath
- return None
- def loadLocalTaskData(taskpath):
- print "[xml_util]loadLocalTaskData,taskpath=", taskpath
- taskData = TestTask()
- if (os.path.isfile(taskpath)):
- DOMTree = xml.dom.minidom.parse(taskpath)
- rootNode = DOMTree.documentElement
- caseNodeList = rootNode.getElementsByTagName(TestTask.testCaseNameNode)
- count = 0
- for caseNode in caseNodeList:
- tc = TestCase()
- tc.index = count
- if (caseNode.hasAttribute(TestTask.caseNodeAttrFilePathLabel)):
- tc.srcScript = caseNode.getAttribute(TestTask.caseNodeAttrFilePathLabel)
- if (caseNode.hasAttribute(TestTask.caseNodeAttrDescLabel)):
- tc.desc = caseNode.getAttribute(TestTask.caseNodeAttrDescLabel).encode("utf-8")
- if (caseNode.hasAttribute(TestTask.caseNodeAttrNameLabel)):
- tc.name = caseNode.getAttribute(TestTask.caseNodeAttrNameLabel).encode("utf-8")
- if (caseNode.hasAttribute(TestTask.caseNodeAttrDependLabel)):
- tc.depend = caseNode.getAttribute(TestTask.caseNodeAttrDependLabel)
- taskData.addTestCase(tc)
- count = count+1
- return taskData
- def saveLocalTaskData(taskpath, taskData):
- print "[xml_util]saveLocalTaskData,taskpath=", taskpath
- taskDom = xml.dom.getDOMImplementation()
- doc = taskDom.createDocument(None, "root", None)
- root = doc.documentElement
- for tc in taskData.allCase:
- if (tc.selected == True):
- caseNode = doc.createElement(TestTask.testCaseNameNode)
- caseNode.setAttribute(TestTask.caseNodeAttrNameLabel, tc.name)
- caseNode.setAttribute(TestTask.caseNodeAttrDescLabel, tc.desc)
- caseNode.setAttribute(TestTask.caseNodeAttrFilePathLabel, tc.srcScript)
- caseNode.setAttribute(TestTask.caseNodeAttrDependLabel, tc.depend)
- root.appendChild(caseNode)
- xmlfile = open(taskpath,"w")
- doc.writexml(xmlfile, addindent=' '*4, newl='\n', encoding="utf-8")
- xmlfile.close()
- def saveLocalTaskFileByCN(taskpath, taskData, cnList):
- print "[xml_util]saveLocalTaskData,taskpath=", taskpath
- taskDom = xml.dom.getDOMImplementation()
- doc = taskDom.createDocument(None, "root", None)
- root = doc.documentElement
- for cn in cnList:
- tc = taskData.getCaseByName(cn)
- print cn, ":", tc
- if (tc.selected == True):
- caseNode = doc.createElement(TestTask.testCaseNameNode)
- caseNode.setAttribute(TestTask.caseNodeAttrNameLabel, tc.name)
- caseNode.setAttribute(TestTask.caseNodeAttrDescLabel, tc.desc)
- caseNode.setAttribute(TestTask.caseNodeAttrFilePathLabel, tc.srcScript)
- caseNode.setAttribute(TestTask.caseNodeAttrDependLabel, tc.depend)
- root.appendChild(caseNode)
- xmlfile = open(taskpath,"w")
- doc.writexml(xmlfile, addindent=' '*4, newl='\n', encoding="utf-8")
- xmlfile.close()
- def test_writeAllResultXml(allcase, resultxml):
- resultDom = xml.dom.getDOMImplementation()
- doc = resultDom.createDocument(None,"all", None)
- xsl = doc.createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="all-result.xsl"')
- root = doc.documentElement
- doc.insertBefore(xsl, root)
- for caseDict in allcase:
- caseNode = doc.createElement(TestCase.caseNodeName)
- cnNode = create_element(doc, TestCase.cnNodeName, caseDict[TestCase.cnNodeName])
- dependNode = create_element(doc, TestCase.dependNodeName, caseDict[TestCase.dependNodeName])
- descNode = create_element(doc, TestCase.descNodeName, caseDict[TestCase.descNodeName])
- scriptNode = create_element(doc, TestCase.scriptNodeName, caseDict[TestCase.scriptNodeName])
- resultNode = create_element(doc, TestCase.resultNodeName, caseDict[TestCase.resultNodeName])
- detailNode = create_element(doc, TestCase.detailNodeName, caseDict[TestCase.detailNodeName])
- logNode = create_element(doc, TestCase.logNodeName, caseDict[TestCase.logNodeName])
- caseNode.appendChild(cnNode)
- caseNode.appendChild(dependNode)
- caseNode.appendChild(descNode)
- caseNode.appendChild(scriptNode)
- caseNode.appendChild(resultNode)
- caseNode.appendChild(detailNode)
- caseNode.appendChild(logNode)
- root.appendChild(caseNode)
- xmlfile = open(resultxml,"w")
- doc.writexml(xmlfile, addindent=' '*4, newl='\n', encoding="utf-8")
- xmlfile.close()
- def test_parseAllResult(resultxml):
- resultDom = xml.dom.minidom.parse(resultxml)
- #print resultDom.toxml()
- root = resultDom.documentElement #得到根节点
- #print root.nodeName,',',root.nodeValue,',',root.nodeType
- allcase = []
- allcaseNode = root.getElementsByTagName(TestCase.caseNodeName)
- for caseNode in allcaseNode:
- caseDict = {}
- caseName = caseNode.getElementsByTagName(TestCase.cnNodeName)[0].childNodes[0].nodeValue.strip()
- print caseName.encode('gbk')
- caseDict[TestCase.cnNodeName] = caseName.encode('utf-8')
- desc = caseNode.getElementsByTagName(TestCase.descNodeName)[0].childNodes[0].nodeValue.strip()
- caseDict[TestCase.descNodeName] = desc.encode('utf-8')
- caseDict[TestCase.resultNodeName] = \
- caseNode.getElementsByTagName(TestCase.resultNodeName)[0].childNodes[0].nodeValue.strip()
- caseDict[TestCase.scriptNodeName] = \
- caseNode.getElementsByTagName(TestCase.scriptNodeName)[0].childNodes[0].nodeValue.strip()
- caseDict[TestCase.detailNodeName] = \
- caseNode.getElementsByTagName(TestCase.detailNodeName)[0].childNodes[0].nodeValue.strip()
- caseDict[TestCase.logNodeName] = \
- caseNode.getElementsByTagName(TestCase.logNodeName)[0].childNodes[0].nodeValue.strip()
- allcase.append(caseDict)
- print allcase
- # writeAllResultXml(allcase, "all-case-1.xml")
- #parseAllResult("all-case.xml")
|