xml_util.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. # -*- coding:utf-8 -*-
  2. import os
  3. import sys
  4. reload(sys)
  5. sys.setdefaultencoding('utf-8')
  6. import xml.dom.minidom
  7. import xml.dom
  8. from xml.dom.minidom import parse
  9. import json
  10. from test_task import *
  11. import platform_Util
  12. def create_element(doc,tag,attr):
  13. elementNode = doc.createElement(tag)
  14. textNode = doc.createTextNode(str(attr))
  15. elementNode.appendChild(textNode)
  16. return elementNode
  17. def saveAllResult(task, destxml):
  18. resultDom = xml.dom.getDOMImplementation()
  19. doc = resultDom.createDocument(None, "all", None)
  20. xsl = doc.createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="all-result.xsl"')
  21. root = doc.documentElement
  22. doc.insertBefore(xsl, root)
  23. #软件版本信息
  24. swInfoRootNode = doc.createElement(TestTask.swInfoNodeName)
  25. for index in range(0, task.swInfoValue.__len__()):
  26. hardwareNode = create_element(doc, task.swInfoKeys[index], task.swInfoValue[index])
  27. swInfoRootNode.appendChild(hardwareNode)
  28. root.appendChild(swInfoRootNode)
  29. #每条测试用例的结果
  30. allcase = task.allCase
  31. for tc in allcase:
  32. caseNode = doc.createElement(TestCase.caseNodeName)
  33. cnNode = create_element(doc, TestCase.cnNodeName, tc.name)
  34. dependNode = create_element(doc, TestCase.dependNodeName, tc.depend)
  35. descNode = create_element(doc, TestCase.descNodeName, tc.desc)
  36. scriptNode = create_element(doc, TestCase.scriptNodeName, tc.script)
  37. resultNode = create_element(doc, TestCase.resultNodeName, tc.result)
  38. detailNode = create_element(doc, TestCase.detailNodeName, tc.rdetail)
  39. logNode = create_element(doc, TestCase.logNodeName, tc.log)
  40. caseNode.appendChild(cnNode)
  41. caseNode.appendChild(dependNode)
  42. caseNode.appendChild(descNode)
  43. caseNode.appendChild(scriptNode)
  44. caseNode.appendChild(resultNode)
  45. caseNode.appendChild(detailNode)
  46. caseNode.appendChild(logNode)
  47. root.appendChild(caseNode)
  48. xmlfile = open(destxml, "w")
  49. doc.writexml(xmlfile, addindent=' ' * 4, newl='\n', encoding="utf-8")
  50. xmlfile.close()
  51. '''
  52. <?xml version="1.0" encoding="utf-8"?>
  53. <?xml-stylesheet type="text/xsl" href="case_result_detail.xsl"?>
  54. <results caseFinish="0">
  55. 设置caseFinish状态:0 代表脚本未结束;1 代表脚本结束
  56. '''
  57. def saveDetailResult(destxml, results, caseFinish=0):
  58. print "saveDetailResult"
  59. resultDom = xml.dom.getDOMImplementation()
  60. doc = resultDom.createDocument(None, Item.NODE_RESULTS, None)
  61. xsl = doc.createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="case_result_detail.xsl"')
  62. root = doc.documentElement
  63. root.setAttribute("caseFinish",str(caseFinish))
  64. doc.insertBefore(xsl, root)
  65. # 每条子项测试的结果
  66. for item in results:
  67. itemNode = doc.createElement(Item.NODE_ITEM)
  68. nameNode = create_element(doc, Item.NODE_NAME, item.name)
  69. resultNode = create_element(doc, Item.NODE_RESULT, item.result)
  70. dataNode = create_element(doc, Item.NODE_DATA, item.data)
  71. screenNodeList = []
  72. for index in range(item.screenPathList.__len__()):
  73. if index == Item.Screen_Max:
  74. break
  75. screenNode = create_element(doc, item.getScreenNode(), item.screenPathList[index])
  76. screenNodeList.append(screenNode)
  77. logNode = create_element(doc, Item.NODE_LOG, item.logPath)
  78. remarkNode = create_element(doc, Item.NODE_REMARK, item.remark)
  79. itemNode.appendChild(nameNode)
  80. itemNode.appendChild(resultNode)
  81. itemNode.appendChild(dataNode)
  82. for screenNode in screenNodeList:
  83. itemNode.appendChild(screenNode)
  84. itemNode.appendChild(logNode)
  85. itemNode.appendChild(remarkNode)
  86. root.appendChild(itemNode)
  87. xmlfile = open(destxml, "w")
  88. doc.writexml(xmlfile, addindent=' ' * 4, newl='\n', encoding="utf-8")
  89. xmlfile.close()
  90. def parseDetailResult(resultxml):
  91. print "parseDetailResult"
  92. resultList = []
  93. if (os.path.isfile(resultxml)):
  94. DOMTree = xml.dom.minidom.parse(resultxml)
  95. rootAll = DOMTree.documentElement
  96. allItemNode = rootAll.getElementsByTagName(Item.NODE_ITEM)
  97. for itemNode in allItemNode:
  98. item = Item()
  99. nameNodes = itemNode.getElementsByTagName(Item.NODE_NAME)
  100. if nameNodes.__len__() > 0 and nameNodes[0].childNodes.__len__() > 0:
  101. nodeName = nameNodes[0].childNodes[0].nodeValue.strip()
  102. item.name = nodeName.encode('utf-8')
  103. resultNodes = itemNode.getElementsByTagName(Item.NODE_RESULT)
  104. if resultNodes.__len__() > 0 and resultNodes[0].childNodes.__len__() > 0:
  105. nodeResult = resultNodes[0].childNodes[0].nodeValue.strip()
  106. item.result = nodeResult.encode("utf-8")
  107. dataNodes = itemNode.getElementsByTagName(Item.NODE_DATA)
  108. if dataNodes.__len__() > 0 and dataNodes[0].childNodes.__len__()>0:
  109. nodeData = dataNodes[0].childNodes[0].nodeValue.strip()
  110. item.data = nodeData.encode('utf-8')
  111. nodeList = itemNode.getElementsByTagName(item.getScreenNode())
  112. for index in range(nodeList.__len__()):
  113. screenNode = nodeList[index]
  114. if (screenNode.childNodes.__len__() > 0):
  115. desc = screenNode.childNodes[0].nodeValue.strip()
  116. item.screenPathList.append(desc.encode('utf-8'))
  117. logNode = itemNode.getElementsByTagName(Item.NODE_LOG)[0]
  118. if (logNode.childNodes.__len__()>0):
  119. desc = logNode.childNodes[0].nodeValue.strip()
  120. item.logPath = desc.encode('utf-8')
  121. remarkNodes = itemNode.getElementsByTagName(Item.NODE_REMARK)
  122. if remarkNodes.__len__() > 0 and remarkNodes[0].childNodes.__len__() > 0:
  123. nodeRemark = remarkNodes[0].childNodes[0].nodeValue.strip()
  124. item.remark = nodeRemark.encode('utf-8')
  125. resultList.append(item)
  126. return resultList
  127. def parseAllResult(resultxml):
  128. if (os.path.isfile(resultxml)):
  129. ttask = TestTask()
  130. DOMTree = xml.dom.minidom.parse(resultxml)
  131. rootAll = DOMTree.documentElement
  132. swInformation = rootAll.getElementsByTagName(TestTask.swInfoNodeName)
  133. for nodeName in ttask.swInfoKeys:
  134. valueNodes = swInformation[0].getElementsByTagName(nodeName)
  135. if (valueNodes.__len__() <= 0):
  136. continue
  137. if (valueNodes[0].childNodes.__len__() > 0):
  138. value = valueNodes[0].childNodes[0].nodeValue.strip()
  139. ttask.swInfoValue.append(value)
  140. print "parseAllResult,swInformation:", ttask.swInfoValue
  141. allcaseNode = rootAll.getElementsByTagName(TestCase.caseNodeName)
  142. for caseNode in allcaseNode:
  143. tc = TestCase()
  144. caseName = caseNode.getElementsByTagName(TestCase.cnNodeName)[0].childNodes[0].nodeValue.strip()
  145. tc.name = caseName.encode('utf-8')
  146. dependNode = caseNode.getElementsByTagName(TestCase.dependNodeName)[0]
  147. if (dependNode.childNodes.__len__() > 0):
  148. tc.depend = dependNode.childNodes[0].nodeValue.strip()
  149. descNode = caseNode.getElementsByTagName(TestCase.descNodeName)[0]
  150. if (descNode.childNodes.__len__() > 0):
  151. desc =descNode.childNodes[0].nodeValue.strip()
  152. tc.desc = desc.encode('utf-8')
  153. resultNode = caseNode.getElementsByTagName(TestCase.resultNodeName)[0]
  154. if (resultNode.childNodes.__len__() > 0):
  155. tc.result = resultNode.childNodes[0].nodeValue.strip()
  156. scriptNode = caseNode.getElementsByTagName(TestCase.scriptNodeName)[0]
  157. if (scriptNode.childNodes.__len__() > 0):
  158. tc.script = scriptNode.childNodes[0].nodeValue.strip()
  159. rdetailNode = caseNode.getElementsByTagName(TestCase.detailNodeName)[0]
  160. if (rdetailNode.childNodes.__len__() > 0):
  161. tc.rdetail = rdetailNode.childNodes[0].nodeValue.strip()
  162. logNode = caseNode.getElementsByTagName(TestCase.logNodeName)[0]
  163. if (logNode.childNodes.__len__() > 0):
  164. tc.log = logNode.childNodes[0].nodeValue.strip()
  165. print tc.name,":",tc.depend
  166. ttask.allCase.append(tc)
  167. return ttask
  168. return TestTask()
  169. def correctPath(filepath):
  170. return filepath.replace("/", platform_Util.getFileSeprator())
  171. def parseTask(taskpath):
  172. if (os.path.isfile(taskpath)):
  173. DOMTree = xml.dom.minidom.parse(taskpath)
  174. rootNode = DOMTree.documentElement
  175. caseFilePath=[]
  176. caseNodeList = rootNode.getElementsByTagName(TestTask.testCaseNameNode)
  177. for caseNode in caseNodeList:
  178. if (caseNode.hasAttribute(TestTask.caseNodeAttrFilePathLabel)):
  179. filePath = caseNode.getAttribute(TestTask.caseNodeAttrFilePathLabel)
  180. asFilePath = platform_Util.Environment.taskRootDir + platform_Util.getFileSeprator() + correctPath(filePath)
  181. #print "asFilePath=", asFilePath
  182. caseFilePath.append(asFilePath)
  183. return caseFilePath
  184. return None
  185. def loadLocalTaskData(taskpath):
  186. print "[xml_util]loadLocalTaskData,taskpath=", taskpath
  187. taskData = TestTask()
  188. if (os.path.isfile(taskpath)):
  189. DOMTree = xml.dom.minidom.parse(taskpath)
  190. rootNode = DOMTree.documentElement
  191. caseNodeList = rootNode.getElementsByTagName(TestTask.testCaseNameNode)
  192. count = 0
  193. for caseNode in caseNodeList:
  194. tc = TestCase()
  195. tc.index = count
  196. if (caseNode.hasAttribute(TestTask.caseNodeAttrFilePathLabel)):
  197. tc.srcScript = caseNode.getAttribute(TestTask.caseNodeAttrFilePathLabel)
  198. if (caseNode.hasAttribute(TestTask.caseNodeAttrDescLabel)):
  199. tc.desc = caseNode.getAttribute(TestTask.caseNodeAttrDescLabel).encode("utf-8")
  200. if (caseNode.hasAttribute(TestTask.caseNodeAttrNameLabel)):
  201. tc.name = caseNode.getAttribute(TestTask.caseNodeAttrNameLabel).encode("utf-8")
  202. if (caseNode.hasAttribute(TestTask.caseNodeAttrDependLabel)):
  203. tc.depend = caseNode.getAttribute(TestTask.caseNodeAttrDependLabel)
  204. taskData.addTestCase(tc)
  205. count = count+1
  206. return taskData
  207. def saveLocalTaskData(taskpath, taskData):
  208. print "[xml_util]saveLocalTaskData,taskpath=", taskpath
  209. taskDom = xml.dom.getDOMImplementation()
  210. doc = taskDom.createDocument(None, "root", None)
  211. root = doc.documentElement
  212. for tc in taskData.allCase:
  213. if (tc.selected == True):
  214. caseNode = doc.createElement(TestTask.testCaseNameNode)
  215. caseNode.setAttribute(TestTask.caseNodeAttrNameLabel, tc.name)
  216. caseNode.setAttribute(TestTask.caseNodeAttrDescLabel, tc.desc)
  217. caseNode.setAttribute(TestTask.caseNodeAttrFilePathLabel, tc.srcScript)
  218. caseNode.setAttribute(TestTask.caseNodeAttrDependLabel, tc.depend)
  219. root.appendChild(caseNode)
  220. xmlfile = open(taskpath,"w")
  221. doc.writexml(xmlfile, addindent=' '*4, newl='\n', encoding="utf-8")
  222. xmlfile.close()
  223. def saveLocalTaskFileByCN(taskpath, taskData, cnList):
  224. print "[xml_util]saveLocalTaskData,taskpath=", taskpath
  225. taskDom = xml.dom.getDOMImplementation()
  226. doc = taskDom.createDocument(None, "root", None)
  227. root = doc.documentElement
  228. for cn in cnList:
  229. tc = taskData.getCaseByName(cn)
  230. print cn, ":", tc
  231. if (tc.selected == True):
  232. caseNode = doc.createElement(TestTask.testCaseNameNode)
  233. caseNode.setAttribute(TestTask.caseNodeAttrNameLabel, tc.name)
  234. caseNode.setAttribute(TestTask.caseNodeAttrDescLabel, tc.desc)
  235. caseNode.setAttribute(TestTask.caseNodeAttrFilePathLabel, tc.srcScript)
  236. caseNode.setAttribute(TestTask.caseNodeAttrDependLabel, tc.depend)
  237. root.appendChild(caseNode)
  238. xmlfile = open(taskpath,"w")
  239. doc.writexml(xmlfile, addindent=' '*4, newl='\n', encoding="utf-8")
  240. xmlfile.close()
  241. def test_writeAllResultXml(allcase, resultxml):
  242. resultDom = xml.dom.getDOMImplementation()
  243. doc = resultDom.createDocument(None,"all", None)
  244. xsl = doc.createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="all-result.xsl"')
  245. root = doc.documentElement
  246. doc.insertBefore(xsl, root)
  247. for caseDict in allcase:
  248. caseNode = doc.createElement(TestCase.caseNodeName)
  249. cnNode = create_element(doc, TestCase.cnNodeName, caseDict[TestCase.cnNodeName])
  250. dependNode = create_element(doc, TestCase.dependNodeName, caseDict[TestCase.dependNodeName])
  251. descNode = create_element(doc, TestCase.descNodeName, caseDict[TestCase.descNodeName])
  252. scriptNode = create_element(doc, TestCase.scriptNodeName, caseDict[TestCase.scriptNodeName])
  253. resultNode = create_element(doc, TestCase.resultNodeName, caseDict[TestCase.resultNodeName])
  254. detailNode = create_element(doc, TestCase.detailNodeName, caseDict[TestCase.detailNodeName])
  255. logNode = create_element(doc, TestCase.logNodeName, caseDict[TestCase.logNodeName])
  256. caseNode.appendChild(cnNode)
  257. caseNode.appendChild(dependNode)
  258. caseNode.appendChild(descNode)
  259. caseNode.appendChild(scriptNode)
  260. caseNode.appendChild(resultNode)
  261. caseNode.appendChild(detailNode)
  262. caseNode.appendChild(logNode)
  263. root.appendChild(caseNode)
  264. xmlfile = open(resultxml,"w")
  265. doc.writexml(xmlfile, addindent=' '*4, newl='\n', encoding="utf-8")
  266. xmlfile.close()
  267. def test_parseAllResult(resultxml):
  268. resultDom = xml.dom.minidom.parse(resultxml)
  269. #print resultDom.toxml()
  270. root = resultDom.documentElement #得到根节点
  271. #print root.nodeName,',',root.nodeValue,',',root.nodeType
  272. allcase = []
  273. allcaseNode = root.getElementsByTagName(TestCase.caseNodeName)
  274. for caseNode in allcaseNode:
  275. caseDict = {}
  276. caseName = caseNode.getElementsByTagName(TestCase.cnNodeName)[0].childNodes[0].nodeValue.strip()
  277. print caseName.encode('gbk')
  278. caseDict[TestCase.cnNodeName] = caseName.encode('utf-8')
  279. desc = caseNode.getElementsByTagName(TestCase.descNodeName)[0].childNodes[0].nodeValue.strip()
  280. caseDict[TestCase.descNodeName] = desc.encode('utf-8')
  281. caseDict[TestCase.resultNodeName] = \
  282. caseNode.getElementsByTagName(TestCase.resultNodeName)[0].childNodes[0].nodeValue.strip()
  283. caseDict[TestCase.scriptNodeName] = \
  284. caseNode.getElementsByTagName(TestCase.scriptNodeName)[0].childNodes[0].nodeValue.strip()
  285. caseDict[TestCase.detailNodeName] = \
  286. caseNode.getElementsByTagName(TestCase.detailNodeName)[0].childNodes[0].nodeValue.strip()
  287. caseDict[TestCase.logNodeName] = \
  288. caseNode.getElementsByTagName(TestCase.logNodeName)[0].childNodes[0].nodeValue.strip()
  289. allcase.append(caseDict)
  290. print allcase
  291. # writeAllResultXml(allcase, "all-case-1.xml")
  292. #parseAllResult("all-case.xml")