把Testlink的case导出转成excel,或把excel导入Testlink

来源:互联网 发布:一个月工资3000 知乎 编辑:程序博客网 时间:2024/06/04 01:34

这个脚本作用:

1:从testlinkexport  testsuite,下载的是xml格式的case文件。

2:用Read_xml_to_csv这个函数 转成csv格式,这个格式excel可以打开编辑case

3:编辑好的csv文件再用read_csv_to_xml这个函数转换回xml格式。

4:然后testlink上用import导入这个xml文件了。

注意:

我们在excel里面编辑的时候,不要添加或删除表格,只能改内容。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# -*- coding=gbk -*-
import sys  
reload(sys)  
sys.setdefaultencoding('gbk')   
import csv
from xml.etree.ElementTree import iterparse
import xml.etree.ElementTree as ET
from HTMLParser import HTMLParser
class XML_CSV():
    #去掉xml文件中的HTML标签
    def strip_tags(self,htmlStr):
        htmlStr = htmlStr.strip()
        htmlStr = htmlStr.strip("\n")
        result = []
        parser = HTMLParser()
        parser.handle_data = result.append
        parser.feed(htmlStr)
        parser.close()
        return  ''.join(result)
      
    def read_xml_to_csv(self,csv_file,xmlfile):  
        csvfile = open(csv_file, 'wb')
        spamwriter = csv.writer(csvfile, dialect='excel')
        spamwriter.writerow(['tag''name''node_order''details''internalid','externalid','summary','steps','expectedresults'])
        #逐行解析XML文件,将每行的内容存入列表,之后逐行写入CSV文件中
        for (event,node) in iterparse(xmlfile,events=['start']):
            if node.tag == "testsuite":
                suite_list = ['','','','','','','','','']
                print node.attrib['name']
                suite_list[0= node.attrib['name']
                for child in node:
                    if child.tag == "node_order":
                        print child.text
                        suite_list[2= child.text
                    if child.tag == "details":
                        print child.text
                        suite_list[3= self.strip_tags(str(child.text))
                spamwriter.writerow(suite_list)
            if node.tag == "testcase":
                case_list = ['testcase','','','','','','','','']
                print node.attrib['internalid']
                print node.attrib['name']
                case_list[1= node.attrib['name']
                case_list[4= node.attrib['internalid']
                for child in node:
                    if child.tag == "node_order":
                        print child.text
                        case_list[2= child.text
                    if child.tag == "externalid":
                        print child.text
                        case_list[5= child.text
                    if child.tag == "summary":
                        print self.strip_tags(str(child.text))
                        case_list[6= self.strip_tags(str(child.text))
                    if child.tag == "steps":
                        print self.strip_tags(str(child.text))
                        case_list[7= self.strip_tags(str(child.text))
                    if child.tag == "expectedresults":
                        #print child.text
                        print self.strip_tags(str(child.text))
                        case_list[8= self.strip_tags(str(child.text))
                spamwriter.writerow(case_list)
        csvfile.close()
     
    def read_csv_to_xml(self,csv_file,xmlfile):
        #逐行读取CSV文件的内容,将内容写进以internalid为键,name,sumary,steps,expectresult为值得字典
        csv_file = file(csv_file,'rb')
        reader = csv.reader(csv_file)  
        case_dic = {}  
        for line in reader:  
            if reader.line_num == 1:  
                continue  
            if line[0== "testcase":
                name = str(line[1])
                internalid = str(line[4])
                summary = line[6]
                steps = line[7]
                expectedresults = line[8]
                case_dic[internalid] = (name,summary,steps,expectedresults)
        csv_file.close()
        print case_dic
        #用ElementTree方法打开xml文件,逐行解析XML文件,发现case为tag的行,就将name,sumary,steps,expectresult,这几项用字典的值替换。
        tree = ET.ElementTree()
        tree.parse(xmlfile)
        root = tree.getroot()
        root_suite_name = root.attrib['name']
         
        for node in tree.iter():
            if node.tag == "testsuite":
                print node.attrib['name']
                sub_suite_name = node.attrib['name']
                if sub_suite_name == root_suite_name:
                    sub_suite_name = ""
                for child in node:
                    if child.tag == "node_order":
                        #print child.text
                        pass
                    if child.tag == "details":
                        pass
            if node.tag == "testcase":
                new_internalid = node.attrib['internalid']
                #将根目录和子目录的名字都写进了case名字中。如果不需要可以用下面那行注释掉的替换这一行
                node.attrib['name'= root_suite_name+'_'+sub_suite_name+'_'+case_dic[new_internalid][0]
                #node.attrib['name'] = case_dic[new_internalid][0]
                print node.attrib['name']
                #解析tag为testcase的节点的子节点,并修改节点的值
                for child in node:
                    if child.tag == "node_order":
                        pass
                    if child.tag == "externalid":
                        pass
                    if child.tag == "summary":
                        child.text = case_dic[new_internalid][1]
                        child.text = str(child.text.replace('\n',"<p>"))
                    if child.tag == "steps":
                        child.text = str(case_dic[new_internalid][2])
                        child.text = str(child.text.replace('\n',"<p>"))
                    if child.tag == "expectedresults":
                        child.text = case_dic[new_internalid][3]
                        child.text = str(child.text.replace('\n',"<p>"))
        #将修改后的ElementTree对象写入xml文件中。
        tree.write(xmlfile,encoding='utf8')   
if __name__ == "__main__":
    test = XML_CSV()
    #test.read_xml_to_csv('testsuites2.csv','testsuites.xml')
    test.read_csv_to_xml('testsuites2.csv','testsuites.xml')


原创作品,转载请注明来自drupal0.com

0 0
原创粉丝点击