1、前言
測試組合生成器-allpairspy中,作者介紹了allpairspy工具,用于進行測試參數的組合。
隨后發現,如果每次要對新的參數進行組合,都要打開腳本,編寫后再執行,之后還要手動將參數值拷貝到Excel表里,還是有些麻煩,在這里應該要如何進行優化,節約不必要的工作量?
本篇將此腳本進行優化,將集成到Python的GUI工具包(Tkinter),并且可以將結果數據導入到Excel和TXT文件里。
2、簡介
Tkinter(即tkinterface,簡稱“Tk”)本質上是對Tcl/Tk軟件包的Python接口封裝,它是Python官方推薦的GUI工具包,屬于Python自帶的標準庫模塊,當安裝好Python后,就可以直接使用它,而無須另行安裝。
作為一款PythonGUI工具,Tkinter擁有良好的跨平臺性,支持Windows、Linux、Mac平臺,它傳承了Python語法簡潔、代碼易讀的基本特點。
3、快速上手
使用TkinterGUI工具包,快速創建自定義界面。
代碼如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- # 公眾號:AllTests軟件測試 importtkinter astk window = tk.Tk() # 設置窗口title window.title('公眾號:AllTests軟件測試') # 設置窗口大小:寬x高 window.geometry('400x200') # 獲取電腦屏幕大小 print("電腦分辨率 %dx%d "% (window.winfo_screenwidth(), window.winfo_screenheight())) # 獲取窗口大小,必須先刷新一下屏幕 window.update() print("窗口分辨率 %dx%d "% (window.winfo_width(), window.winfo_height())) # 改變背景顏色 window.config(background="#B3B3B3") # 設置窗口處于頂層 window.attributes('-topmost', True) # 設置窗口透明度 window.attributes('-alpha', 1) # 設置窗口被允許最大調整范圍 window.maxsize(600, 600) # 設置窗口被允許最小調整范圍 window.minsize(50, 50) # 更改左上角窗口icon圖標 window.iconbitmap('C:/Users/wangmeng/Desktop/mytest/tupian.ico') # 添加文本內容,并對字體添加相應的格式 font(字體,字號,"字體類型") tk.Label(window, text="公眾號:AllTests軟件測試", bg="yellow", fg="red", font=('Times', 15, 'bold italic underline')).place(x=80, y=60) # 添加按鈕,以及按鈕的文本,并通過command參數設置關閉窗口的功能 tk.Button(window, text="關閉", command=window.quit).place(x=200, y=120) # 進入主循環,顯示主窗口 window.mainloop()運行腳本,彈出GUI界面。
控制臺輸出獲取到的分辨率。
4、測試組合生成器腳本優化
需求點:一個輸入框(將參數組合輸入進去)、一個輸出框(將參數組合分組后打印出來)、分隔符下拉選擇項(用于匹配輸入的參數分隔符)、操作按鈕(運行、導出Excel、導出TXT、刪除、關閉)
代碼如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- # 公眾號:AllTests軟件測試 fromtkinter importfiledialog fromtkinter importttk, scrolledtext fromtkinter importmessagebox fromtkinter import* fromallpairspy importAllPairs importdatetime importopenpyxl importos """ 測試參數組合生成器 """ # 獲取桌面路徑 defget_path(): returnos.path.join(os.path.expanduser('~'), "Desktop") # 退出操作 defbutton_quit(): window.quit() # 刪除操作 defbutton_delete(): scr1.delete('0.0', END) scr2.delete('0.0', END) # 運行操作 defbutton_run(): scr2.delete('0.0', END) globall_key globaloutput_content globalexport_content l_key = [] l_value = [] output_content = [] export_content = [] # 判斷輸入數據是否為空 ifscr1.get('1.0', 'end-1c') != "": print("輸入數據 "+ " "+ scr1.get('1.0', 'end-1c')) # 數據分割 scr_list = scr1.get('0.0', 'end-1c').split(" ") # 判斷是否有空值在列表中,如果有就直接通過remove刪除 while''inscr_list: scr_list.remove('') print('列表數據 '+ str(scr_list)) # 共有幾組數據 print(len(scr_list)) iflen(scr_list) != 1: fori inscr_list: try: l = i.split(srclanguage1.get()) # 因素 l_key.append(l[0].strip()) l2 = l[1].split(srclanguage2.get()) # 選擇值 l_value.append(l2) exceptException asex: error = str(ex) messagebox.showerror(title='操作錯誤', message='運行失敗,請檢查輸入數據!'+ " "+ error) break print("數據參數 "+ str(l_value)) print("PAIRWISE:") fori, pairs inenumerate(AllPairs(l_value)): # 輸出內容 output_content = "{:2d}: {}".format(i + 1, pairs) # print(output_content) scr2.insert(END, output_content) scr2.insert(END, " ") # 導出內容 print(pairs) export_content.append(pairs) print(export_content) else: messagebox.showwarning(title='操作提示', message='輸入數據至少為2組!') else: messagebox.showwarning(title='操作提示', message='請輸入正確的數據,再運行!') # 導出Excel defbutton_export_excel(): excel_columns = ['A1', 'B1', 'C1', 'D1', 'E1', 'F1', 'G1', 'H1', 'I1', 'J1', 'K1', 'L1', 'M1', 'N1', 'O1', 'P1', 'Q1', 'R1', 'S1', 'T1', 'U1', 'V1', 'W1', 'X1', 'Y1', 'Z1', 'AA1', 'AB1', 'AC1', 'AD1', 'AE1', 'AF1', 'AG1', 'AH1', 'AI1', 'AJ1', 'AK1', 'AL1', 'AM1', 'AN1', 'AO1', 'AP1', 'AQ1', 'AR1', 'AS1', 'AT1', 'AU1', 'AV1', 'AW1', 'AX1', 'AY1', 'AZ1'] # 判斷輸出數據是否為空 ifscr2.get('1.0', 'end-1c') != "": print("輸出數據 "+ " "+ scr2.get('1.0', 'end-1c')) try: wb = openpyxl.Workbook() sheet = wb.active fori, j inzip(l_key, excel_columns): sheet[j] = i foritem_tree inexport_content: value = item_tree # print(value) values = [str(strvalue) forstrvalue invalue] # print(values) sheet.append(values) # 將文件直接保存到桌面 # wb.save(f'{get_path()}/case' + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + '.xlsx') # wb.close() # messagebox.showinfo(title='導出成功', message='已將Excel文件導出到桌面!') # 對話框保存文件 filepath = filedialog.asksaveasfilename(initialfile='默認文件名.xlsx', filetypes=[("Excel文件", ".xlsx")]) iffilepath != "": # print("filepath " + filepath) wb.save(filepath) wb.close() messagebox.showinfo(title='導出成功', message='已導出Excel文件!') else: pass # print("filepath " + filepath) exceptException asex: error = str(ex) messagebox.showerror(title='導出失敗', message='導出失敗!'+ " "+ error) else: messagebox.showwarning(title='操作提示', message='請先運行后,再進行導出!') # 導出TXT defbutton_export_txt(): # 判斷輸出數據是否為空 ifscr2.get('1.0', 'end-1c') != "": print("輸出數據 "+ " "+ scr2.get('1.0', 'end-1c')) try: # 將文件直接保存到桌面 # filepath = f'{get_path()}/case' + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + '.txt' # info_txt = "到桌面" # 對話框保存文件 filepath = filedialog.asksaveasfilename(initialfile='默認文件名.txt', filetypes=[("txt文件", ".txt")]) info_txt = "" # 文件路徑是否為空 iffilepath != "": # print("filepath " + filepath) # 寫入文件 withopen(filepath, 'w') asfile_object: file_object.write(",".join(l_key)) foritem_tree inexport_content: print(",".join(item_tree)) file_object.write(' '+ ",".join(item_tree)) file_object.close() messagebox.showinfo(title='導出成功', message='已導出TXT文件'+ info_txt + '!') else: pass # print("filepath " + filepath) exceptException asex: error = str(ex) messagebox.showerror(title='導出失敗', message='導出失敗!'+ " "+ error) else: messagebox.showwarning(title='操作提示', message='請先運行后,再進行導出!') window = Tk() # 設置窗口title window.title("測試參數組合生成器") # 設置窗口大小:寬x高 window.geometry("850x600") srclanguage1 = StringVar() srclanguage1.set('=') # 標簽 Label(window, text="因素分隔", font=("隸書", 12, 'bold')).place(x=690, y=80) language1 = ('=', '#') # 復選框 ttk.Combobox(window, values=language1, width=3, textvariable=srclanguage1, state='readonly').place(x=770, y=80) srclanguage2 = StringVar() srclanguage2.set('/') # 標簽 Label(window, text="內分隔符", font=("隸書", 12, 'bold')).place(x=690, y=110) language2 = ('/', '+') # 復選框 ttk.Combobox(window, values=language2, width=3, textvariable=srclanguage2, state='readonly').place(x=770, y=110) # 標簽 Label(window, text="---輸入數據---", font=("隸書", 14, 'bold italic')).place(x=270, y=1) # 滾動文本框 scr1 = scrolledtext.ScrolledText(window, width=80, height=15, font=("隸書", 12)) scr1.place(x=15, y=25) # 標簽 Label(window, text="---輸出結果---", font=("隸書", 14, 'bold italic')).place(x=265, y=270) # 滾動文本框 scr2 = scrolledtext.ScrolledText(window, width=80, height=15, font=("隸書", 12)) scr2.place(x=15, y=300) # 按鈕 button1 = Button(window, text="運行", bg="green", font=("隸書", 15), command=button_run) button1.place(x=560, y=560, width=80, height=30) # 按鈕 button2 = Button(window, text="導出Excel", bg="yellow", font=("隸書", 15), command=button_export_excel) button2.place(x=370, y=560, width=100, height=30) # 按鈕 button3 = Button(window, text="導出TXT", bg="yellow", font=("隸書", 15), command=button_export_txt) button3.place(x=200, y=560, width=100, height=30) # 按鈕 button4 = Button(window, text="刪除", bg="red", font=("隸書", 15), command=button_delete) button4.place(x=40, y=560, width=80, height=30) # 按鈕 button5 = Button(window, text="關閉", font=("隸書", 15), command=button_quit) button5.place(x=710, y=560, width=80, height=30) # 標簽 Label(window, text="輸入數據示例", font=("隸書", 12, 'bold')).place(x=690, y=350) Label(window, text="因素=A/B/C", font=("隸書", 11)).place(x=690, y=380) Label(window, text="因素=1/2/3", font=("隸書", 11)).place(x=690, y=410) Label(window, text="因素=D/E/F", font=("隸書", 11)).place(x=690, y=440) Label(window, text="公眾號:AllTests軟件測試", font=("微軟雅黑", 10, 'bold'), fg='#EC3832').place(x=680, y=10) # 顯示窗口 window.mainloop()運行腳本,彈出GUI界面。
接下來開始簡單測試一下,先準備一下測試數據:
品牌=X品牌/Y品牌 系統=Windows10/macOS 時間=按天/按周/按月/按年
將測試數據輸入到輸入框中,之后點擊運行,輸出框顯示運行后的結果,總共生成了8條用例。
點擊刪除按鈕,會將輸入和輸出框內的數據都刪除掉。
點擊關閉按鈕,會關閉掉GUI界面。
代碼里可以設置將文件直接保存到桌面或者彈出對話框自定義保存,這里使用了對話框保存的方式。
點擊導出Excel,文件保存后,會提示導出成功。
打開Excel,顯示的結果數據。
代碼里可以設置將文件直接保存到桌面或者彈出對話框自定義保存,這里使用了對話框保存的方式。
導出TXT,文件保存后,會提示導出成功。
打開TXT,顯示的結果數據。
除了成功的提示信息外,也添加了一些提示與錯誤的信息。
當沒有輸入數據,直接點擊運行按鈕時,會提示:
當沒有運行,而直接點擊導出Excel或導出TXT時,會提示:
當輸入的參數數據只有一組時,會提示:
當輸入的數據格式不對,點擊運行時,會提示:
如上,大概的功能點已經測試完成,可以滿足所要的需求,但是還有一點需要改進,那就是每次打開都要執行腳本,需要改為直接雙擊可運行的文件。
步驟如下:
1、安裝pyinstaller
2、將腳本與圖片放到同一個文件夾目錄
3、執行轉換腳本
pyinstaller -F -i tupian.ico combination_generator.py -w
4、執行完成后,dist目錄里是.exe可執行文件
審核編輯:劉清
-
生成器
+關注
關注
7文章
317瀏覽量
21053 -
GUI
+關注
關注
3文章
662瀏覽量
39761 -
python
+關注
關注
56文章
4800瀏覽量
84820
原文標題:將Python腳本集成到GUI工具包-Tkinter
文章出處:【微信號:ExASIC,微信公眾號:ExASIC】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論