#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import re
import os
import xlwt
import xlrd
import linecache
import collections
import xml.dom.minidom as xmldom
from xlutils.copy import copy
FilePath="C:\\Users\\lwx566632\\Desktop\\rm\\fff.txt" #测试结果txt文件的路径
WritePath="C:\\Users\\lwx566632\\Desktop\\rm\\all_mp4sidedata1.xls" #标记测试结果的excel文件路径,文件后缀必须是xls
FilterFile="C:\\Users\\lwx566632\\Desktop\\rm\\filter_file.txt"
Filter_Sign="TEST|Segmentation|Aborted"
if_Filter=False
Case_Col='A' #excel中用例所在列(大写字母)
Input_Col='B' #标记测试结果(Pass或者fail)的列数(大写字母)
Url_Sign="TEST: The url is" #用例标识
Url_Pass_Sign="PASSSSSSSSSSSSSS" #用例成功标识
Url_Fail_Sign="FAILED" #用例失败标识
Url_Segmentation_Sign="Segmentation" #用例Segmentation标识
Url_Aborted_Sign="Aborted" #用例Aborted标识
Url_Fail_Result_Sign="TEST: Value of" #用例失败原因标识
Url_Fail_Result="of" #用例失败原因关键字,有多个关键字用'|'号隔开,例"ffmpeg|HMF"
Url_Fail_Result_Pos=1 #用例失败原因关键字处于行的位置,例如TEST:Value of [ffmpeg.streams[i].mediaInfo.vidInfo.profile] is: [-99]中[ffmpeg.streams[i].mediaInfo.vidInfo.profile]处于第2块
def parse_xml():
with open(FilePath) as file:
str1=file.read().split()
CaseNum=collections.Counter(str1)['tests="1"'] #统计xml结果文件中记录的用例个数
print CaseNum
if True:
xml_file = xmldom.parse(FilePath)
eles = xml_file.documentElement
for testcase in range(0,CaseNum):
message=""
messageNum=0
suite=eles.getElementsByTagName("testsuite")[testcase]
case=suite.childNodes
caseName=case[1].getAttribute("name")
caseResult=suite.getAttribute("failures")
print "case: " + str(testcase+1)
# print caseName
print "testresult(0:pass 1:fail): " + caseResult
if caseResult!=0:
childNode=case[1].childNodes
for child in childNode:
if child.nodeName=="failure":
message=message+"\n\r"+child.getAttribute("message")
messageNum+=1
if messageNum>5:
message="Too many questions"
break
# print message
# print "---------------------------------"
Row=find_case(caseName)
if Row!=0:
write_XMLdata(Row, caseResult, message)
print "================================"
return 0
def find_case(name):
# print "++"+name+"++"
data = xlrd.open_workbook(WritePath) #打开excel文件
table = data.sheets()[0] #根据sheet序号来获取excel中的sheet
nrows = table.nrows #行数
# print nrows
col=ord(Case_Col)-ord('A')
for rownum in range(1,nrows):
row = table.row_values(rownum) #根据行号获取行
if row: #如果行存在
# print row
# print "++"+row[col]+"++"
row_data = row[col].encode('utf-8')
# print "++"+row_data+"++"
if row_data in name:
print "Case in Excel row "+str(rownum+1)+": "+name
return rownum
os.system("echo "+name+">>NoTheseCaseInExcel.txt")
return 0
def write_XMLdata(row, result, message):
rb = xlrd.open_workbook(WritePath)
wb = copy(rb)
ws = wb.get_sheet(0)
col=ord(Input_Col)-ord('A')
if result=="0":
# print "PASS-----"
ws.write(row, col, "PASS")
else:
# print "FAIL-----"
ws.write(row, col, "FAIL")
ws.write(row, col+1, message)
wb.save(WritePath)
def parse_txt():
global current_url_path
global current_url_result
global fail_result_message
current_url_path=""
current_url_result="NoResult"
fail_result_message=""
Line_Num=0
file=open(FilePath)
for line in file:
Line_Num+=1
# print str(Line_Num)+"++"+line.strip()+"++"
is_url=Url_Sign in line
# print "is_url"+str(is_url)
is_url_pass=Url_Pass_Sign in line
# print "is_url_pass"+str(is_url_pass)
is_url_fail=Url_Fail_Sign in line
# print "is_url_fail"+str(is_url_fail)
is_url_Segmentation=Url_Segmentation_Sign in line
# print "is_url_Segmentation"+str(is_url_Segmentation)
is_url_Aborted=Url_Aborted_Sign in line
# print "is_url_Aborted"+str(is_url_Aborted)
is_url_fail_result=Url_Fail_Result_Sign in line
# print "is_url_fail_result"+str(is_url_fail_result)
if current_url_path=="":
if is_url:
current_url_path=line.replace("\r","").replace("\n","")
# print current_url_path
current_url_result="NoResult"
else:
if is_url_pass:
current_url_result="PASS"
if is_url_fail:
current_url_result="FAIL"
if is_url_Segmentation:
current_url_result="Segmentation"
fail_result_message=fail_result_message+linecache.getline(FilePath,Line_Num-1)
if is_url_Aborted:
current_url_result="Aborted"
fail_result_message=fail_result_message+linecache.getline(FilePath,Line_Num-1)
if is_url_fail_result:
if re.findall(Url_Fail_Result,line):
print line.split(':',3)[Url_Fail_Result_Pos]
if line.split(':',3)[Url_Fail_Result_Pos] not in fail_result_message:
fail_result_message=fail_result_message+line
# print fail_result_message
if is_url:
#结果写入excel
Row=find_case(current_url_path)
# print Row
if Row:
print "++ "+current_url_result+"--"+current_url_path
write_TXTdata(Row, current_url_result, fail_result_message)
#设置为当前用例
current_url_path=line.replace("\r","").replace("\n","")
# print current_url_path
current_url_result="NoResult"
fail_result_message=""
# raw_input()
#结果写入excel
Row=find_case(current_url_path)
# print Row
if Row:
print "++ "+current_url_result+"--"+current_url_path
write_TXTdata(Row, current_url_result, fail_result_message)
def write_TXTdata(row, result, message):
rb = xlrd.open_workbook(WritePath)
wb = copy(rb)
ws = wb.get_sheet(0)
col=ord(Input_Col)-ord('A')
ws.write(row, col, result)
ws.write(row, col+1, message)
wb.save(WritePath)
def filter():
global FilePath
file=open(FilePath)
errorLog = open(FilterFile,'w')
for line in file:
if re.findall(Filter_Sign,line):
errorLog.write((line.strip('\r\n')+'\n'))
errorLog.close()
file.close()
FilePath=FilterFile
return 0
if __name__ == "__main__":
if if_Filter:
filter()
parse_txt()