當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式硬件

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

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

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

 實(shí)現(xiàn)時(shí),首先通過(guò)調(diào)用start函數(shù)啟動(dòng)應(yīng)用程序獲取應(yīng)用程序?qū)嵗缓罄迷搼?yīng)用程序?qū)嵗徒缑娴臉?biāo)題(TWAIN_32 Twacker)取得應(yīng)用程序窗口實(shí)例,最后根據(jù)應(yīng)用程序窗口實(shí)例取得控件標(biāo)識(shí),之后就可以操縱該控件了。中文菜單可使用"u"轉(zhuǎn)換字符串。實(shí)現(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′選擇來(lái)源′].Listbox1.Select(TWAINDS_NAME)
app[u′選擇來(lái)源′][u′選定′].Click()
return app
2.2 自動(dòng)化測(cè)試實(shí)現(xiàn)
 Twack_32成功啟動(dòng)后,如果安裝了需要測(cè)試的驅(qū)動(dòng),將會(huì)出現(xiàn)被測(cè)Twain Driver的界面,圖3為某一驅(qū)動(dòng)的界面,以下實(shí)現(xiàn)也以此驅(qū)動(dòng)為例。

 該驅(qū)動(dòng)支持三種掃描模式,分別是:Full Color、Gray和Black and White。假設(shè)需要測(cè)試該驅(qū)動(dòng)的掃描模式是否實(shí)現(xiàn)正確,首先需要將mode改為Full Color,其他參數(shù)不變,掃描并觀察圖片是否正確;然后依次將mode改為Gray 和 Black and White并重復(fù)以上操作。使用Pywinauto實(shí)現(xiàn)對(duì)掃描模式的自動(dòng)化測(cè)試。實(shí)現(xiàn)時(shí)盡量將每一個(gè)測(cè)試案例用一個(gè)相應(yīng)的函數(shù)實(shí)現(xiàn),有利于測(cè)試腳本的后期維護(hù)。示例代碼如下:
 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在圖形界面自動(dòng)化測(cè)試中的應(yīng)用與實(shí)現(xiàn)。Pywinauto通過(guò)模擬測(cè)試人員在用戶界面上的鼠標(biāo)、鍵盤(pán)操作來(lái)減少測(cè)試人員的手工操作。實(shí)現(xiàn)時(shí),將各個(gè)測(cè)試用例對(duì)應(yīng)一個(gè)函數(shù),然后根據(jù)測(cè)試需求調(diào)用相應(yīng)的函數(shù)。由于基本功能測(cè)試時(shí)測(cè)試用例相對(duì)穩(wěn)定,所以腳本一旦寫(xiě)好,以后每次發(fā)布版本前只需運(yùn)行一次腳本即可完成基本功能測(cè)試。而在回歸測(cè)試階段,每增加一個(gè)測(cè)試用例,便增加一個(gè)相應(yīng)的實(shí)現(xiàn)函數(shù),從而避免遺漏對(duì)之前版本缺陷的測(cè)試。此外,本文的方案只需稍作修改,便可應(yīng)用于其他Windows圖形應(yīng)用程序的測(cè)試,特別是程序界面手動(dòng)操作比較復(fù)雜時(shí),該方案的效果更加明顯。
參考文獻(xiàn)
[1] TWAIN—standard for image acquisition devices[DB/OL].http://twain.org.2001.
[2] 辛敏杰,高建華.一種改進(jìn)的GUI測(cè)試框架DART[J].計(jì)算機(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.

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉