需求背景
上個(gè)月推行了這個(gè)東西進(jìn)擊的開(kāi)發(fā)自測(cè),其中有一點(diǎn)是前置提供開(kāi)發(fā)自測(cè),提供的是xmind格式的文檔涧卵,作為測(cè)試記錄,現(xiàn)在提供xmind轉(zhuǎn)為自測(cè)用例的腳本腹尖,格式如下:
模塊 | 用例名稱 | 執(zhí)行步驟 | 預(yù)期結(jié)果 | 驗(yàn)證人 | 自測(cè)結(jié)果 | 測(cè)試驗(yàn)證結(jié)果 | 優(yōu)先級(jí) |
---|
使用
python3 xmind2devcase [目錄](méi) #解析給定的單個(gè)目錄xmind文件
python3 xmind2devcase #解析當(dāng)前目錄下所有xmind文件
xmind的格式
iShot2020-07-0620.27.06.png
iShot2020-07-0620.27.57.png
- 用例名稱前嵌入優(yōu)先級(jí)1柳恐,2,3分別代表高中低級(jí)別
- 用例嵌入備注填入開(kāi)發(fā)自測(cè)人热幔,比較簡(jiǎn)單不做過(guò)多解釋了
腳本
xmind:這個(gè)開(kāi)源庫(kù)其實(shí)就是XMind SDK for python項(xiàng)目(https://github.com/xmindltd/xmind-sdk-python.git)的封裝乐设,xlwt這個(gè)是寫(xiě)excel的第三方庫(kù)。
思路很簡(jiǎn)單绎巨,直接解析近尚,創(chuàng)建xls文件,所以直接上腳本
import xmind,xlwt,os,sys
'''
轉(zhuǎn)換xmind文件到excel文檔场勤,作為開(kāi)發(fā)自測(cè)用例
1.統(tǒng)一的xmind格式編寫(xiě)
目錄戈锻,測(cè)試用例歼跟,執(zhí)行步驟,預(yù)期結(jié)果
測(cè)試用例解析為一行格遭,執(zhí)行步驟可以多條哈街,解析成一行
備注->填寫(xiě)指定驗(yàn)證人
優(yōu)先級(jí) ->指定1、2如庭、3優(yōu)先級(jí)
2.定義提取的自測(cè)用例
依賴:xmind叹卷、xlwt模塊
3.使用:
python3 xmind2devcase [目錄](méi) #解析給定的單個(gè)目錄xmind文件
python3 xmind2devcase #解析當(dāng)前目錄下所有xmind文件
'''
global parseAll
parseAll = True
def loadMind(path:str) -> dict:
workbook = xmind.load(path)
ret = workbook.getPrimarySheet().getData().get("topic")
return ret
def generExcel(xl_name:str,mind_dic:dict) -> None:
wb = xlwt.Workbook()
ws = wb.add_sheet("自測(cè)用例") #type: xlwt.Worksheet
style_title = xlwt.easyxf('font: bold on;align: wrap on, vert centre, horiz center')
style_title_content = xlwt.easyxf('align: wrap on, vert centre')
style_title_content2 = xlwt.easyxf('align: wrap on, vert centre,horiz center')
ws.write(0,0,"模塊",style=style_title)
ws.write(0, 1, "用例名稱",style=style_title)
ws.write(0, 2, "執(zhí)行步驟",style=style_title)
ws.write(0, 3, "預(yù)期結(jié)果",style=style_title)
ws.write(0, 4, "驗(yàn)證人",style=style_title)
ws.write(0, 5, "自測(cè)結(jié)果",style=style_title)
ws.write(0, 6, "測(cè)試驗(yàn)證結(jié)果", style=style_title)
ws.write(0,7,"優(yōu)先級(jí)",style=style_title)
ws.col(0).width = 256 * 20
ws.col(1).width = 256 * 20
ws.col(2).width = 256 * 40
ws.col(3).width = 256 * 40
ws.col(4).width = 256 * 20
ws.col(5).width = 256 * 20
ws.col(6).width = 256 * 20
ws.col(7).width = 256 * 20
row = 1
#解析開(kāi)始
dirs = mind_dic.get("topics")
for dir in dirs:
dir_title = dir.get("title") #目錄名字
try:
ws.write(row,0,dir_title,style_title_content2)
except:
ws.write(row+1, 0, dir_title, style_title_content2)
row += 1
cases = dir.get("topics")
if not cases:
continue
for case in cases:
case_title = case.get("title") #用例名稱
case_note = case.get("note") #用例執(zhí)行人
case_markers = case.get("markers")
if not parseAll:
if not case_markers:
continue
case_priority = "高" if "priority-1" in case_markers else "中" if "priority-2" in case_markers else "低" #用例優(yōu)先級(jí)
steps = case.get("topics")
ws.write(row,1,case_title,style_title_content)
ws.write(row,4, case_note,style_title_content2)
ws.write(row, 7, case_priority,style_title_content2)
#下面都是跟隨一行
step_title_real = ""
result_title_real = ""
index = 1
if not steps:
row += 1
continue
for step in steps:
step_title = step.get("title") #步驟
step_title_real += str(index) + "." +step_title+"\n"
results = step.get("topics")
if not results:
index += 1
continue
is_first_time = True
for result in results:
result_title = result.get("title") #預(yù)期結(jié)果
if is_first_time:
result_title_real += str(index) + "." + result_title + "\n"
else:
result_title_real += " " + result_title + "\n"
is_first_time = False
index += 1
ws.write(row,2,step_title_real,style_title_content)
ws.write(row,3,result_title_real,style_title_content)
row += 1
wb.save(xl_name)
def init_args():
args = sys.argv
args_len = args.__len__()
return args,args_len
def x_main():
if args_len < 2:
# 解析當(dāng)前目錄
cur_dir = os.path.dirname(os.path.abspath(args[0]))
ret = os.listdir(cur_dir)
ret = list(filter(lambda x:str(x).lower().strip().endswith("xmind"),ret))
ret = list(map(lambda x:os.path.join(cur_dir,x),ret))
for i in ret:
d = loadMind(i)
generExcel(i.replace("xmind", "xls"), d)
else:
# 解析傳入目錄
d = loadMind(args[1])
generExcel(str(args[1]).replace("xmind","xls"),d)
if __name__ == "__main__":
global args,args_len
args,args_len = init_args()
x_main()