1. 程式人生 > >C/S架構系統自動化測試入門

C/S架構系統自動化測試入門

set 成了 es2017 x86 span 接口自動化測試 下載安裝 分享 msgbox

所謂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架構系統自動化測試入門