使用python把xmind轉(zhuǎn)換成excel測試用例的實現(xiàn)代碼
前言
因為寫好了測試xmind腦圖后,然后再編寫測試用例,實在是太麻煩了,所以我寫了一點測試用例后,就網(wǎng)上百度了下,怎么直接把xmind腦圖轉(zhuǎn)換成excel測試用例,純個人學(xué)習(xí)筆記
本文參考:https://www.jb51.net/article/197246.htm
https://www.jb51.net/article/197249.htm
提示:以下是本篇文章正文內(nèi)容,下面可供參考
一、確定好自己的xmind的用例格式
因為xmind的格式關(guān)系到編寫代碼的邏輯關(guān)系,所以需要先確定好自己的xmind的格式,本人學(xué)習(xí)時使用的格式如下:
二、xmindparser庫的使用
1.下載庫
默認下載最新庫,在配好環(huán)境python環(huán)境變量的前提下,cmd中輸入如下命令:
pip install xmindparser
或直接在pycharm中,點擊左上角“File” > Settings(或者直接Ctrl+Alt+s) > Project:你的項目名稱 > Python Interpreter > + > 搜索xmindparser > Install Package
2.xmindparser的使用
代碼如下(示例):
from xmindparser import xmind_to_dictimport jsonxm = xmind_to_dict('sulinkAPP.xmind')[0][’topic’]# indent為顯示json格式,ensure_ascii未顯示為中文,不顯示ASCII碼print(json.dumps(xm, indent=2, ensure_ascii=False))
運行結(jié)果顯示為:
{ 'title': 'sulinkAPP', 'topics': [{ 'title': '登錄', 'topics': [{ 'title': '正向用例', 'topics': [{ 'title': '正確的手機號碼一鍵登錄', 'topics': [{ 'title': '進入‘登錄/注冊’頁面', 'topics': [{ 'title': '成功進入‘登錄/注冊’頁面' }] }, { 'title': '選中‘我已閱讀并同意用戶協(xié)議’,點擊‘本機號碼一鍵登錄’', 'topics': [{ 'title': '進入‘手機快捷登錄頁面’' }] }, { 'title': '點擊‘一鍵登錄’', 'topics': [{ 'title': '登錄成功,跳轉(zhuǎn)至‘我的’頁面' }] }] }, { 'title': '正確的手機號碼及驗證碼登錄', 'topics': [{ 'title': '進入‘登錄/注冊’頁面', 'topics': [{ 'title': '成功進入‘登錄/注冊’頁面' }] }, { 'title': '點擊‘其他登錄方式’', 'topics': [{ 'title': '成功進入‘手機登錄’頁面' }] }, { 'title': '選擇正確的區(qū)號,輸入正確的手機號碼,點擊‘獲取驗證碼’', 'topics': [{ 'title': '提示‘驗證碼已發(fā)送’,并正確收到驗證碼' }] }, { 'title': '正確輸入收到的驗證碼,選中‘我已閱讀并同意用戶協(xié)議’,點擊登錄', 'topics': [{ 'title': '登錄成功,跳轉(zhuǎn)至‘我的’頁面' }] }] }] }] }]}
三、xlwt庫的使用
1.下載xlwt庫
默認下載最新庫,在配好環(huán)境python環(huán)境變量的前提下,cmd中輸入如下命令:
pip install xlwt
或如同xmindparser一樣,在pycharm中下載
2.xlwt庫的簡單使用
簡單的使用如下:
import xlwt # 導(dǎo)入模塊workbook = xlwt.Workbook(encoding=’utf-8’) # 創(chuàng)建workbook 對象worksheet = workbook.add_sheet(’sheet1’) # 創(chuàng)建工作表sheetworksheet.write(0, 0, ’hello’) # 往表中寫內(nèi)容,第一各參數(shù) 行,第二個參數(shù)列,第三個參數(shù)內(nèi)容workbook.save(’students.xls’) # 保存表為students.xls
詳細的使用,可以參照此文章:https://www.jb51.net/article/154535.htm
四、讀取xmind數(shù)據(jù)并寫入excel表格中
1.簡單的創(chuàng)建一個用例excel表格,并寫入第一行數(shù)據(jù)
代碼如下
import xlwt # 導(dǎo)入模塊from xmindparser import xmind_to_dictxm = xmind_to_dict('sulinkAPP.xmind')[0][’topic’]# 讀取xmind數(shù)據(jù)workbook = xlwt.Workbook(encoding=’utf-8’) # 創(chuàng)建workbook對象worksheet = workbook.add_sheet(xm['title'], cell_overwrite_ok=True) # 創(chuàng)建工作表,并設(shè)置可以重寫單元格內(nèi)容row0 = ['testcaseid', ’需求名稱’, ’測試用例名稱’, ’執(zhí)行步驟’, ’預(yù)期結(jié)果’, ’服務(wù)名稱’, ’版本’, ’執(zhí)行人員’]# 寫成excel表格用例的要素for i in range(len(row0)): worksheet.write(0, i, row0[i])
2.讀取xmind數(shù)據(jù),然后寫入上面表格中
在上面的代碼的基礎(chǔ)上添加點,把xmind數(shù)據(jù)寫入excel表格中
import xlwt # 導(dǎo)入模塊from xmindparser import xmind_to_dictxm = xmind_to_dict('sulinkAPP.xmind')[0][’topic’]# 讀取xmind數(shù)據(jù)workbook = xlwt.Workbook(encoding=’utf-8’) # 創(chuàng)建workbook對象worksheet = workbook.add_sheet(xm['title'], cell_overwrite_ok=True) # 創(chuàng)建工作表,并設(shè)置可以重寫單元格內(nèi)容row0 = ['testcaseid', ’需求名稱’, ’測試用例名稱’, ’執(zhí)行步驟’, ’預(yù)期結(jié)果’, ’服務(wù)名稱’, ’版本’, ’執(zhí)行人員’]# 寫成excel表格用例的要素for i in range(len(row0)): worksheet.write(0, i, row0[i])x = 0 # 寫入數(shù)據(jù)的當(dāng)前行數(shù)z = 0 # 用例的編號for i in range(len(xm['topics'])): test_module = xm['topics'][i] for j in range(len(test_module['topics'])): test_suit = test_module['topics'][j] for k in range(len(test_suit['topics'])): test_case = test_suit['topics'][k] z += 1 c1 = len(test_case['topics'])# 執(zhí)行步驟有幾個 for n in range(len(test_case['topics'])): x += 1 test_step = test_case['topics'][n] test_except = test_step['topics'][0] worksheet.write(x, 4, f'{n + 1}.' + test_except['title'])# 預(yù)期結(jié)果 worksheet.write(x, 3, f'{n + 1}.' + test_step['title']) # 執(zhí)行步驟 worksheet.write_merge(x - c1 + 1, x, 0, 0, z) # testcaseid worksheet.write_merge(x - c1 + 1, x, 1, 1, test_module['title']) # 測試需求名稱 worksheet.write_merge(x - c1 + 1, x, 2, 2, test_case['title']) # 測試用例名稱workbook.save(xm['title'] + '.xls') # xls名稱取xmind主題名稱
執(zhí)行結(jié)果如下:
3.調(diào)整下表格的格式
在上面的代碼的基礎(chǔ)上修改下,簡單的增加表格的樣式
import xlwt # 導(dǎo)入模塊from xmindparser import xmind_to_dictdef styles(): '''設(shè)置單元格的樣式的基礎(chǔ)方法''' style = xlwt.XFStyle() return styledef borders(status=1): '''設(shè)置單元格的邊框 細實線:1,小粗實線:2,細虛線:3,中細虛線:4,大粗實線:5,雙線:6,細點虛線:7大粗虛線:8,細點劃線:9,粗點劃線:10,細雙點劃線:11,粗雙點劃線:12,斜點劃線:13''' border = xlwt.Borders() border.left = status border.right = status border.top = status border.bottom = status return borderdef heights(worksheet, line, size=4): '''設(shè)置單元格的高度''' worksheet.row(line).height_mismatch = True worksheet.row(line).height = size*256def widths(worksheet, line, size=11): '''設(shè)置單元格的寬度''' worksheet.col(line).width = size*256def alignments(**kwargs): '''設(shè)置單元格的對齊方式 status有兩種:horz(水平),vert(垂直) horz中的direction常用的有:CENTER(居中),DISTRIBUTED(兩端),GENERAL,CENTER_ACROSS_SEL(分散),RIGHT(右邊),LEFT(左邊) vert中的direction常用的有:CENTER(居中),DISTRIBUTED(兩端),BOTTOM(下方),TOP(上方)''' alignment = xlwt.Alignment() if 'horz' in kwargs.keys(): alignment.horz = eval(f'xlwt.Alignment.HORZ_{kwargs[’horz’].upper()}') if 'vert' in kwargs.keys(): alignment.vert = eval(f'xlwt.Alignment.VERT_{kwargs[’vert’].upper()}') alignment.wrap = 1 # 設(shè)置自動換行 return alignmentdef fonts(name=’宋體’, bold=False, underline=False, italic=False, colour=’black’, height=11): '''設(shè)置單元格中字體的樣式 默認字體為宋體,不加粗,沒有下劃線,不是斜體,黑色字體''' font = xlwt.Font() # 字體 font.name = name # 加粗 font.bold = bold # 下劃線 font.underline = underline # 斜體 font.italic = italic # 顏色 font.colour_index = xlwt.Style.colour_map[colour] # 大小 font.height = 20 * height return fontdef patterns(colors=1): '''設(shè)置單元格的背景顏色,該數(shù)字表示的顏色在xlwt庫的其他方法中也適用,默認顏色為白色 0 = Black, 1 = White,2 = Red, 3 = Green, 4 = Blue,5 = Yellow, 6 = Magenta, 7 = Cyan, 16 = Maroon, 17 = Dark Green,18 = Dark Blue, 19 = Dark Yellow ,almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray,23 = Dark Gray, the list goes on...''' pattern = xlwt.Pattern() pattern.pattern = xlwt.Pattern.SOLID_PATTERN pattern.pattern_fore_colour = colors return patterndef main(): xm = xmind_to_dict('sulinkAPP.xmind')[0][’topic’] # print(json.dumps(xm, indent=2, ensure_ascii=False)) # indent為顯示json格式,ensure_ascii為顯示為中文,不顯示ASCII碼 workbook = xlwt.Workbook(encoding=’utf-8’) # 創(chuàng)建workbook對象 worksheet = workbook.add_sheet(xm['title'], cell_overwrite_ok=True) # 創(chuàng)建工作表 row0 = ['testcaseid', ’需求名稱’, ’測試用例名稱’, ’執(zhí)行步驟’, ’預(yù)期結(jié)果’, ’服務(wù)名稱’, ’版本’, ’執(zhí)行人員’] sizes = [10, 11, 30, 60, 50, 11, 11, 11] dicts = {'horz': 'CENTER', 'vert': 'CENTER'} style2 = styles() style2.alignment = alignments(**dicts) style2.font = fonts() style2.borders = borders() style2.pattern = patterns(7) heights(worksheet, 0) for i in range(len(row0)): worksheet.write(0, i, row0[i], style2) widths(worksheet, i, size=sizes[i]) style = styles() style.borders = borders() x = 0 # 寫入數(shù)據(jù)的當(dāng)前行數(shù) z = 0 # 用例的編號 for i in range(len(xm['topics'])): test_module = xm['topics'][i] for j in range(len(test_module['topics'])): test_suit = test_module['topics'][j] for k in range(len(test_suit['topics'])): test_case = test_suit['topics'][k] z += 1 c1 = len(test_case['topics']) # 執(zhí)行步驟有幾個 for n in range(len(test_case['topics'])): x += 1 test_step = test_case['topics'][n] test_except = test_step['topics'][0] worksheet.write(x, 4, f'{n + 1}.' + test_except['title'], style) # 預(yù)期結(jié)果 worksheet.write(x, 3, f'{n + 1}.' + test_step['title'], style) # 執(zhí)行步驟 worksheet.write_merge(x - c1 + 1, x, 0, 0, z, style) # testcaseid worksheet.write_merge(x - c1 + 1, x, 1, 1, test_module['title'], style) # 測試需求名稱 worksheet.write_merge(x - c1 + 1, x, 2, 2, test_case['title'], style) # 測試用例名稱 workbook.save(xm['title'] + '.xls') # xls名稱取xmind主題名稱if __name__ == '__main__': main()
運行結(jié)果如下:
4.封裝方法
上面的代碼基本已經(jīng)完成了,但是為了更好看,代碼可讀性更高,所以封裝下方法
# -*- coding:utf-8 -*-from xmindparser import xmind_to_dictimport xlwtclass XlwtSeting(object): @staticmethod # 靜態(tài)方法裝飾器,使用此裝飾器裝飾后,可以直接使用類名.方法名調(diào)用(XlwtSeting.styles()),并且不需要self參數(shù) def template_one(worksheet): dicts = {'horz': 'CENTER', 'vert': 'CENTER'} sizes = [15, 15, 30, 60, 45, 45, 15, 15] se = XlwtSeting() style = se.styles() style.alignment = se.alignments(**dicts) style.font = se.fonts(bold=True) style.borders = se.borders() style.pattern = se.patterns(7) se.heights(worksheet, 0) for i in range(len(sizes)): se.widths(worksheet, i, size=sizes[i]) return style @staticmethod def template_two(): dicts2 = {'vert': 'CENTER'} se = XlwtSeting() style = se.styles() style.borders = se.borders() style.alignment = se.alignments(**dicts2) return style @staticmethod def styles(): '''設(shè)置單元格的樣式的基礎(chǔ)方法''' style = xlwt.XFStyle() return style @staticmethod def borders(status=1): '''設(shè)置單元格的邊框, 細實線:1,小粗實線:2,細虛線:3,中細虛線:4,大粗實線:5,雙線:6,細點虛線:7大粗虛線:8,細點劃線:9,粗點劃線:10,細雙點劃線:11,粗雙點劃線:12,斜點劃線:13''' border = xlwt.Borders() border.left = status border.right = status border.top = status border.bottom = status return border @staticmethod def heights(worksheet, line, size=4): '''設(shè)置單元格的高度''' worksheet.row(line).height_mismatch = True worksheet.row(line).height = size * 256 @staticmethod def widths(worksheet, line, size=11): '''設(shè)置單元格的寬度''' worksheet.col(line).width = size * 256 @staticmethod def alignments(wrap=1, **kwargs): '''設(shè)置單元格的對齊方式, :接收一個對齊參數(shù)的字典{'horz': 'CENTER', 'vert': 'CENTER'}horz(水平),vert(垂直) :horz中的direction常用的有:CENTER(居中),DISTRIBUTED(兩端),GENERAL,CENTER_ACROSS_SEL(分散),RIGHT(右邊),LEFT(左邊) :vert中的direction常用的有:CENTER(居中),DISTRIBUTED(兩端),BOTTOM(下方),TOP(上方)''' alignment = xlwt.Alignment() if 'horz' in kwargs.keys(): alignment.horz = eval(f'xlwt.Alignment.HORZ_{kwargs[’horz’].upper()}') if 'vert' in kwargs.keys(): alignment.vert = eval(f'xlwt.Alignment.VERT_{kwargs[’vert’].upper()}') alignment.wrap = wrap # 設(shè)置自動換行 return alignment @staticmethod def fonts(name=’宋體’, bold=False, underline=False, italic=False, colour=’black’, height=11): '''設(shè)置單元格中字體的樣式, 默認字體為宋體,不加粗,沒有下劃線,不是斜體,黑色字體''' font = xlwt.Font() # 字體 font.name = name # 加粗 font.bold = bold # 下劃線 font.underline = underline # 斜體 font.italic = italic # 顏色 font.colour_index = xlwt.Style.colour_map[colour] # 大小 font.height = 20 * height return font @staticmethod def patterns(colors=1): '''設(shè)置單元格的背景顏色,該數(shù)字表示的顏色在xlwt庫的其他方法中也適用,默認顏色為白色 0 = Black, 1 = White,2 = Red, 3 = Green, 4 = Blue,5 = Yellow, 6 = Magenta, 7 = Cyan, 16 = Maroon, 17 = Dark Green,18 = Dark Blue, 19 = Dark Yellow ,almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray,23 = Dark Gray, the list goes on...''' pattern = xlwt.Pattern() pattern.pattern = xlwt.Pattern.SOLID_PATTERN pattern.pattern_fore_colour = colors return patternclass XmindToXsl(XlwtSeting): def __init__(self, name): '''調(diào)用類時,讀取xmind文件,并生成excel表格''' try: self.xm = xmind_to_dict(name)[0][’topic’] except Exception as e: print(f'打開xmind文件失敗:{e}') self.workbook = xlwt.Workbook(encoding=’utf-8’) # 創(chuàng)建workbook對象 self.worksheet = self.workbook.add_sheet(self.xm['title'], cell_overwrite_ok=True) # 創(chuàng)建工作表 def save(self, name): '''保存表格''' self.workbook.save(name + '.xls') @staticmethod def xmind_num(value): '''獲取xmind標(biāo)題個數(shù)''' try: return len(value['topics']) except KeyError: return 0 @staticmethod def xmind_title(value): '''獲取xmind標(biāo)題內(nèi)容''' return value['title'] def write_excel(self, result=’’, performer=’’, editionname=’’): '''生成excel文件的方法''' row0 = ['testcaseid', ’需求名稱’, ’測試用例名稱’, ’執(zhí)行步驟’, ’預(yù)期結(jié)果’, ’實際結(jié)果’, ’執(zhí)行人員’, ’版本’] style2 = self.template_one(self.worksheet) for i in range(len(row0)): self.worksheet.write(0, i, row0[i], style2) style = self.template_two() x = 0 # 寫入數(shù)據(jù)的當(dāng)前行數(shù) z = 0 # 用例的編號 for i in range(self.xmind_num(self.xm)): test_module = self.xm['topics'][i] modnum = self.xmind_num(test_module) if modnum != 0: for j in range(modnum): test_suit = test_module['topics'][j] suit_num = self.xmind_num(test_suit) if suit_num != 0: for k in range(suit_num): test_case = test_suit['topics'][k] z += 1 c1 = self.xmind_num(test_case) # 執(zhí)行步驟有幾個 if c1 != 0: for n in range(c1): x += 1 test_step = test_case['topics'][n] test_except = test_step['topics'][0] self.heights(self.worksheet, x, size=2) step = f'{n + 1}.' + self.xmind_title(test_step) # 執(zhí)行步驟 exce = f'{n + 1}.' + self.xmind_title(test_except) # 預(yù)期結(jié)果 self.worksheet.write(x, 3, step, style) # 寫入執(zhí)行步驟 self.worksheet.write(x, 4, exce, style) # 寫入預(yù)期結(jié)果 self.worksheet.write(x, 5, result, style) # 寫入實際結(jié)果 self.worksheet.write(x, 6, performer, style) # 寫入執(zhí)行人 mod = self.xmind_title(test_module) # 測試需求名稱 case = self.xmind_title(test_case) # 測試用例名稱 self.worksheet.write_merge(x - c1 + 1, x, 0, 0, z, style) # 寫入testcaseid self.worksheet.write_merge(x - c1 + 1, x, 1, 1, mod, style) # 寫入測試需求名稱 self.worksheet.write_merge(x - c1 + 1, x, 2, 2, case, style) # 寫入測試用例名稱 self.worksheet.write_merge(x - c1 + 1, x, 7, 7, editionname, style) # 寫入版本名稱 else: print('測試用例沒有操作步驟及預(yù)期結(jié)果') else: print('沒有測試用例') else: print('沒有測試套件') self.save(self.xm['title']) # 保存if __name__ == '__main__': names = 'sulinkAPP.xmind' xx = XmindToXsl(names) xx.write_excel()
運行的結(jié)果如下:
五、創(chuàng)建一個簡單的GUI頁面
1.簡單使用tkinter
因為不需要太復(fù)雜的GUI頁面,所以我直接使用的是python自帶的tkinter庫,先簡單了解下tkinter庫怎么使用,參考文檔:https://blog.csdn.net/qq_46018418/article/details/105927203
import tkintertop = tkinter.Tk() # 生成主窗口label = tkinter.Label(top, text=’Hello, GUI’) # 生成標(biāo)簽label.pack() # 將標(biāo)簽添加到主窗口button1 = tkinter.Button(top, text='text') # 生成按鈕1button1.pack(side=tkinter.LEFT) # 將button1添加到top主窗口左邊button1 = tkinter.Button(top, text='text2') # 生成按鈕2button1.pack(side=tkinter.RIGHT) # 將button1添加到top主窗口左邊top.mainloop() # 進入消息循環(huán)(必需組件)
代碼運行結(jié)果如下:
2.使用tkinter創(chuàng)建一個簡單的GUI頁面
先初步使用tkinter創(chuàng)建一個簡單的GUI頁面,初步了解tkinter的使用細節(jié)
import tkinterdef getvalue(): '''獲取文本框中數(shù)據(jù)''' global path re = path.get() print(re)top = tkinter.Tk() # 生成主窗口top.title('test') # 設(shè)置窗口的標(biāo)題top.geometry('350x250') # 設(shè)置窗口的大小top.geometry(’+800+350’) # 設(shè)置窗口出現(xiàn)的位置top.resizable(0, 0) # 將窗口大小設(shè)置為不可變label = tkinter.Label(top, text=’目標(biāo)路徑’) # 生成一個標(biāo)簽label.grid(row=0, column=0) # 使用grid布局,標(biāo)簽顯示在第一行,第一列path = tkinter.StringVar() # 生成一個StringVar 對象,來保存下面輸入框中的內(nèi)容firstEntry = tkinter.Entry(top, textvariable=path) # 生成一個文本框,內(nèi)容保存在上面變量中firstEntry.grid(row=0, column=1) # 使用grid布局,文本框顯示在第一行,第二列# 生成一個按鈕,按鈕上顯示文字為“test”,設(shè)置點擊按鈕后,執(zhí)行command后面的方法# (注意:只寫方法名,保存方法的位置,不能加上()來調(diào)用)例:getvalue,不能寫成getvalue()clickButton = tkinter.Button(top, text='提交', command=getvalue)clickButton.grid(row=0, column=2) # 使用grid布局,按鈕顯示在第一行,第三列top.mainloop() # 進入消息循環(huán)(必需組件)
代碼運行結(jié)果如下:
3.豐富GUI頁面元素
進一步使用tkinter,把之前封裝的方法需要的參數(shù),看情況添加上GUI頁面中
import tkinterfrom tkinter.filedialog import askopenfilenamedef get_value(): '''獲取文本框中數(shù)據(jù)''' re = path.get() per = person.get() ver = version.get() print(f'地址:{re},測試人員:{per},測試版本:{ver}')def select_path(): '''選擇要轉(zhuǎn)換成excel的xmind地址''' path_ = askopenfilename() path.set(path_)top = tkinter.Tk() # 生成主窗口top.title('test') # 設(shè)置窗口的標(biāo)題top.geometry('350x250') # 設(shè)置窗口的大小top.geometry(’+800+350’) # 設(shè)置窗口出現(xiàn)的位置top.resizable(0, 0) # 將窗口大小設(shè)置為不可變# 文件的路徑first_label = tkinter.Label(top, text=’目標(biāo)路徑:’) # 生成一個標(biāo)簽first_label.grid(row=0, column=0) # 使用grid布局,標(biāo)簽顯示在第一行,第一列path = tkinter.StringVar() # 生成一個StringVar 對象,來保存下面輸入框中的內(nèi)容first_entry = tkinter.Entry(top, textvariable=path) # 生成一個文本框,內(nèi)容保存在上面變量中first_entry.grid(row=0, column=1) # 使用grid布局,文本框顯示在第一行,第二列# 生成一個按鈕,按鈕上顯示文字為“test”,設(shè)置點擊按鈕后,執(zhí)行command后面的方法# (注意:只寫方法名,保存方法的位置,不能加上()來調(diào)用)例:get_value,不能寫成get_value()way_button = tkinter.Button(top, text='路徑選擇', command=select_path)way_button.grid(row=0, column=2) # 使用grid布局,按鈕顯示在第一行,第三列# 測試人員second_label = tkinter.Label(top, text='執(zhí)行人員:')second_label.grid(row=1, column=0)person = tkinter.StringVar()second_entry = tkinter.Entry(top, textvariable=person)second_entry.grid(row=1, column=1)# 版本third_label = tkinter.Label(top, text='測試版本:')third_label.grid(row=2, column=0)version = tkinter.StringVar()third_entry = tkinter.Entry(top, textvariable=version)third_entry.grid(row=2, column=1)# 提交按鈕f_btn = tkinter.Frame(top, bg=’red’) # 設(shè)置一個frame框架,并設(shè)置背景顏色為紅色f_btn.place(x=0, y=205, width=350, height=45) # 設(shè)置框架的大小,及在top窗口顯示位置submit_button = tkinter.Button(f_btn, text='提交', command=get_value, width=49, height=2, bg='#00FFFF') # 設(shè)置按鈕的文字,調(diào)用方法,大小,顏色,顯示框架submit_button.grid(row=0, column=2) # 使用grid布局,按鈕顯示在第一行,第一列# 進入消息循環(huán)(必需組件)top.mainloop()
代碼運行結(jié)果如下:
4.封裝方法,關(guān)聯(lián)轉(zhuǎn)換方法
上面代碼已經(jīng)初步實現(xiàn)了所需的功能,下面進行封裝方法,關(guān)聯(lián)之前寫好的xmind轉(zhuǎn)換excel表格的方法
import tkinterimport refrom tkinter.filedialog import askopenfilenamefrom tkinter import messageboxfrom xmindToExcel.xmind_to_xls import XmindToXslclass MainUI(object): def __init__(self,, geometrysize='350x250', geometry='+800+350'): self.top = tkinter.Tk() # 生成主窗口 self.top.title(title) # 設(shè)置窗口的標(biāo)題 self.top.geometry(geometrysize) # 設(shè)置窗口的大小 self.top.geometry(geometry) # 設(shè)置窗口出現(xiàn)的位置 self.top.resizable(0, 0) # 將窗口大小設(shè)置為不可變 self.path = tkinter.StringVar() # 生成一個StringVar 對象,來保存下面輸入框中的內(nèi)容 self.person = tkinter.StringVar() self.version = tkinter.StringVar()# 調(diào)用自己寫的create_widgets()方法 self.create_widgets() def get_value(self): '''獲取文本框中數(shù)據(jù),并調(diào)用XmindToXsl類''' path = self.path.get() per = self.person.get() ver = self.version.get() print(f'地址:{path},測試人員:{per},測試版本:{ver}') regvalue = ’.*.xmind$’ xmind_reg = re.match(regvalue, path) if xmind_reg: # xmind轉(zhuǎn)換成xls xmind_to_xls = XmindToXsl(path) xmind_to_xls.write_excel(performer=per, editionname=ver) else: messagebox.showinfo(title=’提示’, message=’請選擇正確的xmind文件,謝謝!’) def select_path(self): '''選擇要轉(zhuǎn)換成excel的xmind地址''' path_ = askopenfilename() self.path.set(path_) def create_widgets(self): '''創(chuàng)建窗口中的各種元素''' # 文件的路徑 first_label = tkinter.Label(self.top, text=’目標(biāo)路徑:’) # 生成一個標(biāo)簽 first_label.grid(row=0, column=0) # 使用grid布局,標(biāo)簽顯示在第一行,第一列 first_entry = tkinter.Entry(self.top, textvariable=self.path) # 生成一個文本框,內(nèi)容保存在上面變量中 first_entry.grid(row=0, column=1) # 使用grid布局,文本框顯示在第一行,第二列 way_button = tkinter.Button(self.top, text='路徑選擇', command=self.select_path) way_button.grid(row=0, column=2) # 使用grid布局,按鈕顯示在第一行,第三列 # 測試人員 second_label = tkinter.Label(self.top, text='執(zhí)行人員:') second_label.grid(row=1, column=0) second_entry = tkinter.Entry(self.top, textvariable=self.person) second_entry.grid(row=1, column=1) # 版本 third_label = tkinter.Label(self.top, text='測試版本:') third_label.grid(row=2, column=0) third_entry = tkinter.Entry(self.top, textvariable=self.version) third_entry.grid(row=2, column=1) # 提交按鈕 f_btn = tkinter.Frame(self.top, bg=’red’) # 設(shè)置一個frame框架,并設(shè)置背景顏色為紅色 f_btn.place(x=0, y=205, width=350, height=45) # 設(shè)置框架的大小,及在top窗口顯示位置 submit_button = tkinter.Button(f_btn, text='提交', command=self.get_value, width=49, height=2, bg='#00FFFF') # 設(shè)置按鈕的文字,調(diào)用方法,大小,顏色,顯示框架 submit_button.grid(row=0, column=2) # 使用grid布局,按鈕顯示在第一行,第一列 # 進入消息循環(huán)(必需組件) self.top.mainloop()if __name__ == '__main__': mu = MainUI(title='sulinkAPP')
代碼運行結(jié)果如下:
六、打包
1.下載安裝pyinstaller
下載安裝pyinstaller 庫,建議使用pip在線下載安裝,因為有較多依賴庫,pip下載安裝時,會自動安裝依賴庫
pip install pyinstaller
2.使用pyinstaller打包文件
如編寫上面全部代碼的環(huán)境為虛擬環(huán)境,則打包時需要在主環(huán)境安裝編寫時導(dǎo)入的庫(如:xmindparser,xlwt),如果沒有使用虛擬環(huán)境,則不需重復(fù)安裝。安裝好pyinstaller后,到項目的目錄下,運行cmd,輸入命令。
pyinstaller -F mainUI.py -p xmind_to_xls.py
-F 后是main文件,-p 后是自己編寫的依賴py文件,多個文件使用;分隔。
因為是自己學(xué)習(xí),所以直接把mainUI文件當(dāng)做main文件。注:如果運行打包后的exe文件包,報“xlwt no find”之類的錯,請在主環(huán)境pip下載安裝對應(yīng)的庫
# 總結(jié) 以上就是這幾天學(xué)習(xí)的結(jié)果,感覺還是學(xué)習(xí)到了不少東西,希望能夠幫助到你們
到此這篇關(guān)于使用python把xmind轉(zhuǎn)換成excel測試用例的實現(xiàn)代碼的文章就介紹到這了,更多相關(guān)python excel測試用例內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. .NET SkiaSharp 生成二維碼驗證碼及指定區(qū)域截取方法實現(xiàn)2. CentOS郵件服務(wù)器搭建系列—— POP / IMAP 服務(wù)器的構(gòu)建( Dovecot )3. 存儲于xml中需要的HTML轉(zhuǎn)義代碼4. django創(chuàng)建css文件夾的具體方法5. phpstudy apache開啟ssi使用詳解6. VMware中如何安裝Ubuntu7. jsp網(wǎng)頁實現(xiàn)貪吃蛇小游戲8. asp批量添加修改刪除操作示例代碼9. javascript xml xsl取值及數(shù)據(jù)修改第1/2頁10. ASP中實現(xiàn)字符部位類似.NET里String對象的PadLeft和PadRight函數(shù)
