使用python把xmind轉(zhuǎn)換成excel測試用例的實(shí)現(xiàn)代碼
前言
因?yàn)閷懞昧藴y試xmind腦圖后,然后再編寫測試用例,實(shí)在是太麻煩了,所以我寫了一點(diǎn)測試用例后,就網(wǎng)上百度了下,怎么直接把xmind腦圖轉(zhuǎn)換成excel測試用例,純個(gè)人學(xué)習(xí)筆記
本文參考:
http://www.dbjr.com.cn/article/197246.htm
http://www.dbjr.com.cn/article/197249.htm
提示:以下是本篇文章正文內(nèi)容,下面可供參考
一、確定好自己的xmind的用例格式
因?yàn)閤mind的格式關(guān)系到編寫代碼的邏輯關(guān)系,所以需要先確定好自己的xmind的格式,本人學(xué)習(xí)時(shí)使用的格式如下:
二、xmindparser庫的使用
1.下載庫
默認(rèn)下載最新庫,在配好環(huán)境python環(huán)境變量的前提下,cmd中輸入如下命令:
pip install xmindparser
或直接在pycharm中,點(diǎn)擊左上角“File” > Settings(或者直接Ctrl+Alt+s) > Project:你的項(xiàng)目名稱 > Python Interpreter > + > 搜索xmindparser > Install Package
2.xmindparser的使用
代碼如下(示例):
from xmindparser import xmind_to_dict import json xm = xmind_to_dict("sulinkAPP.xmind")[0]['topic'] # indent為顯示json格式,ensure_ascii未顯示為中文,不顯示ASCII碼 print(json.dumps(xm, indent=2, ensure_ascii=False))
運(yùn)行結(jié)果顯示為:
{ "title": "sulinkAPP", "topics": [{ "title": "登錄", "topics": [{ "title": "正向用例", "topics": [{ "title": "正確的手機(jī)號碼一鍵登錄", "topics": [{ "title": "進(jìn)入‘登錄/注冊'頁面", "topics": [{ "title": "成功進(jìn)入‘登錄/注冊'頁面" }] }, { "title": "選中‘我已閱讀并同意用戶協(xié)議',點(diǎn)擊‘本機(jī)號碼一鍵登錄'", "topics": [{ "title": "進(jìn)入‘手機(jī)快捷登錄頁面'" }] }, { "title": "點(diǎn)擊‘一鍵登錄'", "topics": [{ "title": "登錄成功,跳轉(zhuǎn)至‘我的'頁面" }] }] }, { "title": "正確的手機(jī)號碼及驗(yàn)證碼登錄", "topics": [{ "title": "進(jìn)入‘登錄/注冊'頁面", "topics": [{ "title": "成功進(jìn)入‘登錄/注冊'頁面" }] }, { "title": "點(diǎn)擊‘其他登錄方式'", "topics": [{ "title": "成功進(jìn)入‘手機(jī)登錄'頁面" }] }, { "title": "選擇正確的區(qū)號,輸入正確的手機(jī)號碼,點(diǎn)擊‘獲取驗(yàn)證碼'", "topics": [{ "title": "提示‘驗(yàn)證碼已發(fā)送',并正確收到驗(yàn)證碼" }] }, { "title": "正確輸入收到的驗(yàn)證碼,選中‘我已閱讀并同意用戶協(xié)議',點(diǎn)擊登錄", "topics": [{ "title": "登錄成功,跳轉(zhuǎn)至‘我的'頁面" }] }] }] }] }] }
三、xlwt庫的使用
1.下載xlwt庫
默認(rèn)下載最新庫,在配好環(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)建工作表sheet worksheet.write(0, 0, 'hello') # 往表中寫內(nèi)容,第一各參數(shù) 行,第二個(gè)參數(shù)列,第三個(gè)參數(shù)內(nèi)容 workbook.save('students.xls') # 保存表為students.xls
詳細(xì)的使用,可以參照此文章:http://www.dbjr.com.cn/article/154535.htm
四、讀取xmind數(shù)據(jù)并寫入excel表格中
1.簡單的創(chuàng)建一個(gè)用例excel表格,并寫入第一行數(shù)據(jù)
代碼如下
import xlwt # 導(dǎo)入模塊 from xmindparser import xmind_to_dict xm = 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ǔ)上添加點(diǎn),把xmind數(shù)據(jù)寫入excel表格中
import xlwt # 導(dǎo)入模塊 from xmindparser import xmind_to_dict xm = 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í)行步驟有幾個(gè) 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_dict def styles(): """設(shè)置單元格的樣式的基礎(chǔ)方法""" style = xlwt.XFStyle() return style def borders(status=1): """設(shè)置單元格的邊框 細(xì)實(shí)線:1,小粗實(shí)線:2,細(xì)虛線:3,中細(xì)虛線:4,大粗實(shí)線:5,雙線:6,細(xì)點(diǎn)虛線:7大粗虛線:8,細(xì)點(diǎn)劃線:9,粗點(diǎn)劃線:10,細(xì)雙點(diǎn)劃線:11,粗雙點(diǎn)劃線:12,斜點(diǎn)劃線:13""" border = xlwt.Borders() border.left = status border.right = status border.top = status border.bottom = status return border def heights(worksheet, line, size=4): """設(shè)置單元格的高度""" worksheet.row(line).height_mismatch = True worksheet.row(line).height = size*256 def widths(worksheet, line, size=11): """設(shè)置單元格的寬度""" worksheet.col(line).width = size*256 def 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è)置自動(dòng)換行 return alignment def fonts(name='宋體', bold=False, underline=False, italic=False, colour='black', height=11): """設(shè)置單元格中字體的樣式 默認(rèn)字體為宋體,不加粗,沒有下劃線,不是斜體,黑色字體""" 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 def patterns(colors=1): """設(shè)置單元格的背景顏色,該數(shù)字表示的顏色在xlwt庫的其他方法中也適用,默認(rèn)顏色為白色 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 pattern def 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í)行步驟有幾個(gè) 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()
運(yùn)行結(jié)果如下:
4.封裝方法
上面的代碼基本已經(jīng)完成了,但是為了更好看,代碼可讀性更高,所以封裝下方法
# -*- coding:utf-8 -*- from xmindparser import xmind_to_dict import xlwt class 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è)置單元格的邊框, 細(xì)實(shí)線:1,小粗實(shí)線:2,細(xì)虛線:3,中細(xì)虛線:4,大粗實(shí)線:5,雙線:6,細(xì)點(diǎn)虛線:7大粗虛線:8,細(xì)點(diǎn)劃線:9,粗點(diǎn)劃線:10,細(xì)雙點(diǎn)劃線:11,粗雙點(diǎn)劃線:12,斜點(diǎn)劃線: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è)置單元格的對齊方式, :接收一個(gè)對齊參數(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è)置自動(dòng)換行 return alignment @staticmethod def fonts(name='宋體', bold=False, underline=False, italic=False, colour='black', height=11): """設(shè)置單元格中字體的樣式, 默認(rèn)字體為宋體,不加粗,沒有下劃線,不是斜體,黑色字體""" 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庫的其他方法中也適用,默認(rèn)顏色為白色 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 pattern class XmindToXsl(XlwtSeting): def __init__(self, name): """調(diào)用類時(shí),讀取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)題個(gè)數(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é)果', '實(shí)際結(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í)行步驟有幾個(gè) 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) # 寫入實(shí)際結(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()
運(yùn)行的結(jié)果如下:
五、創(chuàng)建一個(gè)簡單的GUI頁面
1.簡單使用tkinter
因?yàn)椴恍枰珡?fù)雜的GUI頁面,所以我直接使用的是python自帶的tkinter庫,先簡單了解下tkinter庫怎么使用,參考文檔:https://blog.csdn.net/qq_46018418/article/details/105927203
import tkinter top = tkinter.Tk() # 生成主窗口 label = tkinter.Label(top, text='Hello, GUI') # 生成標(biāo)簽 label.pack() # 將標(biāo)簽添加到主窗口 button1 = tkinter.Button(top, text="text") # 生成按鈕1 button1.pack(side=tkinter.LEFT) # 將button1添加到top主窗口左邊 button1 = tkinter.Button(top, text="text2") # 生成按鈕2 button1.pack(side=tkinter.RIGHT) # 將button1添加到top主窗口左邊 top.mainloop() # 進(jìn)入消息循環(huán)(必需組件)
代碼運(yùn)行結(jié)果如下:
2.使用tkinter創(chuàng)建一個(gè)簡單的GUI頁面
先初步使用tkinter創(chuàng)建一個(gè)簡單的GUI頁面,初步了解tkinter的使用細(xì)節(jié)
import tkinter def 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)路徑') # 生成一個(gè)標(biāo)簽 label.grid(row=0, column=0) # 使用grid布局,標(biāo)簽顯示在第一行,第一列 path = tkinter.StringVar() # 生成一個(gè)StringVar 對象,來保存下面輸入框中的內(nèi)容 firstEntry = tkinter.Entry(top, textvariable=path) # 生成一個(gè)文本框,內(nèi)容保存在上面變量中 firstEntry.grid(row=0, column=1) # 使用grid布局,文本框顯示在第一行,第二列 # 生成一個(gè)按鈕,按鈕上顯示文字為“test”,設(shè)置點(diǎn)擊按鈕后,執(zhí)行command后面的方法 # (注意:只寫方法名,保存方法的位置,不能加上()來調(diào)用)例:getvalue,不能寫成getvalue() clickButton = tkinter.Button(top, text="提交", command=getvalue) clickButton.grid(row=0, column=2) # 使用grid布局,按鈕顯示在第一行,第三列 top.mainloop() # 進(jìn)入消息循環(huán)(必需組件)
代碼運(yùn)行結(jié)果如下:
3.豐富GUI頁面元素
進(jìn)一步使用tkinter,把之前封裝的方法需要的參數(shù),看情況添加上GUI頁面中
import tkinter from tkinter.filedialog import askopenfilename def 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)路徑:') # 生成一個(gè)標(biāo)簽 first_label.grid(row=0, column=0) # 使用grid布局,標(biāo)簽顯示在第一行,第一列 path = tkinter.StringVar() # 生成一個(gè)StringVar 對象,來保存下面輸入框中的內(nèi)容 first_entry = tkinter.Entry(top, textvariable=path) # 生成一個(gè)文本框,內(nèi)容保存在上面變量中 first_entry.grid(row=0, column=1) # 使用grid布局,文本框顯示在第一行,第二列 # 生成一個(gè)按鈕,按鈕上顯示文字為“test”,設(shè)置點(diǎn)擊按鈕后,執(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è)置一個(gè)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布局,按鈕顯示在第一行,第一列 # 進(jìn)入消息循環(huán)(必需組件) top.mainloop()
代碼運(yùn)行結(jié)果如下:
4.封裝方法,關(guān)聯(lián)轉(zhuǎn)換方法
上面代碼已經(jīng)初步實(shí)現(xiàn)了所需的功能,下面進(jìn)行封裝方法,關(guān)聯(lián)之前寫好的xmind轉(zhuǎn)換excel表格的方法
import tkinter import re from tkinter.filedialog import askopenfilename from tkinter import messagebox from xmindToExcel.xmind_to_xls import XmindToXsl class MainUI(object): def __init__(self, title="sulink", 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() # 生成一個(gè)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)路徑:') # 生成一個(gè)標(biāo)簽 first_label.grid(row=0, column=0) # 使用grid布局,標(biāo)簽顯示在第一行,第一列 first_entry = tkinter.Entry(self.top, textvariable=self.path) # 生成一個(gè)文本框,內(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è)置一個(gè)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布局,按鈕顯示在第一行,第一列 # 進(jìn)入消息循環(huán)(必需組件) self.top.mainloop() if __name__ == "__main__": mu = MainUI(title="sulinkAPP")
代碼運(yùn)行結(jié)果如下:
六、打包
1.下載安裝pyinstaller
下載安裝pyinstaller 庫,建議使用pip在線下載安裝,因?yàn)橛休^多依賴庫,pip下載安裝時(shí),會自動(dòng)安裝依賴庫
pip install pyinstaller
2.使用pyinstaller打包文件
如編寫上面全部代碼的環(huán)境為虛擬環(huán)境,則打包時(shí)需要在主環(huán)境安裝編寫時(shí)導(dǎo)入的庫(如:xmindparser,xlwt),如果沒有使用虛擬環(huán)境,則不需重復(fù)安裝。
安裝好pyinstaller后,到項(xiàng)目的目錄下,運(yùn)行cmd,輸入命令。
pyinstaller -F mainUI.py -p xmind_to_xls.py
-F 后是main文件,-p 后是自己編寫的依賴py文件,多個(gè)文件使用;分隔。
因?yàn)槭亲约簩W(xué)習(xí),所以直接把mainUI文件當(dāng)做main文件。
注:如果運(yùn)行打包后的exe文件包,報(bào)“xlwt no find”之類的錯(cuò),請?jiān)谥鳝h(huán)境pip下載安裝對應(yīng)的庫
# 總結(jié) 以上就是這幾天學(xué)習(xí)的結(jié)果,感覺還是學(xué)習(xí)到了不少東西,希望能夠幫助到你們
到此這篇關(guān)于使用python把xmind轉(zhuǎn)換成excel測試用例的實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)python excel測試用例內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python-pandas返回重復(fù)數(shù)據(jù)的index問題
這篇文章主要介紹了Python-pandas返回重復(fù)數(shù)據(jù)的index問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02python利用不到一百行代碼實(shí)現(xiàn)一個(gè)小siri
這篇文章主要介紹了關(guān)于python利用不到一百行代碼實(shí)現(xiàn)了一個(gè)小siri的相關(guān)資料,文中介紹的很詳細(xì),對大家具有一定的參考借鑒價(jià)值,需要的朋友們下面來一起看看吧。2017-03-03Python游戲開發(fā)之魔塔小游戲的實(shí)現(xiàn)
魔塔小游戲作為一款角色扮演RPG小游戲,一直深受大家的喜愛。本文將利用Python的cpgames模塊制作這一經(jīng)典小游戲,感興趣的可以跟隨小編一起動(dòng)手試一試2022-02-02python演示解答正則為什么是最強(qiáng)文本處理工具
正則表達(dá)式又稱規(guī)則表達(dá)式,通常被用來檢索、替換那些符合某個(gè)模式(規(guī)則)的文本,它是最強(qiáng)的文本處理工具,至于原因本文將給你答案2021-09-09Python操作SQLite數(shù)據(jù)庫的方法詳解【導(dǎo)入,創(chuàng)建,游標(biāo),增刪改查等】
這篇文章主要介紹了Python操作SQLite數(shù)據(jù)庫的方法,簡單說明了sqlite數(shù)據(jù)庫的相關(guān)概念,并結(jié)合實(shí)例形式較為詳細(xì)的分析了Python針對sqlite數(shù)據(jù)庫的導(dǎo)入,創(chuàng)建,游標(biāo),增刪改查等操作技巧,需要的朋友可以參考下2017-07-07使用Python操作Elasticsearch數(shù)據(jù)索引的教程
這篇文章主要介紹了使用Python操作Elasticsearch數(shù)據(jù)索引的教程,Elasticsearch處理數(shù)據(jù)索引非常高效,要的朋友可以參考下2015-04-04Python+matplotlib+numpy實(shí)現(xiàn)在不同平面的二維條形圖
這篇文章主要介紹了Python+matplotlib+numpy實(shí)現(xiàn)在不同平面的二維條形圖,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python深度學(xué)習(xí)理解pytorch神經(jīng)網(wǎng)絡(luò)批量歸一化
這篇文章主要是Python深度學(xué)習(xí)篇,通過示例的詳解讓大家更好的理解pytorch神經(jīng)網(wǎng)絡(luò)批量歸一化,有需要的的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10