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

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

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

1.4 如何操控鼠標與鍵盤
 在取得Windows對話框和控件后,就可以向對話框或者控件發送鼠標、鍵盤操作來實現自動化測試。
鼠標的操作:(1)點擊操作:模擬鼠標的點擊操作可以結合具體的控件,Pywinauto對于不同的控件提供了不同的函數。例如,模擬Next Button的點擊事件可以表示為Dialog.["Next"].Click();模擬ComboBox 控件的選擇操作可以使用如下方式:Dialog.ComboBox1.Select(1)。(2)拖動操作:主要使用PressMouse()、MoveMouse()和ReleaseMouse()實現鼠標的按下、移動以及釋放操作。示例如下:
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發送快捷鍵。如要表示按下Alt+F組合鍵,可以寫成MainWin.TypeKeys("%F")。需要說明的是:TypeKey還可表示按照一定時間間隔接受多個組合按鍵。例如,在Word2003打開從掃描儀導入圖片的窗口,需要先按Alt+I,然后按Alt+P,最后按Alt+S。用SendKeys可以表示為:
MainWin.TypeKeys("%IPS",pause=0.5)
1.5 中文支持
 Pywinauto在對中文應用的菜單進行操作時,通常會由于編碼問題而使中文應用的對話框和控件無法進行標識??梢允褂靡韵聝煞N方法解決:
 (1)使用"u"或者"ur"將字符串轉換成UTF格式的字符串。例如:
gDialogName=u"選擇來源"
gButtonName=u"選定"
app[gDialogName][gButtonName]
?。?)使用decode函數強行轉換字符串編碼。例如:
CP="cp936"
gDialogName="選擇來源".decode(CP)
gButtonName="選定".decode(CP)
app[gDialogName][gButtonName]
2 Twain Driver自動化測試實現
 由于Twain協議使用的廣泛性,目前已經有很多應用程序支持該協議。Windows下常見的應用程序主要有Twack_32、Microsoft Word、PageManager 以及Adobe Photoshop等,這些應用程序均可作為Twain Driver的測試工具。其中Twack_32是TWAIN官方所提供的一個工具,其兼容性最好,而且它不僅提供了TWAIN應用的例程,還可以在計算機系統上安裝一個虛擬的圖像輸入設備(TWAIN_32SampleSource),所以測試人員通常使用Twack_32對Twain Driver進行測試。本文也以Twack_32為例實現Twain Driver的自動化測試。
2.1 Twack_32啟動的實現
 下載并安裝完后,打開Twack_32界面,然后依次選擇File->Select Source,彈出一個對話框,如圖2所示。

 

 

 實現時,首先通過調用start函數啟動應用程序獲取應用程序實例,然后利用該應用程序實例和界面的標題(TWAIN_32 Twacker)取得應用程序窗口實例,最后根據應用程序窗口實例取得控件標識,之后就可以操縱該控件了。中文菜單可使用"u"轉換字符串。實現代碼如下:
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 自動化測試實現
 Twack_32成功啟動后,如果安裝了需要測試的驅動,將會出現被測Twain Driver的界面,圖3為某一驅動的界面,以下實現也以此驅動為例。

 該驅動支持三種掃描模式,分別是:Full Color、Gray和Black and White。假設需要測試該驅動的掃描模式是否實現正確,首先需要將mode改為Full Color,其他參數不變,掃描并觀察圖片是否正確;然后依次將mode改為Gray 和 Black and White并重復以上操作。使用Pywinauto實現對掃描模式的自動化測試。實現時盡量將每一個測試案例用一個相應的函數實現,有利于測試腳本的后期維護。示例代碼如下:
 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在圖形界面自動化測試中的應用與實現。Pywinauto通過模擬測試人員在用戶界面上的鼠標、鍵盤操作來減少測試人員的手工操作。實現時,將各個測試用例對應一個函數,然后根據測試需求調用相應的函數。由于基本功能測試時測試用例相對穩定,所以腳本一旦寫好,以后每次發布版本前只需運行一次腳本即可完成基本功能測試。而在回歸測試階段,每增加一個測試用例,便增加一個相應的實現函數,從而避免遺漏對之前版本缺陷的測試。此外,本文的方案只需稍作修改,便可應用于其他Windows圖形應用程序的測試,特別是程序界面手動操作比較復雜時,該方案的效果更加明顯。
參考文獻
[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.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲欧美日韩一区二区三区在线| 一区二区三区视频在线看| 国产一区二区三区四区| 亚洲精品少妇30p| 国产欧美va欧美不卡在线| 一本久久青青| 欧美成人精品一区| 亚洲欧美激情精品一区二区| 欧美色偷偷大香| 欧美一区二区三区另类| 欧美女主播在线| 国产麻豆视频精品| 欧美日韩国产999| 亚洲日本一区二区| 亚洲亚洲精品在线观看| 亚洲天堂偷拍| 亚洲欧美国产日韩天堂区| 欧美一区二区网站| 欧美在线综合| 欧美午夜电影一区| 国产精品美女久久福利网站| 久久久久国产精品人| 欧美黑人国产人伦爽爽爽| 亚洲国产成人av| 亚洲性视频网址| 国产精品人成在线观看免费| 亚洲乱码国产乱码精品精可以看| 性欧美video另类hd性玩具| 久久狠狠久久综合桃花| 亚洲视频在线看| 老牛影视一区二区三区| 国产亚洲精品美女| 国产一区亚洲一区| 午夜精品久久久久久久99热浪潮| 国产精品日产欧美久久久久| 亚洲激情在线视频| 日韩午夜剧场| 一区二区三区欧美在线| 国产情侣一区| 亚洲精品国精品久久99热一| 亚洲精品一区二区在线| 久久综合九色综合网站| 欧美日韩成人在线观看| 国产美女精品一区二区三区| 欧美色精品在线视频| 在线视频亚洲欧美| 99re视频这里只有精品| 欧美激情久久久久久| 亚洲国产专区校园欧美| 久久一区二区三区国产精品| 免费在线看一区| 亚洲第一中文字幕在线观看| 久久人人97超碰国产公开结果| 欧美激情精品久久久久久| 欧美精品一区二区三区在线看午夜| 国产一区二区三区电影在线观看| 一本色道久久加勒比精品| 久久精品亚洲国产奇米99| 亚洲一区二区高清视频| 欧美精品三级在线观看| 欧美日本精品在线| 欧美色大人视频| 国产精品美女久久久久久2018| 国产精品久久久久三级| 国产精品日韩高清| 中文精品视频一区二区在线观看| 欧美fxxxxxx另类| 久久av老司机精品网站导航| 亚洲另类在线一区| 久久久精品国产免大香伊| 亚洲婷婷综合久久一本伊一区| 亚洲激情视频在线播放| 午夜在线精品偷拍| 国内揄拍国内精品少妇国语| 亚洲一区二区免费| 日韩一区二区精品| 亚洲一区国产一区| 久久久一二三| 免费精品99久久国产综合精品| 免费观看亚洲视频大全| 亚洲永久免费观看| 日韩视频国产视频| 狠狠色丁香婷婷综合久久片| 国产精品男人爽免费视频1| 国产精品成人一区二区网站软件| 一本久久a久久精品亚洲| 亚洲一区二区三区免费视频| 欧美视频中文在线看| 国产麻豆精品久久一二三| 一区二区在线观看av| 欧美伦理91i| 国内揄拍国内精品少妇国语| 国产精品欧美日韩一区二区| 伊人夜夜躁av伊人久久| 欧美啪啪一区| 欧美一区二区高清| 欧美1区视频| 国内精品久久久久久久97牛牛| 欧美午夜理伦三级在线观看| 蜜臀a∨国产成人精品| 久久精品最新地址| 美国成人毛片| 亚洲高清av在线| 在线播放中文一区| 中文国产成人精品| 欧美午夜影院| 国产一区亚洲一区| 国产精品影音先锋| 国产日韩专区| 欧美日韩视频一区二区三区| 影音先锋亚洲精品| 国产日韩精品一区二区三区在线| 亚洲视频第一页| 欧美日韩精品一区二区天天拍小说| 亚洲天堂男人| 欧美日韩在线直播| 性欧美videos另类喷潮| 国产精品扒开腿做爽爽爽视频| 亚洲私人黄色宅男| 欧美成人精精品一区二区频| 欧美与黑人午夜性猛交久久久| 欧美.www| 久久久久久久国产| 在线成人亚洲| 在线观看日韩欧美| 国产日韩亚洲| 欧美区二区三区| 国产精品美女www爽爽爽| 国精产品99永久一区一区| 一区二区在线观看av| 欧美人在线观看| 欧美体内she精视频在线观看| 日韩视频在线一区二区| 亚洲一区二区三区在线看| 欧美一区二区精品久久911| 欧美女同视频| 亚洲精品黄网在线观看| 久久久一二三| 欧美久久久久久久| 亚洲一区二区免费看| 黄色精品免费| 欧美天天视频| 欧美精品一区在线发布| 国产欧美不卡| 欧美日韩国产专区| 欧美日韩精品不卡| 国产亚洲精品久久久久动| 一区二区三区日韩精品| 久久精品一区二区| 亚洲一区国产| 一区二区三区高清视频在线观看| 欧美国产第一页| 欧美成人四级电影| 久久九九国产精品| 国产情人节一区| 欧美成人精精品一区二区频| 欧美成人免费网站| 亚洲伊人色欲综合网| 亚洲网站视频福利| 亚洲精品孕妇| 欧美国产三区| 欧美电影在线播放| 日韩一级精品视频在线观看| 久久综合给合久久狠狠狠97色69| 亚洲视频电影在线| 一本大道久久a久久精二百| 亚洲区中文字幕| 亚洲欧洲综合另类| 美女图片一区二区| 欧美性视频网站| 欧美日韩国产成人在线观看| 欧美一区二区观看视频| 亚洲福利视频免费观看| 欧美激情一级片一区二区| 久久丁香综合五月国产三级网站| 欧美日韩无遮挡| 亚洲女与黑人做爰| 国产精品一区一区| 欧美激情亚洲国产| 欧美在线高清视频| 可以免费看不卡的av网站| 久久香蕉国产线看观看av| 亚洲免费视频一区二区| 香蕉亚洲视频| 99精品热视频只有精品10| 亚洲视频在线免费观看| 国产一区91精品张津瑜| aⅴ色国产欧美| 国产一区二区主播在线| 好吊视频一区二区三区四区| 久久精品久久综合| 国产一区二区三区在线观看免费视频| 亚洲激情电影中文字幕| 久久婷婷久久一区二区三区| 欧美一区二区视频免费观看| 欧美激情一区二区三区全黄| 欧美一区二区三区免费观看| **网站欧美大片在线观看| 欧美第一黄网免费网站| 国产欧美精品日韩精品| 亚洲日本免费电影| 亚洲成人在线观看视频| 亚洲欧美视频一区二区三区| 久久se精品一区二区| 亚洲国产成人精品久久| 久久久久国产免费免费| 欧美午夜精品| 国产日韩久久| 欧美一区二区| 免费亚洲一区二区| 国产精品激情电影| 久久精品国产久精国产一老狼| 久久精品亚洲乱码伦伦中文| 免费毛片一区二区三区久久久| 夜夜爽夜夜爽精品视频| 亚洲欧美激情一区| 国产精品av免费在线观看| 国产乱理伦片在线观看夜一区| 欧美视频在线观看视频极品| 在线一区二区日韩| 在线亚洲伦理| 国产欧美一区二区精品仙草咪| 久久久久九九九| 亚洲人成在线影院| 欧美国产亚洲另类动漫| 亚洲第一福利社区| 欧美黑人一区二区三区| 久久成人羞羞网站| 亚洲深夜福利| 欧美一区二区三区四区在线观看地址| 一区二区在线观看视频在线观看| 久久精品国产v日韩v亚洲| 亚洲欧洲精品一区| 亚洲高清中文字幕| 嫩模写真一区二区三区三州| 美女黄色成人网| 亚洲婷婷国产精品电影人久久| 欧美精品色一区二区三区| 国产一区二区中文字幕免费看| 久久久久久69| 黄色成人91| 欧美在线免费看| 亚洲视频一区二区免费在线观看| 日韩写真视频在线观看| 欧美日韩一区国产| 欧美日韩精品中文字幕| 亚洲欧洲一级| 国产欧美一区视频| 亚洲激情午夜| 国产一区观看| 久久免费视频在线观看| 亚洲国产另类 国产精品国产免费| 欧美一区二区三区播放老司机| 午夜精品久久久久久久久久久久久| 亚洲美女一区| 国产精品伊人日日| 黄网站色欧美视频| 国产精品久久久一区麻豆最新章节| 亚洲七七久久综合桃花剧情介绍| 国产精品无码永久免费888| 99视频+国产日韩欧美| 欧美专区亚洲专区| 欧美交受高潮1| 国产美女精品| 久久精品视频在线观看| 欧美极品在线观看| 欧美一区二区三区成人| 国产一区二区三区丝袜| 亚洲狠狠婷婷| 亚洲一区在线播放| 伊人狠狠色丁香综合尤物| 美女啪啪无遮挡免费久久网站| 亚洲高清久久| 免费成人黄色av| 国产在线精品一区二区夜色| 洋洋av久久久久久久一区| 日韩视频永久免费| 欧美成人综合一区| 一区二区三区精品视频| 亚洲欧美日本国产有色| 亚洲精品老司机| 国产亚洲成人一区| 国产精品久久久久91| 一卡二卡3卡四卡高清精品视频| 久久久九九九九| 欧美日韩 国产精品| 欧美精品在线观看| 久热精品视频在线| 91久久久亚洲精品| 激情一区二区三区| 国产一区二区日韩精品欧美精品| 亚洲精品在线视频| 亚洲国产一区二区精品专区| 欧美黑人一区二区三区| 亚洲最黄网站| 国内在线观看一区二区三区| 在线电影院国产精品| 亚洲一区国产一区| 久久女同互慰一区二区三区| 欧美激情四色| 国产综合色精品一区二区三区| 久久一综合视频| 欧美一区二区在线视频| 99精品黄色片免费大全| 欧美日韩免费观看一区| 国产精品揄拍一区二区| 久久亚洲影院| 免费日韩一区二区| 国产一区白浆| 国产毛片一区二区| 国产精品久久久久久久午夜| 欧美三区美女| 欧美午夜视频在线观看| 免费欧美高清视频| 亚洲国产日韩欧美在线99| 亚洲国产裸拍裸体视频在线观看乱了中文| 亚洲精品色图| 亚洲欧美国产另类| 在线不卡中文字幕播放| 亚洲欧洲日本在线| 亚洲欧美另类在线| 中文国产成人精品| 欧美成年人视频网站欧美| 美女主播精品视频一二三四| 激情综合激情| 国产精品制服诱惑| 国产精品一区二区女厕厕| 性色一区二区|