《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 測試測量 > 設(shè)計應(yīng)用 > Pywinauto在Windows Twain Driver自動化測試中的應(yīng)用研究
Pywinauto在Windows Twain Driver自動化測試中的應(yīng)用研究
來源:微型機與應(yīng)用2012年第3期
翁省輝1,喻武龍2
(1.北京理工大學(xué) 珠海學(xué)院 計算機學(xué)院,廣東 珠海 519088;2.北京理工大學(xué) 珠海學(xué)院 信息
摘要: 以Python為基礎(chǔ),結(jié)合對Twain Driver測試工具的具體需求,將Pywinauto引入到Twain Driver的自動化測試中。介紹了Pywinauto的基本概念,通過測試用例說明Pywinauto在自動化測試中的具體實現(xiàn)。應(yīng)用結(jié)果表明,該方法大大提高了測試的自動化程度,極大地減少了Twain Driver測試的工作量,同時也確保了測試質(zhì)量。
Abstract:
Key words :

摘  要:Python為基礎(chǔ),結(jié)合對Twain Driver測試工具的具體需求,將Pywinauto引入到Twain Driver的自動化測試中。介紹了Pywinauto的基本概念,通過測試用例說明Pywinauto在自動化測試中的具體實現(xiàn)。應(yīng)用結(jié)果表明,該方法大大提高了測試的自動化程度,極大地減少了Twain Driver測試的工作量,同時也確保了測試質(zhì)量。
關(guān)鍵詞: Python;Pywinauto;Twain Driver;自動化測試

 Windows下掃描儀驅(qū)動程序主要使用Twain協(xié)議[1]。由于Twain協(xié)議的復(fù)雜性,Twain Driver一般會以圖形界面方式提供眾多掃描選項以供用戶使用。掃描選項數(shù)量眾多以及選項之間的依賴性,決定了Twain Driver的測試是一項非常艱巨的任務(wù)。Twain Driver的測試主要包括基本功能測試以及回歸測試。一般一個Twain Driver包含近百個基本功能測試用例以及隨著缺陷數(shù)量增長而不斷增加的回歸測試用例。特別是臨近產(chǎn)品正式發(fā)布日期時,每修正一個缺陷,都會帶來極大的工作量:一方面,要做基本功能測試檢查是否有新的缺陷;另一方面,要做回歸測試檢查之前已修正好的缺陷是否受到影響。由于此時產(chǎn)品已處于開發(fā)周期的后期階段,缺陷的基數(shù)通常會比較大,回歸測試的測試用例將變得非常龐大。更重要的是,如果有多個缺陷需要修正,那么以上兩個方面的測試還將重復(fù)執(zhí)行多次,測試工作將成倍增長。
 針對以上問題,本文以Python為基礎(chǔ),結(jié)合對Twain Driver測試工具的具體需求,提出了一個基于Pywinauto實現(xiàn)自動化測試的解決方案[2]。Pywinauto通過模擬測試人員在用戶界面上的鼠標(biāo)、鍵盤操作,來減少測試人員的手工操作。應(yīng)用結(jié)果表明,該方案能夠極大地提高測試效率,在減少了測試時間的同時,也確保了產(chǎn)品質(zhì)量。
1 Pywinauto的基本概念
    Pywinauto是基于Python開發(fā)的,用于自動化測試的腳本模塊的第三方擴展包,它通過向Windows對話框和控件發(fā)送鼠標(biāo)、鍵盤動作來實現(xiàn)Windows圖形界面的自動化測試[3]。
1.1 標(biāo)識應(yīng)用程序?qū)嵗?/strong>
 Pywinauto在使用前首先需要將應(yīng)用程序?qū)嵗B接到一個進程,有兩種標(biāo)識方法分別對應(yīng)兩種情況:
 (1)應(yīng)用程序未啟動即應(yīng)用程序?qū)嵗淮嬖冢捍藭r可以調(diào)用start_(self,cmd_line,timeout=app_start_timeout)來啟動應(yīng)用程序。示例如下:
gAppName=ur"C:\\Program Files\\TWAIN Working Group\\ TWAIN Toolkit\\Twack_32.exe"
app=application.Application().start_(gAppName)
 (2)應(yīng)用程序已啟動:此時只需調(diào)用connect_(self, **kwargs)連接到已運行的應(yīng)用程序。示例如下:
AppName=ur"TWAIN_32 Twakcer"
app=application.Application().connect_(title_re= AppName)
1.2 標(biāo)識應(yīng)用程序窗口
 在取得應(yīng)用程序?qū)嵗螅涂墒褂迷搶嵗龢?biāo)識應(yīng)用程序窗口,主要有3種標(biāo)識方式:
 (1)使用窗口標(biāo)題。示例如下:
gWizardName="Select"
MainDlg=app[gWizardName]
或者將窗口標(biāo)題直接當(dāng)成一個變量形式使用,但這樣標(biāo)識,非英文語系時窗口會出現(xiàn)問題,所以這種方法并不推薦。示例如下:
MainDlg=app.Select
 (2)窗口標(biāo)題結(jié)合正則表達式,特別是當(dāng)窗口標(biāo)題不確定或經(jīng)常變化時尤為有用。示例如下:
dlg=app.window_(title_re=".*doc",class_name="#33888")
 (3)直接取最上層窗口。此時需要確保被標(biāo)識的應(yīng)用程序窗口為頂層窗口。示例如下:
MainDlg=app.top_window_()
1.3 標(biāo)識應(yīng)用程序窗口控件
 Pywinauto的測試原理主要模擬控件上的手工操作,所以Pywinauto自動化測試中重要的一環(huán)就是標(biāo)識應(yīng)用程序窗口上的控件。假設(shè)應(yīng)用程序窗口有一內(nèi)容為OK的Button控件,主要有兩種方式標(biāo)識這個控件:
 (1)使用窗口控件標(biāo)題。示例如下:
app["dlg"]["OK"]
或者將控件標(biāo)題直接當(dāng)成一個變量形式使用。與標(biāo)識窗口類似,這種方法也不推薦。示例如下:
app.dlg.OK
 (2)使用Friendly class,特別是當(dāng)控件標(biāo)題內(nèi)容為空時尤為有用。示例如下:
Dialog.Button1
 需要說明的是:Button、Button0及Button1都是代表第一個Button,Button2代表第二個Button。標(biāo)準(zhǔn)控件通過Friendly class很容易標(biāo)識出來,但是非標(biāo)準(zhǔn)控件其Friendly class并不明顯,這時可通過Visual Studio自帶的Spy++來查看,如圖1所示。

1.4 如何操控鼠標(biāo)與鍵盤
 在取得Windows對話框和控件后,就可以向?qū)υ捒蚧蛘呖丶l(fā)送鼠標(biāo)、鍵盤操作來實現(xiàn)自動化測試。
鼠標(biāo)的操作:(1)點擊操作:模擬鼠標(biāo)的點擊操作可以結(jié)合具體的控件,Pywinauto對于不同的控件提供了不同的函數(shù)。例如,模擬Next Button的點擊事件可以表示為Dialog.["Next"].Click();模擬ComboBox 控件的選擇操作可以使用如下方式:Dialog.ComboBox1.Select(1)。(2)拖動操作:主要使用PressMouse()、MoveMouse()和ReleaseMouse()實現(xiàn)鼠標(biāo)的按下、移動以及釋放操作。示例如下:
def AdjustSize (WizardDlg,ShiftX,ShiftY):
        Offset=10
        OrgRect=WizardDlg.WiaControl1.Rectangle()
    WizardDlg.WiaControl1.PressMouse(coords=(Offset,Offset))
        WizardDlg.WiaControl1.MoveMouse(coords=(Offset+ShiftX,Offset+ShiftY))
        WizardDlg.WiaControl1.ReleaseMouse()
按鍵的操作:Pywinauto使用SendKeys來進行按鍵處理[4]。一些程序并不會將菜單項指定給主UI(如Word),這樣就不能直接使用菜單方法,而是使用快捷鍵的方式,這就需要使用SendKeys發(fā)送快捷鍵。如要表示按下Alt+F組合鍵,可以寫成MainWin.TypeKeys("%F")。需要說明的是:TypeKey還可表示按照一定時間間隔接受多個組合按鍵。例如,在Word2003打開從掃描儀導(dǎo)入圖片的窗口,需要先按Alt+I,然后按Alt+P,最后按Alt+S。用SendKeys可以表示為:
MainWin.TypeKeys("%IPS",pause=0.5)
1.5 中文支持
 Pywinauto在對中文應(yīng)用的菜單進行操作時,通常會由于編碼問題而使中文應(yīng)用的對話框和控件無法進行標(biāo)識。可以使用以下兩種方法解決:
 (1)使用"u"或者"ur"將字符串轉(zhuǎn)換成UTF格式的字符串。例如:
gDialogName=u"選擇來源"
gButtonName=u"選定"
app[gDialogName][gButtonName]
 (2)使用decode函數(shù)強行轉(zhuǎn)換字符串編碼。例如:
CP="cp936"
gDialogName="選擇來源".decode(CP)
gButtonName="選定".decode(CP)
app[gDialogName][gButtonName]
2 Twain Driver自動化測試實現(xiàn)
 由于Twain協(xié)議使用的廣泛性,目前已經(jīng)有很多應(yīng)用程序支持該協(xié)議。Windows下常見的應(yīng)用程序主要有Twack_32、Microsoft Word、PageManager 以及Adobe Photoshop等,這些應(yīng)用程序均可作為Twain Driver的測試工具。其中Twack_32是TWAIN官方所提供的一個工具,其兼容性最好,而且它不僅提供了TWAIN應(yīng)用的例程,還可以在計算機系統(tǒng)上安裝一個虛擬的圖像輸入設(shè)備(TWAIN_32SampleSource),所以測試人員通常使用Twack_32對Twain Driver進行測試。本文也以Twack_32為例實現(xiàn)Twain Driver的自動化測試。
2.1 Twack_32啟動的實現(xiàn)
 下載并安裝完后,打開Twack_32界面,然后依次選擇File->Select Source,彈出一個對話框,如圖2所示。

 

 

 實現(xiàn)時,首先通過調(diào)用start函數(shù)啟動應(yīng)用程序獲取應(yīng)用程序?qū)嵗缓罄迷搼?yīng)用程序?qū)嵗徒缑娴臉?biāo)題(TWAIN_32 Twacker)取得應(yīng)用程序窗口實例,最后根據(jù)應(yīng)用程序窗口實例取得控件標(biāo)識,之后就可以操縱該控件了。中文菜單可使用"u"轉(zhuǎn)換字符串。實現(xiàn)代碼如下:
AppName=′TWAIN_32 Twacker′
TWAINDS_NAME=′SP C240SF/C242SF LAN 0.59 (32-32)′
def RunTwack():
      app=application.Application()
  app.start_(ur"C:\\Program Files\\TWAIN Working Group\\TWAIN Toolkit\\Twack_32.exe")
   app[AppName].Wait(′ready′)
   app[AppName].MenuSelect("File->Select Source...")
   app[u′選擇來源′].Listbox1.Select(TWAINDS_NAME)
   app[u′選擇來源′][u′選定′].Click()
   return app
2.2 自動化測試實現(xiàn)
 Twack_32成功啟動后,如果安裝了需要測試的驅(qū)動,將會出現(xiàn)被測Twain Driver的界面,圖3為某一驅(qū)動的界面,以下實現(xiàn)也以此驅(qū)動為例。

 該驅(qū)動支持三種掃描模式,分別是:Full Color、Gray和Black and White。假設(shè)需要測試該驅(qū)動的掃描模式是否實現(xiàn)正確,首先需要將mode改為Full Color,其他參數(shù)不變,掃描并觀察圖片是否正確;然后依次將mode改為Gray 和 Black and White并重復(fù)以上操作。使用Pywinauto實現(xiàn)對掃描模式的自動化測試。實現(xiàn)時盡量將每一個測試案例用一個相應(yīng)的函數(shù)實現(xiàn),有利于測試腳本的后期維護。示例代碼如下:
 DriverName=′SP C240SF/C242SF LAN′
 def SetScanParameter(ScanApp,nPaperSource,nColorModelItem, nDPIItem,nSizeIndex):
    WaitForWindowIsReady(ScanApp[DriverName])
    ScanApp[DriverName].ComboBox.Select(nPaperSource)
    WaitForWindowIsReady(ScanApp[DriverName])
    ScanApp[DriverName].ComboBox2.Select(nColorModelItem)
    ScanApp[DriverName].ComboBox3.Select(nDPIItem)
    ScanApp[DriverName].ComboBox4.Select(nSizeIndex)
    ScanApp[DriverName].Scan.Click()
    time.sleep(0.5)
def ScanImageWithTwackChangeMode(ScanApp, nColorModelItem)
SetScanParameter(ScanApp,1, nColorModelItem,1,2)def TestColorMode(ScanApp)
ScanImageWithTwackChangeMode(ScanApp,1)
ScanImageWithTwackChangeMode(ScanApp,2)
ScanImageWithTwackChangeMode(ScanApp,3)
 本文以Twain Driver為例介紹了Pywinauto在圖形界面自動化測試中的應(yīng)用與實現(xiàn)。Pywinauto通過模擬測試人員在用戶界面上的鼠標(biāo)、鍵盤操作來減少測試人員的手工操作。實現(xiàn)時,將各個測試用例對應(yīng)一個函數(shù),然后根據(jù)測試需求調(diào)用相應(yīng)的函數(shù)。由于基本功能測試時測試用例相對穩(wěn)定,所以腳本一旦寫好,以后每次發(fā)布版本前只需運行一次腳本即可完成基本功能測試。而在回歸測試階段,每增加一個測試用例,便增加一個相應(yīng)的實現(xiàn)函數(shù),從而避免遺漏對之前版本缺陷的測試。此外,本文的方案只需稍作修改,便可應(yīng)用于其他Windows圖形應(yīng)用程序的測試,特別是程序界面手動操作比較復(fù)雜時,該方案的效果更加明顯。
參考文獻
[1] TWAIN—standard for image acquisition devices[DB/OL].http://twain.org.2001.
[2] 辛敏杰,高建華.一種改進的GUI測試框架DART[J].計算機工程,2009,35(7):55-58.
[3] Contents-pywinauto v0.4.1 documentation[DB/OL]. http://pywinauto.googlecode.com/hg/pywinauto/docs/contents.html,2010.
[4] SendKeys|Rutherfurd.net[DB/OL]. http://www.rutherfurd.net/python/sendkeys,2008.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲精品影视| 欧美在线啊v一区| 国产亚洲美州欧州综合国| 欧美日韩视频一区二区| 免费在线成人| 久久一区精品| 久久久国产精品一区二区三区| 亚洲欧美日韩中文视频| 在线天堂一区av电影| 亚洲国产精品一区二区久| 亚洲欧美日韩系列| 午夜精品视频在线观看| 亚洲一级电影| 亚洲一区二区欧美| 亚洲一区欧美激情| 亚洲一区中文| 亚洲综合精品| 亚洲欧美大片| 亚洲欧美日韩视频二区| 亚洲欧美日韩综合国产aⅴ| 亚洲色图制服丝袜| 一区二区三区视频在线观看| av成人国产| 亚洲一区欧美| 欧美一区二区三区男人的天堂| 香蕉久久夜色精品国产| 欧美怡红院视频| 久久精品亚洲国产奇米99| 亚洲高清av在线| 最新成人av在线| 亚洲美女av网站| 夜夜爽av福利精品导航 | 毛片一区二区三区| 能在线观看的日韩av| 欧美精品一区二区三区在线播放| 欧美不卡福利| 欧美日韩亚洲免费| 国产精品你懂的在线| 国产丝袜一区二区三区| 激情文学一区| 亚洲经典一区| 亚洲手机视频| 久久狠狠亚洲综合| 亚洲精品国产精品国自产在线 | 久久er99精品| 快播亚洲色图| 欧美日韩网址| 国产欧美亚洲日本| 136国产福利精品导航网址应用| 亚洲茄子视频| 亚洲综合日韩中文字幕v在线| 久久成年人视频| 日韩午夜电影在线观看| 亚洲男女自偷自拍| 久久理论片午夜琪琪电影网| 欧美不卡在线视频| 欧美午夜一区| 国一区二区在线观看| 亚洲人成在线观看| 亚洲欧美日韩高清| 亚洲人成久久| 亚洲欧美另类中文字幕| 另类欧美日韩国产在线| 欧美日韩一区国产| 国产综合色一区二区三区| 亚洲精品视频免费观看| 亚洲欧美日本伦理| 亚洲精品一区二区三区蜜桃久| 亚洲一区图片| 开心色5月久久精品| 国产精品国产三级国产普通话99| 国产综合婷婷| 国产精品99久久不卡二区| 亚洲第一天堂av| 亚洲男女自偷自拍| 欧美大色视频| 国产一区二区三区高清在线观看| 日韩视频精品在线观看| 亚洲第一搞黄网站| 国产精品黄页免费高清在线观看| 国产精品在线看| 亚洲日韩欧美视频一区| 欧美亚洲视频一区二区| 亚洲私人影吧| 蜜桃精品一区二区三区 | 夜夜精品视频一区二区| 亚洲第一久久影院| 亚洲女人天堂成人av在线| 免费黄网站欧美| 国产一区二区三区高清在线观看| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲欧美影院| 欧美美女福利视频| 伊人成综合网伊人222| 午夜视频在线观看一区二区| 亚洲一区二区三区视频播放| 欧美成人国产| 在线观看中文字幕不卡| 欧美在线999| 欧美一区二区三区在线观看视频| 欧美午夜不卡视频| 亚洲国产影院| 亚洲国产精品欧美一二99| 久久国产欧美日韩精品| 国产精品美女一区二区| 夜夜嗨av一区二区三区中文字幕 | 日韩视频一区二区在线观看 | 国产自产在线视频一区 | 亚洲大片一区二区三区| 欧美在线免费观看视频| 国产精品v欧美精品v日韩精品| 亚洲精品少妇网址| 亚洲精品日日夜夜| 久久综合国产精品| 狠狠色狠狠色综合人人| 性欧美18~19sex高清播放| 亚洲欧美在线免费| 欧美亚一区二区| 99热免费精品| 亚洲视频每日更新| 欧美日精品一区视频| 99re66热这里只有精品3直播| 亚洲免费播放| 欧美精品日韩www.p站| 亚洲国内精品| 亚洲最新中文字幕| 欧美日韩三区四区| 99精品视频免费| 亚洲一区二区三区免费观看| 国产精品va在线播放| 亚洲一区二区成人| 欧美在线影院| 精品粉嫩aⅴ一区二区三区四区| 亚洲第一精品夜夜躁人人躁| 玖玖国产精品视频| 亚洲第一在线视频| 亚洲美女毛片| 欧美日韩一二三区| 在线一区亚洲| 久久国产福利| 伊人成年综合电影网| 亚洲精品视频免费观看| 欧美噜噜久久久xxx| 9色精品在线| 午夜精品国产| 国精产品99永久一区一区| 亚洲第一精品久久忘忧草社区| 欧美91精品| 日韩午夜激情| 午夜精品在线| 黑人中文字幕一区二区三区 | 欧美一级视频免费在线观看| 国产视频精品免费播放| 亚洲高清一区二区三区| 欧美 日韩 国产一区二区在线视频| 亚洲欧洲日产国产综合网| 一二三区精品| 国产免费成人| 亚洲黄色尤物视频| 欧美日韩精品一区| 亚洲欧美久久| 女人香蕉久久**毛片精品| 一本久久知道综合久久| 久久se精品一区精品二区| 在线观看欧美视频| 亚洲一区亚洲二区| 国内精品久久久| 一本大道久久a久久综合婷婷 | 亚洲青涩在线| 欧美一区观看| 亚洲欧洲精品一区二区| 午夜精品久久久久久久白皮肤 | 亚洲韩国日本中文字幕| 亚洲欧美日韩精品久久奇米色影视| 国产一区二区三区四区三区四| 99精品热视频| 国产婷婷色一区二区三区| 日韩亚洲精品视频| 国产精品伊人日日| 亚洲伦理中文字幕| 国产欧美日韩视频| 亚洲精品欧美精品| 国产日韩视频| 在线视频欧美日韩| 韩国v欧美v日本v亚洲v | 欧美一级久久久久久久大片| 亚洲电影视频在线| 欧美一级网站| 亚洲三级性片| 久久久青草婷婷精品综合日韩| 日韩一区二区精品在线观看| 久久精品99久久香蕉国产色戒| 亚洲精品欧美激情| 久久―日本道色综合久久| 9人人澡人人爽人人精品| 美女网站在线免费欧美精品| 亚洲特黄一级片| 欧美电影在线| 久久精品电影| 国产精品免费视频观看|