段文雙 閆書(shū)佳 單鴻濤 盧金科
摘?要:現(xiàn)有的關(guān)于鼠標(biāo)輸入的測(cè)試自動(dòng)化方法大多需要調(diào)用被測(cè)設(shè)備底層操作系統(tǒng)接口或者向操作系統(tǒng)植入測(cè)試輔助工具。這些方法具有侵入性,在一些具有封閉性、或者安全性要求高的設(shè)備上無(wú)法使用。提出了一種非侵入式的鼠標(biāo)輸入測(cè)試自動(dòng)化方法,通過(guò)USB信號(hào)激勵(lì)器給入輸入激勵(lì),通過(guò)外部攝像頭和計(jì)算機(jī)視覺(jué)方法定位鼠標(biāo)指針,校準(zhǔn)視覺(jué)和激勵(lì)器空間鼠標(biāo)移動(dòng)關(guān)聯(lián),確定鼠標(biāo)移動(dòng)尺度,最終完成相應(yīng)鼠標(biāo)動(dòng)作。案例研究表明該方法具有較高的測(cè)試執(zhí)行準(zhǔn)確度,有良好的實(shí)用價(jià)值。
關(guān)鍵詞:計(jì)算機(jī)視覺(jué);測(cè)試自動(dòng)化;鼠標(biāo);非侵入式
中圖分類號(hào):?TP311??????文獻(xiàn)標(biāo)識(shí)碼:A
A?Computer?Vision?Based?Mouse?Input?Test?Automation?Method
ZHOU?Xu,QIAN?Ju
(College?of?Computer?Science?and?Technology,?Nanjing?University?of?Aeronautics
and?Astronautics,Nanjing,?Jiangsu?211106,?China)
Abstract:The?existing?test?automation?methods?about?mouse?input?require?calling?the?underlying?operating?system?of?the?device?under?test?or?install?test?enabling?tools?on?the?underlying?system.?These?methods?are?intrusive?and?hence?cannot?be?used?on?closed?or?securitysensitive?systems.This?paper?presents?a?nonintrusive?test?automation?method?for?mouse?input.?The?method?uses?computer?vision?techniques?to?obtain?mouse?positions?from?camera?captured?desktop?images?and?uses?USB?signal?stimulator?to?fire?mouse?events.It?first?introduces?an?algorithm?to?calibrate?the?correlation?between?mouse?move?on?the?visual?space?and?that?on?the?stimulator?space.?Then?the?required?mouse?moves?are?calculated?and?the?mouse?clicks?are?activated?via?the?USB?stimulator.Case?study?shows?that?this?method?has?high?test?execution?accuracy?and?is?practical?for?use.
Key?words:computer?vision;?test?automation;?mouse;?nonintrusive
鼠標(biāo)設(shè)備對(duì)于日常工作和生活必不可少。軟件測(cè)試中,很多場(chǎng)景下需要對(duì)鼠標(biāo)加以操作。這些操作往往涉及鼠標(biāo)不斷移動(dòng)、點(diǎn)擊等,上述動(dòng)作如果通過(guò)人工實(shí)現(xiàn)則低效、耗時(shí)。為了提高測(cè)試效率,需要對(duì)鼠標(biāo)輸入進(jìn)行測(cè)試自動(dòng)化[1],自動(dòng)進(jìn)行鼠標(biāo)指針移動(dòng),完成鼠標(biāo)點(diǎn)擊功能。將測(cè)試人員從繁瑣的手工測(cè)試中解放出來(lái),節(jié)省時(shí)間和人力成本。F7F8A21B-9E1C-47AE-BBCB-C48400AF1B6D
關(guān)于鼠標(biāo)輸入的測(cè)試自動(dòng)化,現(xiàn)有的技術(shù)大致可以分為兩類:一類是基于系統(tǒng)調(diào)用的方式,通過(guò)調(diào)用底層操作系統(tǒng)編程接口,控制鼠標(biāo)指針移動(dòng)、點(diǎn)擊。例如通過(guò)Windows系統(tǒng)提供的PostMessage接口完成鼠標(biāo)指令發(fā)送和接收[2]、通過(guò)安卓平臺(tái)中的adb?shell?sendevent指令完成點(diǎn)擊輸入功能[3]等;第二類是基于硬件模擬,通過(guò)不同的硬件設(shè)備對(duì)鼠標(biāo)命令進(jìn)行攔截、仿真[4][5]。第一類針對(duì)鼠標(biāo)設(shè)備進(jìn)行的測(cè)試自動(dòng)化技術(shù)具有侵入性。這些技術(shù)需要在被測(cè)設(shè)備中安裝或啟用測(cè)試輔助工具[6],訪問(wèn)設(shè)備底層操作系統(tǒng)。第二類基于硬件模擬的測(cè)試自動(dòng)化技術(shù)雖然無(wú)需在被測(cè)系統(tǒng)中植入測(cè)試輔助工具,具有一定的非侵入性,但其硬件仿真設(shè)備需要與被測(cè)系統(tǒng)通過(guò)電子線路相連接,要求被測(cè)目標(biāo)開(kāi)放內(nèi)部物理結(jié)構(gòu),允許接入信號(hào),在控制鼠標(biāo)指針進(jìn)行移動(dòng)點(diǎn)擊時(shí),需要根據(jù)待測(cè)設(shè)備屏幕接收的信號(hào)對(duì)其進(jìn)行控制。對(duì)于一些系統(tǒng)封閉和高安全性要求的設(shè)備,例如軍用顯控臺(tái)等,這些測(cè)試自動(dòng)化技術(shù)難以應(yīng)用。
非侵入式測(cè)試具有免植入工具、天然跨平臺(tái)等特點(diǎn)。然而,實(shí)現(xiàn)真正非侵入式的鼠標(biāo)測(cè)試自動(dòng)化技術(shù)頗具挑戰(zhàn),特別是在不通過(guò)底層系統(tǒng)或顯示接口獲取桌面圖像的情況下,鼠標(biāo)指針不易定位,鼠標(biāo)移動(dòng)速度不易控制,實(shí)現(xiàn)準(zhǔn)確的鼠標(biāo)移動(dòng)和點(diǎn)擊存在難度。為此,提出了一種基于視覺(jué)拍攝的鼠標(biāo)測(cè)試自動(dòng)化研究技術(shù)。該技術(shù)通過(guò)外部攝像頭跟蹤鼠標(biāo)指針并完成定位,使用USB信號(hào)激勵(lì)器完成鼠標(biāo)指針移動(dòng)點(diǎn)擊,并同步視覺(jué)空間和激勵(lì)器空間鼠標(biāo)的移動(dòng),實(shí)現(xiàn)非侵入性的測(cè)試。
通過(guò)控制激勵(lì)器,驅(qū)動(dòng)鼠標(biāo)指針實(shí)現(xiàn)移動(dòng)點(diǎn)擊待測(cè)桌面上的不同應(yīng)用等案例研究,表明該技術(shù)具有較高的測(cè)試執(zhí)行準(zhǔn)確度。該測(cè)試自動(dòng)化方法可適用于多種不同工作場(chǎng)景下的機(jī)器設(shè)備,例如普通的工作筆記本、禁止調(diào)用操作系統(tǒng)底層接口的軍用顯控臺(tái)等。擴(kuò)展了測(cè)試自動(dòng)化技術(shù)的應(yīng)用范圍,為現(xiàn)有技術(shù)無(wú)法應(yīng)用的測(cè)試場(chǎng)景,提供了有效技術(shù)支撐,為測(cè)試自動(dòng)化創(chuàng)造了更多的技術(shù)選擇。
1?測(cè)試自動(dòng)化總體結(jié)構(gòu)
提出的測(cè)試自動(dòng)化系統(tǒng)包括攝像頭、鼠標(biāo)激勵(lì)器和測(cè)試控制軟件等幾個(gè)主要部分,基本結(jié)構(gòu)如所圖1示。
攝像頭拍攝整個(gè)屏幕,用來(lái)跟蹤鼠標(biāo)位置,且保持成像平面平行于桌面屏幕。鼠標(biāo)激勵(lì)器與待測(cè)設(shè)備通過(guò)USB相連,用來(lái)控制鼠標(biāo)指針移動(dòng)。激勵(lì)器中只能實(shí)現(xiàn)鼠標(biāo)指針相對(duì)移動(dòng)功能,不支持絕對(duì)位置定位,并且操作系統(tǒng)鼠標(biāo)移動(dòng)速度設(shè)置不確定,激勵(lì)器中發(fā)出一個(gè)鼠標(biāo)移動(dòng)命令,具體在桌面空間發(fā)生的鼠標(biāo)移動(dòng)規(guī)模不確定。鼠標(biāo)控制過(guò)程無(wú)需向待測(cè)設(shè)備植入測(cè)試輔助軟件。測(cè)試控制軟件根據(jù)攝像頭獲取的信息決策鼠標(biāo)動(dòng)作,向鼠標(biāo)激勵(lì)器發(fā)送移動(dòng)命令實(shí)現(xiàn)鼠標(biāo)輸入的測(cè)試自動(dòng)化。
在上述系統(tǒng)上,鼠標(biāo)輸入測(cè)試自動(dòng)化的目標(biāo)是給定一個(gè)如下形式的控制指令:
自動(dòng)定位目標(biāo)控件位置,將鼠標(biāo)準(zhǔn)確移動(dòng)到該位置,并實(shí)現(xiàn)點(diǎn)擊。
方法的總體流程主要包括三個(gè)步驟:
(1)鼠標(biāo)指針定位;
(2)校準(zhǔn)視覺(jué)與激勵(lì)器空間鼠標(biāo)移動(dòng)關(guān)聯(lián);
(3)實(shí)現(xiàn)鼠標(biāo)動(dòng)作。
鼠標(biāo)輸入測(cè)試自動(dòng)化過(guò)程首先定位待測(cè)屏幕中鼠標(biāo)指針位置。鼠標(biāo)指針定位是進(jìn)行鼠標(biāo)移動(dòng)、點(diǎn)擊的基礎(chǔ)。由于鼠標(biāo)圖標(biāo)較小,在不同位置、不同背景下,并不總是能視覺(jué)識(shí)別,為此,本文提出一種校準(zhǔn)和識(shí)別鼠標(biāo)位置的方法,通過(guò)試探性移動(dòng)和多次識(shí)別來(lái)嘗試找出鼠標(biāo)位置。由于操作系統(tǒng)中的鼠標(biāo)移動(dòng)速度設(shè)置不確定,在攝像頭采集的圖像中,攝像頭還可能相對(duì)桌面屏幕發(fā)生一定的旋轉(zhuǎn),導(dǎo)致鼠標(biāo)從當(dāng)前位置到目標(biāo)位置的水平、垂直方向移動(dòng)和桌面空間、鼠標(biāo)激勵(lì)器空間的移動(dòng)并不一致,移動(dòng)角度、移動(dòng)尺度都存在偏差。本文提出一種視覺(jué)空間和激勵(lì)器空間的鼠標(biāo)移動(dòng)同步方法,來(lái)校準(zhǔn)視覺(jué)空間鼠標(biāo)移動(dòng)和激勵(lì)器空間鼠標(biāo)移動(dòng)的關(guān)聯(lián),進(jìn)而根據(jù)視覺(jué)空間所需的鼠標(biāo)移動(dòng)決策激勵(lì)器空間所需的鼠標(biāo)移動(dòng),驅(qū)動(dòng)鼠標(biāo)激勵(lì)器,完成鼠標(biāo)動(dòng)作。
2?鼠標(biāo)指針定位
實(shí)現(xiàn)鼠標(biāo)輸入的測(cè)試自動(dòng)化,首先需要對(duì)鼠標(biāo)指針在屏幕中的位置進(jìn)行定位。為視覺(jué)定位鼠標(biāo),本研究在拍攝的屏幕的圖像中,首先截圖獲得鼠標(biāo)的形態(tài),作為定位的模板。定位算法首先控制鼠標(biāo)進(jìn)行一次初始移動(dòng),目的是為了防止某些被測(cè)設(shè)備中鼠標(biāo)長(zhǎng)時(shí)間未使用而出現(xiàn)隱藏的狀態(tài),通過(guò)一次移動(dòng)確保鼠標(biāo)出現(xiàn)在屏幕內(nèi)。然后,在攝像頭獲取的待測(cè)設(shè)備現(xiàn)場(chǎng)屏幕圖中應(yīng)用SIFT[7]算法匹配鼠標(biāo)圖像,來(lái)定位鼠標(biāo)位置。
為了防止屏幕背景過(guò)多的干擾鼠標(biāo)圖像匹配,提高鼠標(biāo)指針往不同方向移動(dòng)時(shí)匹配的準(zhǔn)確性,較為精確地獲得每個(gè)方向上視覺(jué)空間與激勵(lì)器空間鼠標(biāo)移動(dòng)之間的關(guān)聯(lián)。選擇將鼠標(biāo)指針盡可能移往屏幕中背景信息較少的區(qū)域。采用SIFT算法計(jì)算圖像特征點(diǎn),并將鼠標(biāo)移向特征點(diǎn)較少的區(qū)域,認(rèn)為在該區(qū)域中,屏幕的背景信息相對(duì)較少。如圖2所示,通過(guò)攝像頭獲得待測(cè)設(shè)備屏幕圖像后,對(duì)初始鼠標(biāo)附近區(qū)域進(jìn)行特征點(diǎn)檢測(cè),附近區(qū)域分為四個(gè)方向分別是上、下、左、右。附近區(qū)域的大小和鼠標(biāo)指針初始截圖一樣大。將鼠標(biāo)指針初始區(qū)域記為origin,在圖中用白色框標(biāo)出。對(duì)于鼠標(biāo)指針附近的上、下、左、右四個(gè)區(qū)域,分別記為top、bottom、left、right。在圖中用黑色框標(biāo)出,在每個(gè)區(qū)域中,我們計(jì)算該區(qū)域內(nèi)部特征點(diǎn)集合,用諸如fp(top)的形式表示,最后,我們求出四個(gè)區(qū)域中特征點(diǎn)集合中數(shù)目最少的區(qū)域,用areaMin表示,則areaMin的表達(dá)式為:
同時(shí),在進(jìn)行鼠標(biāo)圖像匹配時(shí),為了進(jìn)一步減少圖像背景對(duì)模板匹配的干擾,選擇為模板圖像增加Alpha[8]通道。本文為鼠標(biāo)圖像增加Alpha通道,目的是將鼠標(biāo)指針與圖像背景隔離,使鼠標(biāo)指針背景變?yōu)橥该鳎谶M(jìn)行特征點(diǎn)計(jì)算與匹配時(shí),就不會(huì)誤計(jì)算背景中的特征點(diǎn)而導(dǎo)致誤匹配。
3?視覺(jué)和激勵(lì)器空間鼠標(biāo)移動(dòng)同步關(guān)系
每利用鼠標(biāo)激勵(lì)器驅(qū)動(dòng)鼠標(biāo)移動(dòng)一次,在對(duì)應(yīng)的被測(cè)設(shè)備的桌面空間,鼠標(biāo)指針便會(huì)發(fā)生一次改變,在攝像頭拍攝的屏幕圖像中,鼠標(biāo)指針的像素位置也會(huì)相應(yīng)地發(fā)生改變。在三個(gè)空間中發(fā)生的鼠標(biāo)移動(dòng)在方向和尺度上都有可能存在不同。為控制鼠標(biāo)指針移動(dòng)到攝像頭拍攝屏幕圖像中的指定位置,需要識(shí)別不同空間鼠標(biāo)移動(dòng)間的關(guān)聯(lián),進(jìn)行鼠標(biāo)移動(dòng)間的同步。F7F8A21B-9E1C-47AE-BBCB-C48400AF1B6D
給定一個(gè)由鼠標(biāo)激勵(lì)器觸發(fā)的桌面空間鼠標(biāo)移動(dòng)(py)的映射為激勵(lì)器-視覺(jué)鼠標(biāo)移動(dòng)映射。
以圖3為例,在激勵(lì)器空間中鼠標(biāo)指針從初始位置向右上方運(yùn)動(dòng)。Δx和Δy分別表示激勵(lì)器驅(qū)動(dòng)鼠標(biāo)移動(dòng)時(shí),激勵(lì)器中設(shè)置的鼠標(biāo)移動(dòng)步長(zhǎng),Δdx和Δdy分別表示在對(duì)應(yīng)的鼠標(biāo)激勵(lì)器中設(shè)置的鼠標(biāo)移動(dòng)步長(zhǎng)下,激勵(lì)器驅(qū)動(dòng)鼠標(biāo)移動(dòng)一次,鼠標(biāo)指針在桌面空間的水平、垂直方向移動(dòng)尺度,Δpx和Δpx分別表示在同樣的鼠標(biāo)移動(dòng)步長(zhǎng)下,鼠標(biāo)移動(dòng)一次,鼠標(biāo)指針在視覺(jué)空間的水平、垂直方向移動(dòng)尺度。在激勵(lì)器空間中定義好鼠標(biāo)移動(dòng)步長(zhǎng)并發(fā)送激勵(lì)器信號(hào)時(shí),就會(huì)相應(yīng)的在桌面空間移動(dòng)固定的距離,因此激勵(lì)器空間與桌面空間鼠標(biāo)移動(dòng)是一種縮放關(guān)系,而因攝像頭旋轉(zhuǎn)導(dǎo)致成像傾斜時(shí),激勵(lì)器空間移動(dòng)一次,視覺(jué)空間的移動(dòng)并不是固定的,因此本節(jié)的目標(biāo),就是為了找出激勵(lì)器空間中鼠標(biāo)移動(dòng)一次與視覺(jué)空間移動(dòng)時(shí)的指針移動(dòng)對(duì)應(yīng)關(guān)系。
3.1?激勵(lì)器單位有效移動(dòng)方法
在計(jì)算不同方向上激勵(lì)器-視覺(jué)鼠標(biāo)移動(dòng)映射關(guān)系時(shí),若在鼠標(biāo)激勵(lì)器中設(shè)置的鼠標(biāo)移動(dòng)步長(zhǎng)過(guò)長(zhǎng),在鼠標(biāo)指針移動(dòng)一次時(shí),可能會(huì)導(dǎo)致鼠標(biāo)指針已經(jīng)移動(dòng)到待測(cè)設(shè)備的屏幕邊緣位置,從而鼠標(biāo)激勵(lì)器中驅(qū)動(dòng)鼠標(biāo)移動(dòng)一次與實(shí)際的桌面鼠標(biāo)指針移動(dòng)距離產(chǎn)生了錯(cuò)誤的縮放關(guān)系,最終導(dǎo)致激勵(lì)器-視覺(jué)鼠標(biāo)移動(dòng)的映射也發(fā)生了錯(cuò)誤。因此,本文提出一種激勵(lì)器單位有效移動(dòng)的方法,計(jì)算激勵(lì)器中驅(qū)動(dòng)鼠標(biāo)兩次單位移動(dòng)后的鼠標(biāo)指針橫縱坐標(biāo)位置,判斷鼠標(biāo)進(jìn)行一次激勵(lì)器單位移動(dòng)時(shí)是否已經(jīng)移動(dòng)到待測(cè)屏幕邊緣位置,從而避免產(chǎn)生激勵(lì)器與視覺(jué)桌面鼠標(biāo)移動(dòng)時(shí)錯(cuò)誤的映射關(guān)系。
提出一種在激勵(lì)器進(jìn)行單位移動(dòng)時(shí),判斷其是否有效移動(dòng)的方法。激勵(lì)器單位有效移動(dòng)是指激勵(lì)器驅(qū)動(dòng)鼠標(biāo)進(jìn)行一次單位移動(dòng),鼠標(biāo)指針在移動(dòng)前后,指針的橫坐標(biāo)和縱坐標(biāo)位置都發(fā)生了改變,即鼠標(biāo)在移動(dòng)之前沒(méi)有到達(dá)屏幕的邊界。
為了防止鼠標(biāo)移動(dòng)時(shí)已經(jīng)觸碰到屏幕邊界,導(dǎo)致實(shí)際移動(dòng)距離與預(yù)期移動(dòng)距離不符,本文采取兩次試探,分別將鼠標(biāo)向同一方向移動(dòng)兩次,若兩次移動(dòng)后鼠標(biāo)坐標(biāo)位置不同,則認(rèn)為第一次移動(dòng)是有效移動(dòng),保留第一次移動(dòng)距離,作為計(jì)算視覺(jué)空間的移動(dòng)距離。具體流程是:
(1)記錄初始鼠標(biāo)指針坐標(biāo)位置;
(2)往某方向移動(dòng)鼠標(biāo)一次,定位其坐標(biāo);
(3)再次同方向移動(dòng)鼠標(biāo),并定位其坐標(biāo);
(4)判斷兩次坐標(biāo)是否相同,若相同,則為無(wú)效移動(dòng),此時(shí)反向移動(dòng)鼠標(biāo)指針多次,并記錄其坐標(biāo)位置。
(4)若兩次坐標(biāo)不同,則認(rèn)為第一次移動(dòng)一定是有效移動(dòng),計(jì)算第一次移動(dòng)鼠標(biāo)指針前后的坐標(biāo)偏量。
3.2?激勵(lì)器-視覺(jué)鼠標(biāo)移動(dòng)映射關(guān)系
在實(shí)際通過(guò)攝像頭對(duì)待測(cè)屏幕進(jìn)行拍攝時(shí),攝像頭成像相對(duì)桌面屏幕可能發(fā)生一定的旋轉(zhuǎn),導(dǎo)致激勵(lì)器驅(qū)動(dòng)鼠標(biāo)在桌面上的水平或豎直方向移動(dòng)一次時(shí),在成像結(jié)果像素空間的移動(dòng)并不一定是水平或豎直的,且鼠標(biāo)指針在桌面上各個(gè)方向的移動(dòng)速度也不一致。同時(shí),激勵(lì)器驅(qū)動(dòng)鼠標(biāo)在桌面空間的移動(dòng)步長(zhǎng)與激勵(lì)器內(nèi)設(shè)置的步長(zhǎng)不一定相同,導(dǎo)致激勵(lì)器步長(zhǎng)與桌面移動(dòng)步長(zhǎng)存在一種縮放關(guān)系,且根據(jù)成像大小不同,桌面移動(dòng)步長(zhǎng)與成像移動(dòng)步長(zhǎng)也存在一種縮放關(guān)系。因此,需要計(jì)算出成像旋轉(zhuǎn)以及不同縮放比例情況下,激勵(lì)器驅(qū)動(dòng)鼠標(biāo)指針移動(dòng)一次,在像素空間移動(dòng)與桌面上移動(dòng)之間的關(guān)系。
首先給出激勵(lì)器空間與像素空間的縮放關(guān)系。通過(guò)激勵(lì)器驅(qū)動(dòng)鼠標(biāo)指針在桌面上進(jìn)行一次移動(dòng),在激勵(lì)器空間,設(shè)移動(dòng)步長(zhǎng)為(Δx,Δy),將激勵(lì)器與桌面空間鼠標(biāo)移動(dòng)縮放尺度記為k1,桌面空間鼠標(biāo)移動(dòng)與像素空間鼠標(biāo)指針移動(dòng)縮放尺度記為k2,則激勵(lì)器驅(qū)動(dòng)鼠標(biāo)指針移動(dòng)后,在只考慮縮放關(guān)系的情況下,將像素空間移動(dòng)步長(zhǎng)記為(Δx',Δy'),則用公式可以表示為:
縮放關(guān)系計(jì)算完成后,接下來(lái)計(jì)算激勵(lì)器空間與像素空間鼠標(biāo)指針移動(dòng)滿足的旋轉(zhuǎn)關(guān)系。將激勵(lì)器驅(qū)動(dòng)鼠標(biāo)進(jìn)行步長(zhǎng)(Δx,Δy)的移動(dòng)后,視覺(jué)空間鼠標(biāo)指針移動(dòng)步長(zhǎng)記為Δx″,Δy″,則應(yīng)首先根據(jù)(Δx,Δy)和縮放尺度,通過(guò)上述公式,得到像素空間移動(dòng)步長(zhǎng)(Δx',Δy')。再根據(jù)像素空間移動(dòng)步長(zhǎng),計(jì)算視覺(jué)空間移動(dòng)步長(zhǎng),其計(jì)算公式為:
根據(jù)此公式以及在鼠標(biāo)激勵(lì)器上驅(qū)動(dòng)鼠標(biāo)指針向每個(gè)方向進(jìn)行一次單位移動(dòng),即可計(jì)算出旋轉(zhuǎn)角θ和縮放尺度k1k2的積,最后將這兩個(gè)參數(shù)帶入上述公式,即可得到在鼠標(biāo)激勵(lì)器中驅(qū)動(dòng)鼠標(biāo)指針移動(dòng)一次,實(shí)際在像素中每個(gè)方向的移動(dòng)尺度。具體的做法是:以鼠標(biāo)激勵(lì)器驅(qū)動(dòng)鼠標(biāo)指針向右進(jìn)行一次有效單位移動(dòng)為例,令Δx=1,Δy=0,根據(jù)鼠標(biāo)指針移動(dòng)前后,獲取鼠標(biāo)指針在像素空間中的坐標(biāo)變換為(Δx″,Δy″),則可以得到如下公式:
在該公式中,Δx″和Δy″為已知量,將這兩個(gè)公式分別進(jìn)行平方后再相加,最后可以得到k1k2的積,即為激勵(lì)器空間與像素空間鼠標(biāo)移動(dòng)的縮放尺度,再計(jì)算得到的縮放尺度再帶回此公式,可求出旋轉(zhuǎn)角度θ。在計(jì)算出傾斜角θ和縮放尺度后,可以將θ與縮放尺度帶入旋轉(zhuǎn)關(guān)系公式中,得到激勵(lì)器-視覺(jué)鼠標(biāo)移動(dòng)的映射關(guān)系。根據(jù)此移動(dòng)映射關(guān)系,在鼠標(biāo)激勵(lì)器中驅(qū)動(dòng)鼠標(biāo)指針進(jìn)行單位移動(dòng)時(shí),可以獲取相應(yīng)的在像素空間鼠標(biāo)移動(dòng)的尺度。
在通過(guò)鼠標(biāo)移動(dòng)計(jì)算激勵(lì)器-視覺(jué)鼠標(biāo)移動(dòng)映射關(guān)系時(shí),還需考慮到鼠標(biāo)指針移動(dòng)后,圖像匹配未成功的情況,例如,在用SIFT算法進(jìn)行鼠標(biāo)圖像的特征點(diǎn)匹配時(shí),鼠標(biāo)移動(dòng)一次后,并未匹配成功,但是移動(dòng)兩次或者多次之后可以完成鼠標(biāo)指針圖像匹配,鑒于此種情況,本文給出一個(gè)鼠標(biāo)移動(dòng)序列,如下所示,M表示鼠標(biāo)指針移動(dòng)后的圖像匹配結(jié)果集。
其中,將任意兩個(gè)在同方向移動(dòng)后,能夠定位的鼠標(biāo)指針記為Mi(x,y),Mj(m,n),Mi,Mj∈?M。根據(jù)指針位置,算出鼠標(biāo)在像素空間移動(dòng)前后的距離,并帶入旋轉(zhuǎn)公式中,再根據(jù)移動(dòng)次數(shù),可以算出θ角和縮放尺度,作為旋轉(zhuǎn)公式中的未知參數(shù)的解。將該序列中任意能夠定位的多個(gè)同方向移動(dòng)后的鼠標(biāo)指針,兩兩進(jìn)行角度和縮放尺度計(jì)算。最后,對(duì)于每次能夠定位的點(diǎn),我們將計(jì)算得到的角度相加并求平均值,得到較為精確的旋轉(zhuǎn)角度,并帶入坐標(biāo)轉(zhuǎn)換矩陣中,并將縮放尺度也進(jìn)行同樣的操作。以計(jì)算平均角度為例,將角度的平均值記為θ-,對(duì)于每次計(jì)算得到的角度,將其記為θ。則的表達(dá)式為:F7F8A21B-9E1C-47AE-BBCB-C48400AF1B6D
其中count(i,j)表示可定位同方向鼠標(biāo)指針對(duì)個(gè)數(shù)。
4?鼠標(biāo)動(dòng)作的實(shí)現(xiàn)
獲得激勵(lì)器-視覺(jué)鼠標(biāo)移動(dòng)映射關(guān)系后,下一步是實(shí)現(xiàn)鼠標(biāo)移動(dòng),對(duì)目標(biāo)控件進(jìn)行點(diǎn)擊,完成鼠標(biāo)設(shè)備的非侵入式測(cè)試自動(dòng)化。該方法是主要思想是通過(guò)計(jì)算待點(diǎn)擊應(yīng)用與鼠標(biāo)指針之間的位置,根據(jù)激勵(lì)器-視覺(jué)鼠標(biāo)移動(dòng)關(guān)系,計(jì)算鼠標(biāo)指針移動(dòng)到待點(diǎn)擊應(yīng)用時(shí)需要移動(dòng)的次數(shù)。輸入數(shù)據(jù)是鼠標(biāo)指針在待測(cè)桌面中的初始坐標(biāo)位置,輸出是鼠標(biāo)指針在待測(cè)桌面中的最終停留位置。
本文采用Arduino?Leonardo[9]和esp8266[10]模塊來(lái)模擬鼠標(biāo)設(shè)備,并將其通過(guò)杜邦線連接,如圖5所示。
方法首先定位像素空間中待點(diǎn)擊應(yīng)用與鼠標(biāo)指針初始位置,并根據(jù)兩者位置,計(jì)算需要移動(dòng)的次數(shù)。具體的計(jì)算方法為,根據(jù)3.2節(jié)中對(duì)縮放關(guān)系和旋轉(zhuǎn)關(guān)系矩陣的描述,將公式進(jìn)行整合,整合情況如下所示,首先計(jì)算鼠標(biāo)指針位置與待點(diǎn)擊應(yīng)用位置在不同方向上的移動(dòng)關(guān)系,得到縮放尺度和旋轉(zhuǎn)角度。
并根據(jù)待點(diǎn)擊應(yīng)用位置與鼠標(biāo)初始指針位置,可以得到上述公式中的Δx''和Δy'',最后可以得出需要移動(dòng)的次數(shù)Δx和Δy。
若Δx或者Δy是整數(shù),則在進(jìn)行鼠標(biāo)移動(dòng)時(shí),只需向激勵(lì)器先發(fā)送Δx次信號(hào),再發(fā)送Δy次信號(hào)即可。若Δx或者Δy是非整數(shù)(即小數(shù)),則需先向激勵(lì)器發(fā)送整數(shù)部分次數(shù)的信號(hào),例如若Δx=?5.4,先向激勵(lì)器發(fā)送5次水平方向移動(dòng)信號(hào),然后對(duì)于剩下的0.4次,將激勵(lì)器中的移動(dòng)步長(zhǎng)改為原先設(shè)置好的移動(dòng)步長(zhǎng)step_size*?0.4,作為最后一次的移動(dòng)步長(zhǎng)。對(duì)于豎直方向,也采取同樣的操作。
5?測(cè)試自動(dòng)化框架使用效果
在實(shí)驗(yàn)時(shí)盡可能時(shí)成像平面平行于桌面屏幕,同時(shí)可以使攝像頭旋轉(zhuǎn),與桌面屏幕呈現(xiàn)一定旋轉(zhuǎn)角度。在該旋轉(zhuǎn)角度下,嘗試對(duì)桌面屏幕中位于鼠標(biāo)指針不同方向的應(yīng)用進(jìn)行點(diǎn)擊測(cè)試。同時(shí),為鼠標(biāo)指針點(diǎn)擊選擇不同的目標(biāo)控件,觀察控件是否準(zhǔn)確打開(kāi),并將目標(biāo)控件位于鼠標(biāo)指針的不同方向,如圖5所示。
本文對(duì)該種情況下鼠標(biāo)指針移動(dòng)點(diǎn)擊進(jìn)行七次執(zhí)行實(shí)驗(yàn),計(jì)算腳本執(zhí)行后,鼠標(biāo)指針與待點(diǎn)擊應(yīng)用之間的距離,在計(jì)算該距離時(shí),首先為待點(diǎn)擊應(yīng)用截取一張長(zhǎng)寬相同的圖像,并將該圖像長(zhǎng)度(或?qū)挾龋┯洖閣idth,然后計(jì)算鼠標(biāo)最終停留的像素坐標(biāo)位置與待點(diǎn)擊應(yīng)用中心像素坐標(biāo)的歐式距離[11],記為distancemouse_img,將此距離與圖像長(zhǎng)度的一半相除,得到指針停留位置與目標(biāo)位置距離,該距離越小,則表示指針停留位置與目標(biāo)位置越接近。
并觀察待點(diǎn)擊目標(biāo)控件是否被打開(kāi)。七次實(shí)驗(yàn)執(zhí)行結(jié)果如表1所示。以上數(shù)據(jù)表明該鼠標(biāo)非侵入式測(cè)試自動(dòng)化方法具有較高的準(zhǔn)確度。
6?小?結(jié)
本文提出了一個(gè)基于視覺(jué)拍攝的鼠標(biāo)輸入測(cè)試自動(dòng)化技術(shù),該技術(shù)使用攝像頭捕捉鼠標(biāo)在屏幕中的移動(dòng),并進(jìn)行鼠標(biāo)指針定位。通過(guò)鼠標(biāo)激勵(lì)器控制鼠標(biāo)指針移動(dòng),并校準(zhǔn)鼠標(biāo)激勵(lì)器中的鼠標(biāo)移動(dòng)與實(shí)際視覺(jué)成像中鼠標(biāo)指針移動(dòng)之間的關(guān)系。實(shí)驗(yàn)研究表明本方法只需將鼠標(biāo)激勵(lì)器插入待測(cè)設(shè)備中,即可完成對(duì)不同設(shè)備的非侵入式鼠標(biāo)測(cè)試自動(dòng)化,能夠滿足測(cè)試人員對(duì)各種不同工作場(chǎng)景下鼠標(biāo)的測(cè)試需求,具有較高的使用價(jià)值。
參考文獻(xiàn)
[1]?C.?Hsueh,?Y.?Cheng?and?W.?Pan,?"Intrusive?Test?Automation?with?Failed?Test?Case?Clustering,"?2011?18th?AsiaPacific?Software?Engineering?Conference,?Ho?Chi?Minh,?2011.
[2]?胡智文,陳連運(yùn),余增亮.通過(guò)鼠標(biāo)自動(dòng)控制實(shí)現(xiàn)程序的自動(dòng)化操作[J].計(jì)算機(jī)工程與應(yīng)用,2003.
[3]?古銳,肖璞.基于Appium的Android應(yīng)用自動(dòng)化測(cè)試框架的研究[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),?2018.
[4]?Cheng?Y?P,?Liang?D,?Wang?W?J.?KORAT—A?platform?independent?test?automation?tool?by?emulating?keyboard/mouse?hardware?signals[C]//2016?IEEE?AUTOTESTCON.?IEEE,?2016.
[5]?Yu,?Zhengwei,?et?al.?"A?Novel?Automated?GUI?Testing?Echnology?Based?on?Image?Recognition."?2016?IEEE?18th?International?Conference?on?High?Performance?Computing?and?Communications;?IEEE?14th?International?Conference?on?Smart?City;?IEEE?2nd?International?Conference?on?Data?Science?and?Systems?.?IEEE,?2016.F7F8A21B-9E1C-47AE-BBCB-C48400AF1B6D
[6]?2020.UIAutomator.http://developer.android.com/tools/testingsupportlibrary.
[7]?G.?Shi,?X.?Xu?and?Y.?Dai,?"SIFT?Feature?Point?Matching?Based?on?Improved?RANSAC?Algorithm,"?2013?5th?International?Conference?on?Intelligent?HumanMachine?Systems?and?Cybernetics,?Hangzhou,?2013.
[8]?H.?Zhang,?Y.?Zhou,?L.?Chen?and?J.?Zhao,?"Image?Alpha?Matting?via?Residual?Convolutional?Grid?Network,"?2019?IEEE?Global?Conference?on?Signal?and?Information?Processing?(GlobalSIP),?Ottawa,?ON,?Canada,?2019.
[9]?蔡睿妍.Arduino的原理及應(yīng)用[J].電子設(shè)計(jì)工程,2012.
[10]張琥石,林偉龍,楊發(fā)柱,黃向軍,金星伊,陳潔,羅曉春,張盈盈,甘辛.基于ESP8266?WiFi模塊的物聯(lián)網(wǎng)體溫監(jiān)測(cè)系統(tǒng)[J].物聯(lián)網(wǎng)技術(shù),2020.
[11]H.?Wang?et?al.,?"Research?on?the?Relationship?between?Classic?DenavitHartenberg?and?Modified?DenavitHartenberg,"?2014?Seventh?International?Symposium?on?Computational?Intelligence?and?Design,?Hangzhou,?2014,?pp.?26-29,?doi:?10.1109/ISCID.2014.F7F8A21B-9E1C-47AE-BBCB-C48400AF1B6D