亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種實現(xiàn)自動測試的方法和系統(tǒng)的制作方法

文檔序號:7929051閱讀:158來源:國知局
專利名稱:一種實現(xiàn)自動測試的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及測試技術(shù)領(lǐng)域,尤其涉及一種實現(xiàn)自動測試的方法和系統(tǒng)。
背景技術(shù)
目前在不同終端投入使用前都需要進行各種復雜的測試工作,而對終端進行測試 時往往需要同時操作很多軟件,如終端撥號軟件、跟蹤調(diào)試軟件、網(wǎng)絡(luò)側(cè)儀表軟件等;并且, 在測試工作中需要人為反復的進行操作,這樣就會在軟件操作方面投入大量的人力,同時 由于測試中引入了人為的因素,也就很容易造成一些不必要的失誤,給測試帶來了一定的 不利影響;此外,測試工作對于測試人員來說往往意味著反復執(zhí)行相同的操作,而這樣的工 作狀況會令測試人員進入非常機械的工作狀態(tài),從而不利于定位解決問題。因此有必要通 過某種方式來通知各軟件進行相應的動作,并可周而復始的進行操作,以此來簡化操作流 程,減少測試人員的機械性工作。 針對此問題,目前已有的相關(guān)實現(xiàn)方案是通過錄入宏的方法來實現(xiàn)自動測試測 試人員先開啟錄入宏,進行不同的軟件操作,然后關(guān)閉錄入,以后再測試時只要點擊運行 宏,就可以模擬先前的操作進行測試。而這種宏錄入的實現(xiàn)方法,主要是通過監(jiān)聽操作系統(tǒng) 的鼠標、鍵盤的消息來實現(xiàn)的當鼠標箭頭在屏幕上移動時,操作系統(tǒng)會實時發(fā)出鼠標的位 置信息告知目標程序,當用戶點擊左鍵、右鍵或用戶敲擊鍵盤時,也會有相應的消息,該消 息發(fā)送給指定的窗口 ;其中,可以采用全局鉤子技術(shù)得到該消息,以達到監(jiān)控鼠標鍵盤操作 的目的;監(jiān)控程序通過鉤子技術(shù)收到消息后,將其寫入宏文件中,包括消息類型、消息參數(shù) 等信息,然后在執(zhí)行宏文件的時候,進行讀取解析,并模擬操作系統(tǒng)給目標程序發(fā)送同樣類 型的消息。采用宏錄入的方式經(jīng)過上述過程即可實現(xiàn)自動測試工作。 但是,由于上述宏錄入方式并不關(guān)心被測軟件本身,因而其也具有明顯的缺陷首 先,宏運行時要求被測終端的反應要與宏錄入時完全一樣才能正確使用該功能;比如宏錄 入時測試人員點擊電話號碼進行撥號測試,5秒鐘后接通,通話5秒鐘再掛斷;但是真正使 用該宏進行測試時,很可能由于網(wǎng)絡(luò)側(cè)或其他原因使得撥號后沒有接通,但宏執(zhí)行時過5 秒即發(fā)掛斷命令,因而這樣流程就和預期有所不同了,并且還多發(fā)了一個掛斷命令,這就很 容易對后面繼續(xù)操作造成影響。其次,測試時測試環(huán)境也要前后一致;比如撥號軟件的位置 要求完全一樣,錄入時軟件最大化,執(zhí)行時也要最大化,對應的軟件菜單、工具條、按鈕都要 在同樣的位置,這樣才能保證宏執(zhí)行時點擊的位置是期望的按鈕、菜單的位置。再次,在宏 執(zhí)行時用戶不能進行其他操作,否則會發(fā)生不可預料的事情;比如用戶在測試PC上先執(zhí)行 宏進行測試,同時自己編輯文本寫測試日志,如果此時宏發(fā)送鼠標移動的消息,就會導致用 戶無法正常使用鼠標,如果宏發(fā)送點擊鼠標左鍵的消息,被用戶正在編輯的文本擋住了 ,該 宏也不會再正確的執(zhí)行下去。所以,雖然現(xiàn)有采用宏錄入的方式可以部分的實現(xiàn)自動測試, 但是受多種因素(如被測終端反應、測試環(huán)境、獨立操作等)制約導致其準確率不高,并且 會影響用戶的正常操作。

發(fā)明內(nèi)容
有鑒于此,本發(fā)明實施例提供一種實現(xiàn)自動測試的方法和系統(tǒng),能夠在節(jié)省大量 人力的基礎(chǔ)上提高自動測試過程中的準確性,且不會影響用戶的其他正常操作。
為解決上述問題,本發(fā)明實施例提供的技術(shù)方案如下
—種實現(xiàn)自動測試的方法,其特征在于,包括
A、查找預設(shè)監(jiān)控點對應的窗口 ; B、當查找到該窗口后,獲取該窗口對應的指示信息; C、判斷所述指示信息是否滿足動作條件,如果是,則觸發(fā)測試動作;否則,轉(zhuǎn)步驟 A。
優(yōu)選的,所述步驟A通過以下步驟實現(xiàn)
根據(jù)所述預設(shè)監(jiān)控點確定所述窗口的標題欄; 調(diào)用窗口查找函數(shù)利用所述標題欄對當前開啟的所有程序窗口進行查找。優(yōu)選的,所述窗口查找函數(shù)為Win32函數(shù)中的FindWindow函數(shù)或FindWindowEx函數(shù)。 優(yōu)選的,所述步驟B通過以下步驟實現(xiàn) 當查找到預設(shè)監(jiān)控點對應的窗口后,獲取該窗口的窗口句柄; 利用所述窗口句柄通過調(diào)用函數(shù)得到所述窗口的類型信息; 針對不同的窗口類型通過調(diào)用函數(shù)獲取不同的窗口指示信息。 優(yōu)選的,所述窗口類型包括靜態(tài)控件、列表控件、對話框、按鈕、編輯框和組合框。 優(yōu)選的,當所述窗口為靜態(tài)控件時,調(diào)用Win32的GetWindowText函數(shù)得到該窗口
的文字信息,調(diào)用GetWindowLong獲取該窗口的顯示狀態(tài)。 當所述窗口為列表控件時,通過列表的消息處理函數(shù)得到最新一行的信息文字。
優(yōu)選的,所述步驟C通過以下步驟判斷所述指示信息是否滿足動作條件
查找預設(shè)的動作列表; 將所述動作列表中與動作指令對應的信息與所述指示信息進行匹配,如果匹配, 則確定該指示信息滿足動作條件;否則,不滿足。 優(yōu)選的,當所述預設(shè)監(jiān)控點對應窗口類型為靜態(tài)控件時,檢查該靜態(tài)控件的文字 信息及顯示狀態(tài)在所述動作列表中是否有動作匹配,如果有,則滿足動作條件;否則,不滿 足; 當所述預設(shè)監(jiān)控點對應窗口類型為列表控件時,檢查該列表控件的最新一行文字
信息在所述動作列表中是否有動作匹配,如果有,則滿足動作條件;否則,不滿足。 優(yōu)選的,所述步驟C通過以下步驟實現(xiàn)測試動作的觸發(fā) 根據(jù)窗口標題欄查找動作對象窗口 ; 查找到動作對象窗口后獲取該窗口的窗口句柄; 利用所述窗口的窗口句柄向該窗口發(fā)送模擬動作指令。 優(yōu)選的,當所述模擬動作命令為模擬鼠標動作指令時,在所述對象窗口模擬鼠標 執(zhí)行點擊動作; 當所述模擬動作命令為模擬鍵盤動作指令時,在所述對象窗口模擬鍵盤執(zhí)行輸入 動作。
5
—種實現(xiàn)自動測試的系統(tǒng),包括查找單元、獲取單元和觸發(fā)單元;其中,所述查 找單元用于查找預設(shè)監(jiān)控點對應的窗口 ; 所述獲取單元用于當所述查找單元查找到所述窗口后,獲取該窗口對應的指示信 息; 所述觸發(fā)單元用于判斷所述獲取單元獲取的指示信息是否滿足動作條件,如果 是,則觸發(fā)測試動作;否則,通知所述查找單元繼續(xù)查找。
優(yōu)選的,所述查找單元包括第一處理模塊和第二處理模塊;其中, 所述第一處理模塊用于根據(jù)所述預設(shè)監(jiān)控點確定所述窗口的標題欄; 所述第二處理模塊用于調(diào)用窗口查找函數(shù)利用所述標題欄對當前開啟的所有程
序窗口進行查找,并在查找到所述預設(shè)監(jiān)控點對應的窗口后通知所述獲取單元。
優(yōu)選的,所述獲取單元包括句柄模塊、類型模塊和信息模塊;其中, 所述句柄模塊用于當所述查找單元查找到預設(shè)監(jiān)控點對應的窗口后,獲取該窗口
的窗口句柄; 所述類型模塊用于利用所述句柄模塊獲取的窗口句柄通過調(diào)用函數(shù)得到所述窗 口的類型信息; 所述信息模塊用于針對所述類型模塊得到的不同的窗口類型通過調(diào)用函數(shù)獲取 不同的窗口指示信息。 優(yōu)選的,所述觸發(fā)單元包括判斷模塊和發(fā)送模塊;其中, 所述判斷模塊用于通過查找預設(shè)的動作列表,將所述動作列表中與動作指令對應 的信息與所述獲取單元獲取的指示信息進行匹配,如果匹配,則確定該指示信息滿足動作 條件,通知所述發(fā)送模塊; 所述發(fā)送模塊用于接收所述判斷模塊的通知,根據(jù)窗口標題欄查找動作對象窗 口,當查找到動作對象窗口后獲取該窗口的窗口句柄,利用所述窗口的窗口句柄向該窗口 發(fā)送模擬動作指令。 優(yōu)選的,所述系統(tǒng)還包括執(zhí)行單元,用于當所述模擬動作命令為模擬鼠標動作指 令時,在所述對象窗口模擬鼠標執(zhí)行點擊動作;或者,當所述模擬動作命令為模擬鍵盤動作 指令時,在所述對象窗口模擬鍵盤執(zhí)行輸入動作。 可以看出,采用本發(fā)明實施例的方法和系統(tǒng),通過查找當前所有程序的窗口,當發(fā) 現(xiàn)有某個程序的預設(shè)監(jiān)控點彈出窗口后,根據(jù)該窗口相應的指示信息觸發(fā)測試動作,因該 方式更接近人為進行測試時進行的情形,因而能夠在節(jié)省大量人力的基礎(chǔ)上提高自動測試 過程中的準確性;并且觸發(fā)測試動作采用向指定窗口下發(fā)模擬動作命令來實現(xiàn),因此不會 影響用戶其他的正常操作和其他程序的正常運行;同時,采用本發(fā)明實施例的方法和系統(tǒng) 不需要修改已有測試工具軟件即可完成自動測試工作。


為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可 以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實施例1的方法流程示意圖; 圖2是本發(fā)明實施例中獲取窗口對應指示信息的流程示意圖; 圖3是本發(fā)明實施例中判斷指示信息是否滿足動作條件的流程示意圖; 圖4是本發(fā)明實施例中觸發(fā)測試動作流程示意圖; 圖5是本發(fā)明實施例3的系統(tǒng)結(jié)構(gòu)示意圖。
具體實施例方式
本發(fā)明實施例的基本思想在于通過查找當前所有程序的窗口,當發(fā)現(xiàn)有某個程序 的預設(shè)監(jiān)控點彈出窗口后,根據(jù)該窗口相應的指示信息觸發(fā)測試動作,因該方式更接近人 為進行測試時進行的情形,因而能夠在節(jié)省大量人力的基礎(chǔ)上提高自動測試過程中的準確 性;并且觸發(fā)測試動作采用向指定窗口下發(fā)模擬動作命令來實現(xiàn),因此不會影響用戶其他 的正常操作和其他程序的正常運行。 下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完 整地描述;顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍。
圖1示出了本發(fā)明實施例1的一種實現(xiàn)自動測試的方法,該方法包括
步驟101 :查找預設(shè)監(jiān)控點對應的窗口 ; 具體的,本實施例中所述的預設(shè)監(jiān)控點可以是不同程序的某個需要注意的信息 點;比如網(wǎng)絡(luò)側(cè)儀表測試程序提示需要撥號,則該提示就是一個監(jiān)控點;終端撥號程序的 震鈴提示也是個監(jiān)控點;邏輯上所有值得測試人員關(guān)心的事件都是監(jiān)控點,因而在進行測 試工作前首先根據(jù)需要或者需要監(jiān)控的程序特點預設(shè)若干個監(jiān)控點,并將該監(jiān)控點對應的 信息與相執(zhí)行的動作對應存儲,例如以列表的形式存儲,在此不再贅述。 在查找預設(shè)監(jiān)控點對應的窗口時,首先根據(jù)預設(shè)監(jiān)控點信息確定所述需要查找的 窗口的標題欄,然后再調(diào)用窗口查找函數(shù)利用所述標題欄對當前開啟的所有程序窗口進行 查找;因windows系統(tǒng)中同時運行著很多程序,有著層層疊疊很多窗口 ,這些窗口的直觀的 區(qū)別就是標題欄不同,標題欄可以指示該窗口是什么窗口,因此可以通過該窗口的標題欄 找到所述預設(shè)監(jiān)控點對應的窗口 ;其中,在Window系統(tǒng)環(huán)境下,所述窗口查找函數(shù)主要是 Win32函數(shù)中的FindWindow或FindWindowEx兩個函數(shù),當然對于其他系統(tǒng)環(huán)境,窗口查找 函數(shù)也可以是其他的函數(shù),本文不再贅述;例如,假設(shè)所述預設(shè)監(jiān)控點為某程序通過彈出對 話框提示執(zhí)行何種動作,則根據(jù)該監(jiān)控點確定所述需要查找的窗口的標題欄為"提示",此 時調(diào)用FindWindow或FindWindowEx函數(shù)對當前開啟的所有程序窗口進行查找,當某一窗 口的標題欄為"提示"時,則確定該窗口為所述預設(shè)監(jiān)控點對應的窗口 ;
此外,還可以根據(jù)窗口的標題欄確定當前運行的程序,即根據(jù)窗口標題欄的字樣, 可以區(qū)分出終端撥號程序、網(wǎng)絡(luò)側(cè)儀表程序及跟蹤程序,例如可以通過字符串比較的函數(shù), 如strcmp (szTitle,"撥號程序")strcmp (szTitle,"儀表程序")等判斷區(qū)分當前的運行程 序; 步驟102 :當查找到該窗口后,獲取該窗口對應的指示信息; 具體的,本實施例提出通過下述方式獲取所述窗口對應的指示信息,但本領(lǐng)域技術(shù)人員了解,還可采用其他方式來獲取某一窗口對應的指示信息,并不局限于此;如圖2所 示, 當查找到預設(shè)監(jiān)控點對應的窗口后,在S201中,獲取該窗口的窗口句柄;窗口句 柄是windows內(nèi)部的一種資源,一類內(nèi)部的變量,它和顯示的窗口一一對應,每一個外部 可見的窗口都對應一個句柄,也即對應一個變量值;而后續(xù)對該窗口進行操作時都需要利 用該句柄變量,即該句柄變量為后續(xù)可能操作的前提條件;在S202中,利用所述窗口句柄 通過調(diào)用函數(shù)得到所述窗口的類型信息;例如,通過獲取的監(jiān)控點對應的窗口句柄,利用 GetClassName函數(shù)得到窗口類型信息;目前在Windows系統(tǒng)中可通過該函數(shù)根據(jù)句柄得 至lj className,另夕卜還可調(diào)用GetClassName、 GetNextDlgTabltem或GetNextDlgGroupItem 函數(shù)確定匹配的子窗口 ;其中,所述的窗口類型包括多種形式,如windows自帶的 #32769 (Desktop)桌面類型,#32770 (Dialog)對話框,Button按鈕,Edit編輯框,ComboBox 組合框等;需要注意的是,在Windows系統(tǒng)中一個窗口下面有很多子窗體,而需要獲取的窗 口對應的指示信息,可能對應最深層次的某個窗體,所以上述所述的監(jiān)控點需要細到能獲 取到信息對應的深層窗體;相應的,如果窗口類型是靜態(tài)控件,則在S303中調(diào)用Win32的 GetWindowText函數(shù)得到該靜態(tài)控件的文字信息,調(diào)用GetWindowLong獲取該控件的顯示 狀態(tài),即處于隱藏還是顯示狀態(tài);如果窗口類型是列表控件,則在S304中則通過列表的消 息處理函數(shù)得到最新的一行信息文字; 步驟103 :判斷所述指示信息是否滿足動作條件,如果是,則觸發(fā)測試動作;否則, 轉(zhuǎn)步驟101 ; 具體的,可通過下述方式實現(xiàn)判斷步驟,但并不局限于此,如圖3所示在S301中, 查找預設(shè)的動作列表;所述動作列表中記錄了不同的指示信息和不同的動作命令之間的對 應關(guān)系;將所述動作列表中與動作指令對應的信息與所述指示信息進行匹配,如果匹配,則 確定該指示信息滿足動作條件;否則,不滿足;如在S302中,當所述預設(shè)監(jiān)控點對應窗口類 型為靜態(tài)控件時,檢查該靜態(tài)控件的文字信息及顯示狀態(tài)在所述動作列表中是否有動作匹 配,如果有,則滿足動作條件;否則,不滿足;在S303中,當所述預設(shè)監(jiān)控點對應窗口類型為 列表控件時,檢查該列表控件的最新一行文字信息在所述動作列表中是否有動作匹配,如 果有,則滿足動作條件;否則,不滿足; 在指示信息與動作指令匹配后,如圖4所示,在S401中,根據(jù)窗口標題欄查找動作 對象窗口 ;此查找方式與上述步驟101的查找方式類似,在此不再贅述;在S402中,查找到 動作對象窗口后獲取該窗口的窗口句柄;查找到所述窗口后即可獲知其窗口句柄,具體可 通過現(xiàn)有的Win32函數(shù)功能實現(xiàn),不再贅述;在S403中,利用所述窗口的窗口句柄向該窗口 發(fā)送模擬動作指令;如上所述,對該窗口進行操作時需要利用句柄變量,即該句柄變量為各 種可能操作的前提條件;如調(diào)用PostMessage函數(shù)下發(fā)BM_CLICK消息模擬鼠標點擊狀態(tài), 下發(fā)麗J(EYD0WN消息模擬鍵盤敲擊狀態(tài),當然也可以采用其他封裝方式下發(fā)模擬動作指 令。 以上通過在Windows系統(tǒng)中的具體實現(xiàn)詳細說明了單個模擬動作的處理過程,處 理完動作后繼續(xù)查找下個監(jiān)控點,如此就可完成各個被測程序的動作銜接,滿足自動測試 的目的。 同時,本領(lǐng)域技術(shù)人員應該很容易了解,上述的各種實施方式僅以Windows系統(tǒng)
8為例,而對于其他系統(tǒng)環(huán)境在具體實施時還可以通過其他不同的方式實現(xiàn),具體本文不再 贅述。 下面結(jié)合具體的撥號軟件測試方案來舉例說明該本發(fā)明實施例的測試方法執(zhí)行 該撥號軟件后,首先彈出消息框,提示"開機",該消息框就是監(jiān)控點A,其對應的動作是執(zhí)行 模擬消息按下開機按鈕;按下"開機"后接著彈出開機對話框,提示"Please switch on the UE !",該消息框就是監(jiān)控點B,其對應的動作是啟動撥號軟件;撥號程序啟動后提示用戶輸 入PIN碼,該消息框就是監(jiān)控點C,其對應的動作是模擬鍵盤輸入"1234",然后點擊確認;撥 號成功手機開機后,軟件會繼續(xù)執(zhí)行直到彈出PDP激活命令,該消息框就是監(jiān)控點D,其對 應的動作是先執(zhí)行模擬消息按下確定按鈕,然后點擊撥號軟件的連接因特網(wǎng)按鈕,至此整 個軟件測試流程完畢; 當采用本發(fā)明實施例的自動測試方法進行自動測試時如本發(fā)明實施例2 :首先利 用Spy++程序查找窗口功能得到監(jiān)控點A對應的窗口 ,即先查找標題為"提示"的窗口 ,查找 到該窗口后再獲得該窗口里面的文字字樣"Pleaseswitch on the UE !"和"關(guān)機按鈕",動 作匹配后向關(guān)機窗口發(fā)送模擬動作消息,實現(xiàn)關(guān)機;具體,可通過下述代碼完成查找窗口 、 得到文字信息和按鈕、匹配后發(fā)模擬消息hWnd = : :FindWindow(NULL, 〃提示〃 );〃找最上面的窗口
if(hWnd)
{






開機


到開機
誦D hTitle
::FindWindowEx(hWnd, NULL,
Static",亂L);
if (hTitle)
char szTemp[256] = {0};
GetWindowText(hTitle, szTemp,256);
std::string szCommand = szTemp ;
if(szCommand = = 〃 Please switch off the UE !
)〃如果是要
〃該監(jiān)控點已經(jīng)監(jiān)控到具體信息,然后進行對應的動作
HWND h0K = FindWindowEx(hWnd, NULL, NULL, 〃開機〃 );//找
if (hOK)
為開機窗口發(fā)送模擬鼠標點擊消息
::PostMessage(h0K, BM—CLICK,1, 0); Sle印(100);
::PostMessage (h0K, BM—CLICK, 0, 0); continue 5
9
}
}
} 按下"開機"后對于監(jiān)控點B的處理與上述對于監(jiān)控點A的處理類似,在此不再贅 述;當模擬執(zhí)行所述監(jiān)控點B的動作成功后,即撥號程序啟動后,先查找"PIN碼驗證"窗口, 找到后查找Edit類型的窗口,然后模擬鍵盤動作在該Edit類型的窗口輸入"1234",再向該 Edit類型窗口發(fā)送模擬鼠標點擊消息,以實現(xiàn)模擬鼠標點擊"確認";具體的,可通過如下代 碼完成 hWnd = : :FindWindow(NULL, 〃 PIN碼驗證〃 );〃查找頂端窗口 if(hWnd) { ShowWindow(hWnd, SW_SH0W);〃顯示窗口 HWND hTitle = : :FindWindowEx(hWnd,NULL, 〃 Edit" ,NULL);〃查找edit 框 if (hTitle) { : :PostMessage(hTitle, WM_KEYD0WN, ' 1' ,31);〃輸入1 Sle印(100); : :PostMessage(hTitle, WM_KEYD0WN, ' 2' ,31);〃輸入2 Sle印(100); : :PostMessage(hTitle, WM_KEYD0WN, ' 3' ,31);〃輸入3 Sle印(100); : :PostMessage(hTitle, WM_KEYD0WN, ' 4' ,31);〃輸入4 Sle印(100); HWND hOK = FindWindowEx(hWnd, NULL, NULL, 〃確認〃 ); if (hOK)〃點擊確認,監(jiān)控點動作結(jié)束 { Sle印(500); ::PostMessage(hOK,BM_CLICK,l,O); Sle印(lOO); ::PostMessage(hOK,BM_CLICK,0,0); 〃isWaitSMS = TRUE ; continue ; } } } 當撥號成功手機開機后,利用Spy++程序查找窗口功能得到監(jiān)控點D對應的PDP
激活命令窗口,并采用類似監(jiān)控點A的處理方式向該窗口發(fā)送模擬鼠標點擊動作消息,點 擊該窗口的"確定"按鈕;然后利用3。7++摸索"連接因特網(wǎng)"窗口句柄先查找到頂級窗口標題欄信息,得知標題欄為"TD-SCDMA數(shù)據(jù)卡管理系統(tǒng)(THINKER)",然后查找"連接因特 網(wǎng)"按鈕,在查找未果后從頂級窗口下逐個查看,當從窗口樹中找到該按鈕在一個對話框類 下后,模擬鼠標點擊動作向該對話框發(fā)送消息,實現(xiàn)點擊"連接因特網(wǎng)"按鈕動作,完成全部 測試流程;具體的,從窗口樹中查找"連接因特網(wǎng)"按鈕可采用下面的代碼進行動作 hWnd = : :FindWindow(NULL, 〃 TD-SCDMA數(shù)據(jù)卡管理系統(tǒng)(THINKER) 〃 ); if (hWnd) 〃找到頂級窗口 { ShowWindow(hWnd, SW_SH0W); HWND hTitle = : :FindWindowEx (hWnd, NULL, 〃 #32770〃 , NULL); while (hTitle) 〃找到第一個對話框 { HWND hButton = : :FindWindowEx(hTitle, NULL, NULL, 〃連接因特 網(wǎng)"); if (hButton)〃查看該對話框下是否有"連接因特網(wǎng)"按鈕,有就執(zhí)行動 作 { Sle印(6000); : :PostMessage(hButton, BM_CLICK, l,O);〃執(zhí)行點擊動作 Sle印(200); : :PostMessage(hButton, BM_CLICK,0,0); Sle印(2000); break; } else { 〃沒有按鈕找下個對話框 hTitle = ::FindWindowEx(hWnd,hTitle, 〃 #32770〃 ,NULL); Sle印(lO); continue ; } } } 通過上述四個監(jiān)控點的處理即可達到自動測試的效果;此外,為了更方便現(xiàn)場測
試的需要,可以將監(jiān)控點信息保存起來,測試時先讀取信息而后運行先用3。7++程序得到
監(jiān)控點確定信息,然后將監(jiān)控點界面右面源樹上的節(jié)點拖動到左面目標樹上,并進行配置;
再點擊應用開始自動測試過程,也可將信息保存為文件,以便下次打開運行;當再應用時可
以直接打開文件,然后點擊運行,啟動監(jiān)控點監(jiān)控功能,完成自動測試流程。 可以看出,采用本發(fā)明實施例的方法,通過查找當前所有程序的窗口,當發(fā)現(xiàn)有某
個程序的預設(shè)監(jiān)控點彈出窗口后,根據(jù)該窗口相應的指示信息觸發(fā)測試動作,因該方式更
接近人為進行測試時進行的情形,因而能夠在節(jié)省大量人力的基礎(chǔ)上提高自動測試過程中的準確性;并且觸發(fā)測試動作采用向指定窗口下發(fā)模擬動作命令來實現(xiàn),因此不會影響用 戶其他的正常操作和其他程序的正常運行。 基于上述思想,本發(fā)明實施例3又提出了一種實現(xiàn)自動測試的系統(tǒng),如圖5所示, 該系統(tǒng)500包括查找單元501、獲取單元502和觸發(fā)單元503 ;其中,所述查找單元501用 于查找預設(shè)監(jiān)控點對應的窗口; 所述獲取單元502用于當所述查找單元501查找到所述窗口后,獲取該窗口對應 的指示信息; 所述觸發(fā)單元503用于判斷所述獲取單元502獲取的指示信息是否滿足動作條 件,如果是,則觸發(fā)測試動作;否則,通知所述查找單元501繼續(xù)查找。 優(yōu)選的,所述查找單元501包括第一處理模塊和第二處理模塊;其中,所述第一 處理模塊用于根據(jù)所述預設(shè)監(jiān)控點確定所述窗口的標題欄;所述第二處理模塊用于調(diào)用窗 口查找函數(shù)利用所述標題欄對當前開啟的所有程序窗口進行查找,并在查找到所述預設(shè)監(jiān) 控點對應的窗口后通知所述獲取單元。 此外,所述獲取單元502包括句柄模塊、類型模塊和信息模塊;其中,所述句柄模 塊用于當所述查找單元查找到預設(shè)監(jiān)控點對應的窗口后,獲取該窗口的窗口句柄;所述類 型模塊用于利用所述句柄模塊獲取的窗口句柄通過調(diào)用函數(shù)得到所述窗口的類型信息;所 述信息模塊用于針對所述類型模塊得到的不同的窗口類型通過調(diào)用函數(shù)獲取不同的窗口 指示信息。 除此之外,所述觸發(fā)單元503包括判斷模塊和發(fā)送模塊;其中,所述判斷模塊用于 通過查找預設(shè)的動作列表,將所述動作列表中與動作指令對應的信息與所述獲取單元獲取 的指示信息進行匹配,如果匹配,則確定該指示信息滿足動作條件,通知所述發(fā)送模塊;所 述發(fā)送模塊用于接收所述判斷模塊的通知,根據(jù)窗口標題欄查找動作對象窗口 ,當查找到 動作對象窗口后獲取該窗口的窗口句柄,利用所述窗口的窗口句柄向該窗口發(fā)送模擬動作 指令。 需要注意的是,所述系統(tǒng)還可包括執(zhí)行單元,用于當所述模擬動作命令為模擬鼠 標動作指令時,在所述對象窗口模擬鼠標執(zhí)行點擊動作;或者,當所述模擬動作命令為模擬 鍵盤動作指令時,在所述對象窗口模擬鍵盤執(zhí)行輸入動作。 本領(lǐng)域技術(shù)人員可以理解,可以使用許多不同的工藝和技術(shù)中的任意一種來表示 信息、消息和信號。例如,上述說明中提到過的消息、信息都可以表示為電壓、電流、電磁波、 磁場或磁性粒子、光場或以上任意組合。 專業(yè)人員還可以進一步應能意識到,結(jié)合本文中所公開的實施例描述的各示例的 單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬 件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。 這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應用和設(shè)計約束條件。 專業(yè)技術(shù)人員可以對每個特定的應用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn) 不應認為超出本發(fā)明的范圍。 結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí) 行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機存儲器(RAM)、內(nèi)存、只讀存 儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或技術(shù)
12領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。 對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。 對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的 一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明 將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一 致的最寬的范圍。 以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
一種實現(xiàn)自動測試的方法,其特征在于,包括A、查找預設(shè)監(jiān)控點對應的窗口;B、當查找到該窗口后,獲取該窗口對應的指示信息;C、判斷所述指示信息是否滿足動作條件,如果是,則觸發(fā)測試動作;否則,轉(zhuǎn)步驟A。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟A通過以下步驟實現(xiàn)根據(jù)所述預設(shè)監(jiān)控點確定所述窗口的標題欄;調(diào)用窗口查找函數(shù)利用所述標題欄對當前開啟的所有程序窗口進行查找。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于所述窗口查找函數(shù)為Win32函數(shù)中的FindWindow函數(shù)或FindWindowEx函數(shù)。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟B通過以下步驟實現(xiàn)當查找到預設(shè)監(jiān)控點對應的窗口后,獲取該窗口的窗口句柄;利用所述窗口句柄通過調(diào)用函數(shù)得到所述窗口的類型信息;針對不同的窗口類型通過調(diào)用函數(shù)獲取不同的窗口指示信息。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于所述窗口類型包括靜態(tài)控件、列表控件、對話框、按鈕、編輯框和組合框。
6. 根據(jù)權(quán)利要求4所述的方法,其特征在于當所述窗口為靜態(tài)控件時,調(diào)用Win32的GetWindowText函數(shù)得到該窗口的文字信息,調(diào)用GetWindowLong獲取該窗口的顯示狀態(tài)。當所述窗口為列表控件時,通過列表的消息處理函數(shù)得到最新一行的信息文字。
7. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C通過以下步驟判斷所述指示信息是否滿足動作條件查找預設(shè)的動作列表;將所述動作列表中與動作指令對應的信息與所述指示信息進行匹配,如果匹配,則確定該指示信息滿足動作條件;否則,不滿足。
8. 根據(jù)權(quán)利要求7所述的方法,其特征在于當所述預設(shè)監(jiān)控點對應窗口類型為靜態(tài)控件時,檢查該靜態(tài)控件的文字信息及顯示狀態(tài)在所述動作列表中是否有動作匹配,如果有,則滿足動作條件;否則,不滿足;當所述預設(shè)監(jiān)控點對應窗口類型為列表控件時,檢查該列表控件的最新一行文字信息在所述動作列表中是否有動作匹配,如果有,則滿足動作條件;否則,不滿足。
9. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C通過以下步驟實現(xiàn)測試動作的觸發(fā)根據(jù)窗口標題欄查找動作對象窗口;查找到動作對象窗口后獲取該窗口的窗口句柄;利用所述窗口的窗口句柄向該窗口發(fā)送模擬動作指令。
10. 根據(jù)權(quán)利要求9所述的方法,其特征在于當所述模擬動作命令為模擬鼠標動作指令時,在所述對象窗口模擬鼠標執(zhí)行點擊動作;當所述模擬動作命令為模擬鍵盤動作指令時,在所述對象窗口模擬鍵盤執(zhí)行輸入動作。
11. 一種實現(xiàn)自動測試的系統(tǒng),其特征在于,包括查找單元、獲取單元和觸發(fā)單元;其中,所述查找單元用于查找預設(shè)監(jiān)控點對應的窗口 ;所述獲取單元用于當所述查找單元查找到所述窗口后,獲取該窗口對應的指示信息; 所述觸發(fā)單元用于判斷所述獲取單元獲取的指示信息是否滿足動作條件,如果是,則 觸發(fā)測試動作;否則,通知所述查找單元繼續(xù)查找。
12. 根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述查找單元包括第一處理模塊和第 二處理模塊;其中,所述第一處理模塊用于根據(jù)所述預設(shè)監(jiān)控點確定所述窗口的標題欄; 所述第二處理模塊用于調(diào)用窗口查找函數(shù)利用所述標題欄對當前開啟的所有程序窗 口進行查找,并在查找到所述預設(shè)監(jiān)控點對應的窗口后通知所述獲取單元。
13. 根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述獲取單元包括句柄模塊、類型模 塊和信息模塊;其中,所述句柄模塊用于當所述查找單元查找到預設(shè)監(jiān)控點對應的窗口后,獲取該窗口的窗 口句柄;所述類型模塊用于利用所述句柄模塊獲取的窗口句柄通過調(diào)用函數(shù)得到所述窗口的 類型信息;所述信息模塊用于針對所述類型模塊得到的不同的窗口類型通過調(diào)用函數(shù)獲取不同 的窗口指示信息。
14. 根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述觸發(fā)單元包括判斷模塊和發(fā)送模 塊;其中,所述判斷模塊用于通過查找預設(shè)的動作列表,將所述動作列表中與動作指令對應的信 息與所述獲取單元獲取的指示信息進行匹配,如果匹配,則確定該指示信息滿足動作條件, 通知所述發(fā)送模塊;所述發(fā)送模塊用于接收所述判斷模塊的通知,根據(jù)窗口標題欄查找動作對象窗口 ,當 查找到動作對象窗口后獲取該窗口的窗口句柄,利用所述窗口的窗口句柄向該窗口發(fā)送模 擬動作指令。
15. 根據(jù)權(quán)利要求14所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括執(zhí)行單元,用于當所述 模擬動作命令為模擬鼠標動作指令時,在所述對象窗口模擬鼠標執(zhí)行點擊動作;或者,當所 述模擬動作命令為模擬鍵盤動作指令時,在所述對象窗口模擬鍵盤執(zhí)行輸入動作。
全文摘要
本發(fā)明涉及一種實現(xiàn)自動測試的方法和系統(tǒng),其中所述方法包括A、查找預設(shè)監(jiān)控點對應的窗口;B、當查找到該窗口后,獲取該窗口對應的指示信息;C、判斷所述指示信息是否滿足動作條件,如果是,則觸發(fā)測試動作;否則,轉(zhuǎn)步驟A??梢钥闯觯捎帽景l(fā)明的方法和系統(tǒng),能夠在節(jié)省大量人力的基礎(chǔ)上提高自動測試過程中的準確性;并且不會影響用戶其他的正常操作和其他程序的正常運行;同時,采用本發(fā)明實施例的方法和系統(tǒng)不需要修改已有測試工具軟件即可完成自動測試工作。
文檔編號H04M3/22GK101751329SQ20081024025
公開日2010年6月23日 申請日期2008年12月18日 優(yōu)先權(quán)日2008年12月18日
發(fā)明者劉欣 申請人:大唐移動通信設(shè)備有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1