實驗:實現自動化測試框架
作者:強官濤   類型:Python開發    類別:實驗   日期:2019-08-07    閱讀:725 次   消耗積分:0 分


本次分享《利用Python開發圖像識別測試框架》實驗中的實現自動化測試框架,回顧本章節的前期分享,請點擊

圖像識別的基本思路

模板匹配的核心算法

模板匹配的代碼實現


當我們完成了相對比較復雜的匹配算法后,剩下的框架開發部分的內容則相對容易理解了。主要解決的就是利用Python模擬鼠標和鍵盤操作的問題。這里我們需要使用到PyWin32的庫,以便于直接使用Python操作Windows系統接口。同樣的,使用“pip install pywin32”安裝完成后,實現代碼及功能備注如下:


from PIL import Image, ImageGrab
import os
import time
import win32api
import win32con
from ctypes import *

class ImageMatch:
    # 定義鍵盤常用按鈕,用于文本框的輸入操作
    VK_CODE = {
        'backspace': 0x08,
        'tab': 0x09,
        'enter': 0x0D,
        'left_arrow': 0x25,
        'up_arrow': 0x26,
        'right_arrow': 0x27,
        'down_arrow': 0x28,
        '0': 0x30,
        '1': 0x31,
        '2': 0x32,
        '3': 0x33,
        '4': 0x34,
        '5': 0x35,
        '6': 0x36,
        '7': 0x37,
        '8': 0x38,
        '9': 0x39,
        'a': 0x41,
        'b': 0x42,
        'c': 0x43,
        'd': 0x44,
        'e': 0x45,
        'f': 0x46,
        'g': 0x47,
        'h': 0x48,
        'i': 0x49,
        'j': 0x4A,
        'k': 0x4B,
        'l': 0x4C,
        'm': 0x4D,
        'n': 0x4E,
        'o': 0x4F,
        'p': 0x50,
        'q': 0x51,
        'r': 0x52,
        's': 0x53,
        't': 0x54,
        'u': 0x55,
        'v': 0x56,
        'w': 0x57,
        'x': 0x58,
        'y': 0x59,
        'z': 0x5A
    }

    # 啟動一個應用程序
    def start_app(self, cmd):
        # start /b 命令的目的是讓程序在后臺運行,不阻塞當前程序的運行主線程
        os.system("start /b " + cmd)
        time.sleep(3)

    # 移動到對象所在位置并實現單擊操作
    def click(self, target):
        x, y = self.find_image(target)      # 查找模板圖片的中心點位置
        windll.user32.SetCursorPos(x, y)    #將光標移動到指定位置
        # 實現鼠標左鍵的點擊操作(按下,彈起兩步操作)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    # 雙擊操作
    def double_click(self, target):
        x, y = self.find_image(target)
        windll.user32.SetCursorPos(x, y)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

    # 在文本框中輸入內容
    def input(self, target, content):
        self.double_click(target)   # 先雙擊選擇文本框中已有內容(沒有也不影響)
        # 再點擊回退鍵將已有內容刪除
        win32api.keybd_event(self.VK_CODE['backspace'], 0, 0, 0)
        win32api.keybd_event(self.VK_CODE['backspace'], 0,

win32con.KEYEVENTF_KEYUP, 0)
        time.sleep(1)

        # 根據輸入的字符串內容遍歷每一個字符,將其輸入(從VK_CODE字典中獲?。?br/>        for c in content:
            win32api.keybd_event(self.VK_CODE[c], 0, 0, 0)
            win32api.keybd_event(self.VK_CODE[c], 0,

win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(0.1)
    # 下拉框的選擇,使用下箭頭按鍵次數來決定選擇哪一條
    def select(self, target, count):
        self.click(target)
        time.sleep(0.5)
        for i in range(count):
            win32api.keybd_event(self.VK_CODE['down_arrow'], 0, 0, 0)
            win32api.keybd_event(self.VK_CODE['down_arrow'], 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(0.5)
        win32api.keybd_event(self.VK_CODE['enter'], 0, 0, 0)
        win32api.keybd_event(self.VK_CODE['enter'], 0, win32con.KEYEVENTF_KEYUP, 0)


當然,上述操作只是封裝了幾個最常用的操作而已。由于本書篇幅有限,其它類型的操作本書將不再贅述,其原理和實現手段都是一樣的,沒有任何本質區別。最后我們來完成一個簡單的基于圖像識別的自動化測試腳本的開發。拿筆者開發的一個簡單的計算器來舉例,整個計算器的截圖如下:

20190807_164159_820.png


截取如下模板圖片(含文件名):

20190807_164211_183.png


基于類ImageMatch,完成如下自動化測試腳本:


from imagetest import ImageMatch
import time
im = ImageMatch.ImageMatch()
im.start_app("java -jar D:/Other/JavaSwingCalc.jar") 
im.input("numberx.png", '200')
im.input("numbery.png", '100')
im.select('calctype.png', 1)
time.sleep(1)
im.click('docalc.png')
if im.check_exist('result.png'):
    print("測試成功.")
else:
    print("測試失敗.")
time.sleep(1)
im.click('doclose.png')


到目前為止,我們已經可以使用完全自主開發的一套基于圖像識別的自動化測試框架來完成絕大多數的測試工作了。雖然,在實際的項目應用中,基于圖像識別來進行GUI界面的自動化測試并不是首選,但是很多情況下如果我們無法識別和操作一些特定的元素的時候,那么利用圖像識別技術將是一種很好的補充。而且整個代碼量非常少,我們可以嵌入在任何我們需要使用的地方,并不會對整個測試腳本有大的影響。但是能夠幫助我們解決的問題,卻是實實在在的。


下期推送:利用OpenCV完成模板匹配


為了答謝大家對蝸牛學院的支持,蝸牛學院將會定期對大家免費發放干貨,敬請關注蝸牛學院的官方微信。


20190320_095757_834.jpg



版權所有,轉載本站文章請注明出處:蝸牛學院在線課堂, http://www.2453566.live/note/353
上一篇: 資訊:聽說,昨天有位小蝸牛開了一場演唱會~
下一篇: 資訊:如何通過一份優秀簡歷,將面試機會提升50%
提示:登錄后添加有效評論可享受積分哦!
黑马股票推荐4月19日黑马股票推荐一览