欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用python把xmind轉(zhuǎn)換成excel測試用例的實(shí)現(xiàn)代碼

 更新時(shí)間:2020年10月12日 10:47:39   作者:突破天際的  
這篇文章主要介紹了使用python把xmind轉(zhuǎn)換成excel測試用例的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言

因?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í)使用的格式如下:

聯(lián)系項(xiàng)目

二、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)文章

最新評論