xml_util.py 15 KB

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