背景,一般测试用例使用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\')