C/S架構系統自動化測試入門
所謂C/S架構即Client/Server(客戶端/服務器架構)。雖然近年來C/S架構產品越來越少,大有被B/S(Browser/Server 瀏覽器/服務器)架構超越的趨勢,但C/S還是有B/S不可替代的優勢(如系統速度快,用戶體驗好,處理能力強且可以實現復雜業務功能等)。
本文以網易雲音樂客戶端為例,介紹C/S結構系統自動化測試方法,操作系統為Windows10,使用工具為Python2.7+AutoIT v3。
1. AutoIT 介紹
1.1 AutoIt 簡介
AutoIt是用以編寫並生成具有BASIC語言風格的腳本程序的免費軟件,它被設計用來在WindowsGUI(用戶界面)中進行自動操作。通過它可以組合使用模擬鍵擊,鼠標移動和窗口/控件操作等來實現自動化任務。AutoIt非常小巧,可以在所有windows操作系統上運行,且不需要任何運行庫。官網:https://www.autoitscript.com
1.2 AutoIt 下載安裝
直接從官網下載最新版本(v3.3.14.2)後安裝即可,下載地址:https://www.autoitscript.com/site/autoit/downloads/
同時,我也上傳到了百度網盤,還有兩本中文幫助文檔,推薦大家下載。鏈接: https://pan.baidu.com/s/1bINz8i 密碼: hjq9
1.3 AutoIt 快速入門
對於沒有接觸過AutoIt的同學,建議詳細閱讀下我上傳的手冊《AutoIt3CHS.chm》,裏面有詳細的入門教程。這裏只做簡單的介紹:
1) 首先安裝完成之後,你會看到AutoIt v3安裝目錄如下:
其中AutoIt Help File是幫助手冊,AutoIt Window Info是窗口信息工具(x64或x86分別代表64位或32位版本),Compile Script to .exe是打包工具(打包au3腳本為exe文件),Run Script是運行腳本工具,SciTE Script Editor是腳本編輯器即IDE。
2) 我們運行SciTE Script Editor,輸入如下代碼(彈出消息框,輸出Hello World)
MsgBox(0,‘Hello World‘,‘AutoIt Demo by Lovesoo‘)
3) Ctrl+S保存當前文件
4) F5運行,結果如下
2. C/S架構客戶端自動化測試
下面我們以網易雲音樂客戶端為例,詳細介紹C/S架構客戶端如何實現自動化測試。
首先我們設想一個基本的測試流程如下:運行網易雲音樂-> 搜索歌曲並播放 -> 校驗播放歌曲是否正確
下面我們使用AutoIT及Python+AutoIt分別實現相應的自動化測試:
2.1 AutoIt版
2.1.1 運行網易雲音樂
運行網易雲音樂客戶端命令非常簡單,如下我們定義了網易雲音樂客戶端路徑,使用Run函數運行即可,並使用Sleep函數等待5秒至客戶端啟動完成:
;定義相關參數 $cloudmusic_path="C:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe" ;運行網易雲音樂 Run($cloudmusic_path) Sleep(5000)
下面,我們使用WinWaitActive函數需要網易雲音樂窗口彈出並成為激活狀態,這時我們首先需要使用AutoIt Window Info獲取窗口信息:
1) 運行網易雲音樂客戶端
2)運行AutoIt Window Info (x64)
3) 使用快捷鍵Ctrl+Alt+F激活窗口信息工具
4) 鼠標點擊網易雲標題欄,並使用快捷鍵Ctrl+Alt+F鎖定窗口信息工具,可以看到此時我們獲取的網易雲音樂客戶端的窗口信息包括Title,Class等
5) 這裏我們使用Class:OrpheusBrowserHost作為WinWaitActive參數 (因為Title不固定是“網易雲音樂”,當播放歌曲時為歌曲信息)
$cloudmusic_title="[CLASS:OrpheusBrowserHost]" ;等待網易雲音樂窗口激活 WinWaitActive($cloudmusic_title)
2.1.2 搜索歌曲並播放
下面我們在等待激活網易雲音樂客戶端窗口後,去搜索欄輸入歌曲名稱完成搜索及播放,同樣我們使用窗口信息工具嘗試獲取搜索欄控件信息,發現無法正常獲取搜索欄控件信息(鼠標雲音樂標題欄移動至搜索欄時,Control Info沒有任何變化)
這是由於窗口信息工具只支持標準的Microsoft控件,這樣我們就只能使用模擬鍵盤鼠標操作的方法了。我們發現,在打開網易雲音樂後,按TAB鍵5下會切換到搜索欄,此時輸入歌曲名,再按向下鍵3下會選中第一首搜索歌曲,按回車即可播放,實現代碼如下:
$song="紅玫瑰" ;按5下TAB切換至搜索框 Send("{TAB 5}") ;搜索歌曲 Send($song) Sleep(1000) ;按3下向下鍵選擇第一首歌曲 Send("{DOWN 3}") Sleep(1000) ;按回車鍵播放歌曲 Send("{ENTER}") Sleep(1000)
2.1.3 校驗播放歌曲是否正確
下面我們校驗播放的歌曲是否為我們搜索的歌曲,此時只需校驗網易雲音樂客戶端標題即可,代碼如下:
;校驗當前窗口標題是否含有搜索歌曲名 $title = WinGetTitle($cloudmusic_title) if StringInStr($title,$song) Then MsgBox(0, "測試通過", $song&" in "&$title,2) Else MsgBox(16, "測試失敗", $song&" not in "&$title) EndIf
2.1.4 關閉網易雲音樂窗口
最後我們使用WinClose函數即可關閉網易雲音樂窗口:
;關閉窗口
WinClose($cloudmusic_title)
2.1.5 完整AutoIt代碼
使用AutoIt進行網易雲音樂客戶端自動化測試,完整版示例demo如下:
;定義相關參數 $cloudmusic_path="C:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe" $cloudmusic_title="[CLASS:OrpheusBrowserHost]" $song="紅玫瑰" ;運行網易雲音樂 Run($cloudmusic_path) Sleep(5000) ;等待網易雲音樂窗口激活 WinWaitActive($cloudmusic_title) ;按5下TAB切換至搜索框 Send("{TAB 5}") ;搜索歌曲 Send($song) Sleep(1000) ;按3下向下鍵選擇第一首歌曲 Send("{DOWN 3}") Sleep(1000) ;按回車鍵播放歌曲 Send("{ENTER}") Sleep(1000) ;校驗當前窗口標題是否含有搜索歌曲名 $title = WinGetTitle($cloudmusic_title) if StringInStr($title,$song) Then MsgBox(0, "測試通過", $song&" in "&$title,2) Else MsgBox(16, "測試失敗", $song&" not in "&$title) EndIf ;關閉窗口 WinClose($cloudmusic_title)
2.2. Python+AutoIt
Python中同樣有AutoIt lib庫PyAutoIt,GitHub地址:https://github.com/jacexh/pyautoit,我們使用pip命令安裝即可
pip install -U pyautoit
官方示例demo(打開notepad記事本,輸入hello world,然後不保存退出notepad )如下:
import autoit autoit.run("notepad.exe") autoit.win_wait_active("[CLASS:Notepad]", 3) autoit.control_send("[CLASS:Notepad]", "Edit1", "hello world{!}") autoit.win_close("[CLASS:Notepad]") autoit.control_click("[Class:#32770]", "Button2")
同樣我們將上面的AutoIt腳本改為Python版本(註意:autoit函數全部改為小寫,以autoit.打頭,且多個單詞以_分割)如下:
# coding:utf-8 import autoit import time #定義相關參數 cloudmusic_path="C:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe" cloudmusic_title="[CLASS:OrpheusBrowserHost]" song=u"紅玫瑰" #運行網易雲音樂 autoit.run(cloudmusic_path) time.sleep(5) #等待網易雲音樂窗口激活 autoit.win_wait_active(cloudmusic_title) #按5下TAB切換至搜索框 autoit.send("{TAB 5}") #搜索歌曲 autoit.send(song) time.sleep(1) #按3下向下鍵選擇第一首歌曲 autoit.send("{DOWN 3}") time.sleep(1) #按回車鍵播放歌曲 autoit.send("{ENTER}") time.sleep(1) #校驗當前窗口標題是否含有搜索歌曲名 title = autoit.win_get_title(cloudmusic_title) assert song in title,song.encode(‘utf-8‘)+‘ not in ‘+title.encode(‘utf-8‘) #關閉窗口 autoit.win_close(cloudmusic_title)
2.3 Python + AutoIt +Nosetests
我們還可以把上述腳本改為使用Nosetests框架的腳本,如下:
# coding:utf-8 import autoit import time class test_cloudmusic(object): # 定義相關參數 cloudmusic_path = "C:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe" cloudmusic_title = "[CLASS:OrpheusBrowserHost]" song = u"紅玫瑰" def test_search(self): # 運行網易雲音樂 autoit.run(self.cloudmusic_path) time.sleep(5) # 等待網易雲音樂窗口激活 autoit.win_wait_active(self.cloudmusic_title) # 按5下TAB切換至搜索框 autoit.send("{TAB 5}") # 搜索歌曲 autoit.send(self.song) time.sleep(1) # 按3下向下鍵選擇第一首歌曲 autoit.send("{DOWN 3}") time.sleep(1) # 按回車鍵播放歌曲 autoit.send("{ENTER}") time.sleep(1) # 校驗當前窗口標題是否含有搜索歌曲名 title = autoit.win_get_title(self.cloudmusic_title) assert self.song in title, self.song.encode(‘utf-8‘) + ‘ not in ‘ + title.encode(‘utf-8‘) # 關閉窗口 autoit.win_close(self.cloudmusic_title)
使用nosetests -v test_xxx.py即可運行測試,結果如下:
至此我們使用Python + AutoIt,並結合Nosetests框架完成了一個C/S架構客戶端的自動化測試示例demo,此外還可以集成相關插件完成測試報告輸出及郵件發送等功能,可以參考上一篇《接口自動化測試,完整入門篇》,在此恕不贅述。
3. 參考資料
1) https://www.autoitscript.com
2) https://github.com/jacexh/pyautoit
3) http://www.cnblogs.com/lovesoo/p/7845731.html
C/S架構系統自動化測試入門