xml 转换为 EXCEL 实例 (Python)---testlink 测试用例转换

前端之家收集整理的这篇文章主要介绍了xml 转换为 EXCEL 实例 (Python)---testlink 测试用例转换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

现况:使用 testlink 进行测试用例的书写,导出为 xml

原因:客户需要EXCEL测试用例,而testlink导出的用例是xml

目的:xml 转换为 excel 形式的

知识准备:Python ,xlwt 模块

最后实现的效果图:

实现代码

#-*- coding: utf-8 -*-
import xlwt
import re
import xml.etree.ElementTree as ET
class xml_excel():
    def __init__(self):
        self.file=xlwt.Workbook(encoding='UTF-8')
        self.borders=xlwt.Borders()
        self.pattern=xlwt.Pattern() 
        self.font=xlwt.Font()
        self.style=xlwt.XFStyle()
    def sheet_border(self):
        #设置边框
        self.borders.left=xlwt.Borders.THIN
        self.borders.right=xlwt.Borders.THIN
        self.borders.top=xlwt.Borders.THIN
        self.borders.bottom=xlwt.Borders.THIN
        self.style.borders=self.borders
        return self.style
    '''def sheet_font(self):
        self.font.name='SimSun'
        self.font.bold=True
        self.style.font=self.font'''
        
        return self.style
    def write_heard(self,name1):
        self.add_shet=self.file.add_sheet(name1)
        self.add_shet.write(0,'用例模块',self.sheet_border())
        self.add_shet.write(0,1,'用例标题',2,'用例概要',3,'前提条件',4,'编号',5,'操作步骤',6,'预期结果',self.sheet_border())
    def write_count(self,num1,num2,str1):
        self.add_shet.write(num1,str1,self.sheet_border())
    def excel_merge(self,num11,num22,num33,num44,str11):
        self.add_shet.write_merge(num11,str11,self.sheet_border())
    def cell_width(self):
        self.add_shet.col(0).width=5000
        self.add_shet.col(1).width=10000
        self.add_shet.col(2).width=5000
        self.add_shet.col(3).width=10000
        self.add_shet.col(5).width=20000
        self.add_shet.col(5).height=5000
        self.add_shet.col(6).width=40000
        self.add_shet.col(6).height=5000
    def save_excel(self):
        self.file.save('testcase.xls')

    def excel_replace(self,ss):
        self.re_cdata=re.compile('</{0,1}[^>]*>',re.I)
        self.s=re.compile(r'&')
        # & 符号
        self.re_ca=re.compile(r'&')
        #小于号
        self.re_cx=re.compile(r'<')
        #大于号
        self.re_cd=re.compile(r'>')
        #双引号
        self.re_cs=re.compile(r'"')
        #空格
        self.re_ck=re.compile(r'')
        #破折号
        self.re_cp=re.compile(r'—')
        #上尖括号;
        self.re_cj=re.compile(r'…')
        #中文双引号
        self.re_czsl=re.compile(r'“')
        #中文双引号
        self.re_czsr=re.compile(r'”')
        #中文单引号
        self.re_czdl=re.compile(r'‘')
        #中文单引号
        self.re_czdr=re.compile(r'’')       
        s=self.re_cdata.sub('',ss)
        s=self.re_ca.sub(r'&',s)
        s=self.re_cx.sub(r'<',s)
        s=self.re_cd.sub(r'>',s)
        s=self.re_cs.sub(r'"',s)
        s=self.re_ck.sub(r' ',s)
        s=self.re_cp.sub(r'-',s)
        s=self.re_cj.sub(r'^',s)
        s=self.re_czsl.sub(r'“',s)
        s=self.re_czsr.sub(r'”',s)
        s=self.re_czdl.sub(r'‘',s)
        s=self.re_czdr.sub(r'’',s) 
        return s
    def set_merge(self):
        pass
tree=ET.parse("testcase.xml")
#获取 xml 根目录
root=tree.getroot()
#获取 测试用例集
testsuite_per=root.findall("testsuite")
#循环测试用例集
aa={}
dict_temp={}
xe=xml_excel()

for num_suite in range(0,len(testsuite_per)):
    xe.write_heard(testsuite_per[num_suite].get('name'))
    #获取子用例集
    row_flag=1
    list_row=[0]
    for testsuite_son in testsuite_per[num_suite].findall("testsuite"):
       #获取测试用例
        testcase=testsuite_son.getiterator("testcase")
        num=len(testcase) 
        #print num
        #循环每个测试用例
        for case in range(0,num):
            steps=testcase[case].getiterator('step')
           #循环测试用例步骤
            for step in steps:
                list_temp=[]
                list_temp.append(step[1].text)
                list_temp.append(step[2].text)
                dict_temp[step[0].text]=list_temp
                #aa['step']=dict_temp
            #print dict_temp,len(steps),row_flag
            row_start=row_flag
            if len(steps)!=0:
                for i in range(1,len(steps)+1):
                    xe.write_count(row_flag,str(i))
                    if dict_temp[str(i)][0]!=None:
                        xe.write_count(row_flag,xe.excel_replace(dict_temp[str(i)][0]))
                    else:
                        xe.write_count(row_flag,dict_temp[str(i)][0])
                    if dict_temp[str(i)][1]!=None:
                        xe.write_count(row_flag,xe.excel_replace(dict_temp[str(i)][1]))
                    else:
                        xe.write_count(row_flag,dict_temp[str(i)][1])
                    row_flag+=1
            else:
                row_flag+=1
                continue
        
            #xe.excel_merge(row_start,row_flag-1,0)  
            xe.excel_merge(row_start,testcase[case].get('name'))
            if testcase[case].find('summary').text!=None:
                xe.excel_merge(row_start,xe.excel_replace(testcase[case].find('summary').text))
            else:
                xe.excel_merge(row_start,testcase[case].find('summary').text)
            if testcase[case].find('preconditions').text!=None:
                xe.excel_merge(row_start,xe.excel_replace(testcase[case].find('preconditions').text))
            else:
                xe.excel_merge(row_start,testcase[case].find('preconditions').text)    
        list_row.append(row_flag-1)
        #print list_row
        #print list_row[len(list_row)-1],list_row[len(list_row)-2]
        if num!=0:
            xe.excel_merge(list_row[len(list_row)-2]+1,list_row[len(list_row)-1],testsuite_son.get('name'))
        else:
            continue
        xe.cell_width()
        xe.save_excel()
                #xe.write_merge(aa)
print '转转换完毕 请查阅'

猜你在找的XML相关文章