测试用例excel至国军标word文档格式轻松转换

时间:2024-03-04 15:39:58
 

 

背景,一般测试用例使用excel书写,但是国军标的测试说明,使用的是word格式的。如果excel格式的测试用例能够快速转换为word格式就好了

下面是excel的格式,标志位,用于标记同一个功能,的测试用例是否完结。例如用例名称是添加用户,针对该功能写了3条用例,那最后一条的标志位信息要与前两条不一致

 

 

 

 

python代码

  1 import pandas as pd
  2 
  3 from docx import Document
  4 from collections import Counter
  5 from docx.enum.table import WD_TABLE_ALIGNMENT
  6 from docx.shared import Cm, Pt
  7 from docx.oxml.ns import qn
  8 #  excel配置文件
  9 \'\'\'
 10 一级模块使用2级标题,二级模块使用3级,三级模块使用4级
 11 首先判断一级模块,添加一级模块和正文1,然后判断二级模块,添加二级模块和正文2
 12 \'\'\'
 13 level_1_menu=0
 14 body_1=1
 15 level_2_menu=2
 16 body_2=3
 17 level_3_menu=4
 18 cast_tag = 5
 19 case_num = 6
 20 # 标志位,是否为用例的最后一个序号。
 21 syc =7
 22 # case_name =4
 23 case_from = 8
 24 case_illustrate =9
 25 case_init =10
 26 case_premise =11
 27 case_step = 13
 28 # 预期
 29 expected_result = 14
 30 # 评估
 31 evaluative_criteria = 15
 32 # 备注
 33 mark = 16
 34 # 测试设计
 35 tester =17
 36 date=18
 37 
 38 
 39 df = pd.read_excel(\'E:\\测试用例\echo_gjb_case.xlsx\')
 40 data = df.values
 41 # print(data)
 42 # 用例标识集合
 43 
 44 # 创建一个word,添加一个表格
 45 document = Document()
 46 table = None
 47 last_tag = None
 48 
 49 # 设置一个空白样式
 50 style = document.styles[\'Normal\']
 51 # 设置中文字体
 52 # style.element.rPr.rFonts.set(qn(\'w:eastAsia\'), \'微软雅黑\')
 53 for i in range(len(data)):
 54     # print(data[i])
 55     row_data = data[i]
 56     case_tag_d = row_data[cast_tag]
 57     body_1_d = row_data[body_1]
 58     body_2_d = row_data[body_2]
 59 
 60     if body_1_d !=\'1\':
 61         document.add_heading(str(row_data[level_1_menu]) , 2)
 62 
 63         paragraph = document.add_paragraph(str(row_data[body_1]))
 64 
 65         # paragraph_format = style.paragraph_format
 66         # paragraph_format.first_line_indent = Cm(0.74)
 67 
 68     if body_2_d !=\'1\' and body_2_d !=\'None\'and body_2_d !=\'skip\':
 69         document.add_heading(str(row_data[level_2_menu]), 3)
 70         paragraph = document.add_paragraph(str(row_data[body_2]))
 71     elif body_2_d ==\'None\':
 72         document.add_heading(str(row_data[level_2_menu]), 3)
 73 
 74     # 如果新的测试用例标识和上一个而不一样,添加标题,和部分表格内容
 75     if last_tag != case_tag_d:
 76         # 判断一下,是不是有二级标题,否则将三级标题提高一级
 77         if body_2_d !=\'skip\':
 78             document.add_heading(str(row_data[level_3_menu])+"("+str(row_data[cast_tag]) + \') \' , 4)
 79         elif body_2_d ==\'skip\':
 80             document.add_heading(str(row_data[level_3_menu]) + "(" + str(row_data[cast_tag]) + \') \', 3)
 81         table = document.add_table(rows=7, cols=5, style=\'Table Grid\')
 82         # print("这条case,与之前的都不属于一个功能模块,需要新建一个表格写入\n测试用例的标识是:{0},序号是{1}".format(row_data[cast_tag], row_data[case_num]))
 83 
 84         table.cell(0, 0).text = u\'用例名称\'
 85         table.cell(0, 1).text = str(row_data[level_3_menu])
 86 
 87         table.cell(0, 2).text = u\'用例标识\'
 88         table.cell(0, 3).merge(table.cell(0,4))
 89         table.cell(0, 3).text = str(row_data[cast_tag])
 90 
 91         table.cell(1, 0).text = u\'测试追踪\'
 92         table.cell(1, 1).merge(table.cell(1, 4))
 93         table.cell(1, 1).text = str(row_data[case_from])
 94 
 95         table.cell(2, 0).text = u\'测试说明\'
 96         table.cell(2, 1).merge(table.cell(2, 4))
 97         table.cell(2, 1).text = str(row_data[case_illustrate])
 98 
 99         table.cell(3, 0).text = u\'用例初始化\'
100         table.cell(3, 1).merge(table.cell(3, 4))
101         table.cell(3, 1).text = str(row_data[case_init])
102 
103         table.cell(4, 0).merge(table.cell(4, 4))
104 
105         table.cell(4, 0).text = u\'测试过程\'
106         table.cell(4, 0).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER
107 
108 
109         table.cell(5, 0).text = u\'前提约束\'
110         table.cell(5, 1).merge(table.cell(5, 4))
111         table.cell(5, 1).text = str(row_data[case_premise])
112 
113         table.cell(6, 0).text = u\'序号\'
114         table.cell(6, 1).text = u\'输入及操作说明\'
115         table.cell(6, 2).text = u\'期望\'
116         table.cell(6, 3).text = u\'评估标准\'
117         table.cell(6, 4).text = u\'备注\'
118 
119         table.add_row()
120         table.cell(-1, 0).text = str(row_data[case_num])
121         table.cell(-1, 1).text = str(row_data[case_step])
122         table.cell(-1, 2).text = str(row_data[expected_result])
123         table.cell(-1, 3).text = str(row_data[evaluative_criteria])
124         table.cell(-1, 4).text = str(row_data[mark])
125         # 如果标志位为2,补全表格剩余部分
126         if row_data[syc] == 2:
127             table.add_row()
128             table.cell(-1, 1).merge(table.cell(-1, 4))
129             table.cell(-1, 0).text = u\'测试终止条件\'
130 
131             table.cell(-1, 1).text = u\'测试结果符合预期后,测试终止\'
132             table.add_row()
133             table.cell(-1, 1).merge(table.cell(-1, 4))
134             table.cell(-1, 0).text = u\'测试结果\'
135             table.cell(-1, 1).text = u\'□通过  □未通过但可作优化或修改  □未通过且无法修改\'
136             table.add_row()
137             table.cell(-1, 0).text = u\'设计人员\'
138             table.cell(-1, 1).text = str(row_data[tester])
139 
140             table.cell(-1, 2).text = u\'设计日期\'
141             table.cell(-1, 3).merge(table.cell(-1, 4))
142             table.cell(-1, 3).text = str(row_data[date])
143         last_tag = case_tag_d
144         table = table
145     # 如果 测试用例标识与上一个一样
146     else:
147         # 判断标志位是不是不是2,继续添加表格内容
148         if row_data[syc] !=2:
149             table.add_row()
150             table.cell(-1, 0).text = str(row_data[case_num])
151             table.cell(-1, 1).text = str(row_data[case_step])
152             table.cell(-1, 2).text = str(row_data[expected_result])
153             table.cell(-1, 3).text = str(row_data[evaluative_criteria])
154             table.cell(-1, 4).text = str(row_data[mark])
155         # 如果标志位是2,添加表格内容后,补全表格剩余部分
156         else:
157             table.add_row()
158             table.cell(-1, 0).text = str(row_data[case_num])
159             table.cell(-1, 1).text = str(row_data[case_step])
160             table.cell(-1, 2).text = str(row_data[expected_result])
161             table.cell(-1, 3).text = str(row_data[evaluative_criteria])
162             table.cell(-1, 4).text = str(row_data[mark])
163 
164             table.add_row()
165             table.cell(-1, 1).merge(table.cell(-1, 4))
166             table.cell(-1, 0).text = u\'测试终止条件\'
167 
168             table.cell(-1, 1).text = u\'测试结果符合预期后,测试终止\'
169             table.add_row()
170             table.cell(-1, 1).merge(table.cell(-1, 4))
171             table.cell(-1, 0).text = u\'测试结果\'
172             table.cell(-1, 1).text = u\'□通过  □未通过但可作优化或修改  □未通过且无法修改\'
173             table.add_row()
174             table.cell(-1, 0).text = u\'设计人员\'
175             table.cell(-1, 1).text = str(row_data[tester])
176 
177             table.cell(-1, 2).text = u\'设计日期\'
178             table.cell(-1, 3).merge(table.cell(-1, 4))
179             table.cell(-1, 3).text = str(row_data[date])
180 
181 
182 #
183 document.add_page_break()
184 document.save(\'23.docx\')