使用Python將xmind腦圖轉成excel用例(一)


       最近接到一個領導需求,將xmind腦圖直接轉成可以導入的excel用例,並且轉換成gui可執行的exe文件,方便他人使用。

       因為對Python比較熟悉,所以就想使用Python3來實現這個功能,先理一下思路,首先要將xmind轉換成Python可用的數據格式,正好找到了一個xmindparser庫可以做這個事情,然后就好辦了,用xlwt庫寫成xls文件,再用Python自帶的gui庫 tkinter來寫 gui界面,最后用pyinstaller來打包。

        計划分兩個py文件來寫,一個文件寫excel ,一個文件寫gui界面,因為需要導入的字段比較多,而且導入的格式有嚴格的要求,所以寫excel的邏輯還是有點復雜的,所以我們確定xmind的文件有相應的格式來寫,測試編號 測試需求 測試用例標題 測試用例執行步驟 測試用例預期結果 測試用例預置條件都要按照相應的格式來。格式如圖

   通過xmindparser解析出來的格式是這樣的,是Python的字典加列表的格式

 
        
從這里我們可以分析出來xmind的格式的兩個屬性是我們用的,title 和topics ,其中title是我們要的內容,topics是內容的個數,這里可以封裝兩個函數來用,代碼我貼出來,因為要求的xls格式不一樣
所以具體的邏輯還要具體的去寫,我是按照我們工具要求的excel格式來寫的,可以給大家參考一下,你們需要什么格式可以在write_excel函數里面調整邏輯.
下一篇再把tkinter設計的gui代碼以及如何用pyintaller打包成exe貼上來。注:以下代碼都是在Python3環境下的
 1 from xmindparser import xmind_to_dict
 2 import re
 3 import xlwt
 4 
 5 class xmind_to_xls():
 6     def xmind_num(self,value):
 7         """獲取xmind標題個數"""
 8         try:
 9             return len(value['topics'])
10         except KeyError:
11             return 0
12 
13     def xmind_title(self,value):
14         """獲取xmind標題內容"""
15         return value['title']
16 
17     def  xmind_cat(self,filename):
18         '''調試函數,打印內容用的'''
19         self.out = xmind_to_dict(filename)
20         self.story = self.out[0]['topic']['topics']
21         self.num=len(self.story)
22         print(self.out)
23         print(self.out[0]['topic']['title'])
24         return self.story,self.num
25 
26     def write_excel(self,xmind_file,servicename='',editionname='',performer=''):
27         '''生成excel文件函數'''
28         self.f=xlwt.Workbook()
29         self.sheet1 =self.f.add_sheet('sheet1',cell_overwrite_ok=True)
30         self.row0 = ["storyid", '需求名稱', '測試用例名稱', '執行步驟', '預期結果', '服務名稱', '版本', '執行人員']
31         #生成第一行
32         for i in range(0,len(self.row0)):
33             self.sheet1.write(0,i,self.row0[i])
34         self.out = xmind_to_dict(xmind_file)
35         self.xls_name=self.out[0]['topic']['title']
36         self.story = self.out[0]['topic']['topics']
37         self.storynum = len(self.story)
38         j=1 #用例計算器
39         z = 0  # 用例結果數計數器
40         for i in range(0, self.storynum):
41             self.storyname = self.story[i]['title']
42             print(self.storyname)
43             self.regex_str = ".*[\[【](.+?)[\]】].*"
44             self.storyid_reg = re.match(self.regex_str, self.storyname)
45             if self.storyid_reg:
46                 self.storyid=self.storyid_reg.group(1)#正則取出用例編號
47                 #print(self.storyid_reg.group(1)) 
48             self.testcase_num=self.xmind_num(self.story[i]['topics'][0])
49             for k in range(0,self.testcase_num):
50                 self.testcase=self.story[i]['topics'][0]['topics'][k]
51                 self.testcase_name =self.xmind_title(self.testcase)
52                 self.testcase_stepnum=self.xmind_num(self.testcase) #每個用例的步驟數量
53                 self.sheet1.write(k + i + z + j, 2, self.testcase_name)
54                 self.sheet1.write(k + i + z + j, 0, self.storyid)
55                 self.sheet1.write(k + i + z + j, 1, self.storyname)
56                 self.sheet1.write(k + i + z + j, 5, servicename)
57                 self.sheet1.write(k + i + z + j, 6, editionname)
58                 self.sheet1.write(k + i + z + j, 7, performer)
59                 for x  in range(0,self.testcase_stepnum):
60                     self.testcase_step=self.testcase['topics'][x]
61                     self.teststep_title=self.xmind_title(self.testcase_step) #用例步驟名稱
62                     self.teststep_num=self.xmind_num(self.testcase_step) #用例步驟個數
63                     if self.teststep_num != 0:
64                         for y in range(0,self.teststep_num):
65                             self.test_results=self.testcase_step['topics'][y]
66                             self.test_result=self.xmind_title(self.test_results)#用例結果
67                             self.sheet1.write(k + i + z + j+y+1, 3, self.teststep_title)
68                             self.sheet1.write(k + i + z + j + y+1, 4, self.test_result)
69                         z = z + y+1
70                     else:
71                         self.test_result=' '
72                         self.sheet1.write(k + i + z + j+1  , 3, self.teststep_title)
73                         self.sheet1.write(k + i + z + j+1 , 4, self.test_result)
74                         z = z + 1
75             j=j+k
76         self.f.save(self.xls_name+'.xls') #xls名稱取xmind主題名稱
77 
78 if __name__ == '__main__':
79      xmind_file = "C:\\Users\\Administrator\\Desktop\\版本測試.xmind"  # xmind文件
80      servicename='aa'
81      editionname='bb'
82      performer='cc'
83      #xmind_to_xls().write_excel(xmind_file,servicename,editionname,performer)
84      xmind_to_xls().xmind_cat(xmind_file)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM