Pywinauto在Windows Twain Driver自動化測試中的應用研究

來源:互聯網
上載者:User

標籤:

摘  要: 以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在使用前首先需要將應用程式執行個體串連到一個進程,有兩種標識方法分別對應兩種情況:
 (1)應用程式未啟動即應用程式執行個體不存在:此時可以調用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
 (2)視窗標題結合Regex,特別是當視窗標題不確定或經常變化時尤為有用。樣本如下:
dlg=app.window_(title_re=".*doc",class_name="#33888")
 (3)直接取最上層視窗。此時需要確保被標識的應用程式視窗為頂層視窗。樣本如下:
MainDlg=app.top_window_()
1.3 標識應用程式視窗控制項
 Pywinauto的測試原理主要類比控制項上的手工操作,所以Pywinauto自動化測試中重要的一環就是標識應用程式視窗上的控制項。假設應用程式視窗有一內容為OK的Button控制項,主要有兩種方式標識這個控制項:
 (1)使用視窗控制項標題。樣本如下:
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在對中文應用的菜單進行操作時,通常會由於編碼問題而使中文應用的對話方塊和控制項無法進行標識。可以使用以下兩種方法解決:
 (1)使用"u"或者"ur"將字串轉換成UTF格式的字串。例如:
gDialogName=u"選擇來源"
gButtonName=u"選定"
app[gDialogName][gButtonName]
 (2)使用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.

 

轉自:

http://www.hqew.com/tech/fangan/734726.html

Pywinauto在Windows Twain Driver自動化測試中的應用研究

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.