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

嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法

文檔序號:6561157閱讀:348來源:國知局
專利名稱:嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機(jī)系統(tǒng)領(lǐng)域,特別涉及計算機(jī)嵌入式操作系統(tǒng)自動化測試領(lǐng)域,具體是指一種嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法。
背景技術(shù)
隨著現(xiàn)代計算機(jī)技術(shù)的日益進(jìn)步,人們對于計算機(jī)系統(tǒng)的各種開發(fā)和維護(hù)也變得越來越容易。操作系統(tǒng)接口將硬件細(xì)節(jié)與程序員隔離開來,提供了一組可以方便的對硬件資源進(jìn)行管理和操作的方法。嵌入式操作系統(tǒng)的接口一般包括進(jìn)程、線程、內(nèi)存管理、文件系統(tǒng)等方面,依據(jù)應(yīng)用需要還可以提供網(wǎng)絡(luò)接口和圖形接口等。操作系統(tǒng)的絕大部分接口在系統(tǒng)開發(fā)早期就定義下來了,在嵌入式操作系統(tǒng)開發(fā)過程中,為了確保開發(fā)穩(wěn)步推進(jìn),我們需要對系統(tǒng)接口進(jìn)行不斷的回歸測試?;貧w測試發(fā)生在軟件修改之后,通常會對一天以內(nèi)的代碼修改進(jìn)行一次全面的回歸測試,保證該日開發(fā)的正確性,也便于及時定位和解決該日開發(fā)出現(xiàn)的bug,確保軟件開發(fā)穩(wěn)步推進(jìn)。
最初對操作系統(tǒng)接口的測試通常采用單元測試和集成測試的手段開發(fā)測試用例代碼,然后將開發(fā)完畢的測試代碼納入回歸測試,這樣的測試用例通常達(dá)到成千上萬個,所有測試代碼的可執(zhí)行文件大小達(dá)到成百上千兆。嵌入式操作系統(tǒng)與通用操作系統(tǒng)不同,嵌入式系統(tǒng)的運(yùn)行代碼的開發(fā)、編譯和鏈接是在開發(fā)機(jī)(例如裝有Windows操作系統(tǒng)的計算機(jī))上完成的,需要將可執(zhí)行文件從開發(fā)機(jī)上傳到嵌入式設(shè)備,這樣就存在一個文件傳輸?shù)倪^程,并且它所運(yùn)行的嵌入式設(shè)備一般存儲空間都比較小,難以承載上百兆的測試程序。通常我們想到的最簡單的方法是,手動下載一個測試程序到嵌入式設(shè)備上運(yùn)行,然后查看結(jié)果,刪除該測試文件,然后再下載另一個測試程序繼續(xù)運(yùn)行。
這種測試方法需要人工干預(yù),并且手動運(yùn)行測試用例將花費(fèi)大量的時間,回歸測試周期長,導(dǎo)致了開發(fā)周期的延長,并且操作過程比較枯燥,要想在有限的時間內(nèi)完成一次回歸測試往往需要耗費(fèi)較多的人力和物力。

發(fā)明內(nèi)容
本發(fā)明的目的是克服了上述現(xiàn)有技術(shù)中的缺點(diǎn),提供一種能夠在有限存儲資源的嵌入式設(shè)備上自動完成所有測試用例程序的運(yùn)行、無需人工干預(yù)、節(jié)約人力資源、有效縮短回歸測試周期、保證嵌入式系統(tǒng)開發(fā)快速平穩(wěn)的推進(jìn)、性能穩(wěn)定可靠、適用范圍較為廣泛的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法。
為了實(shí)現(xiàn)上述的目的,本發(fā)明的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法如下該嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,包括開發(fā)機(jī)系統(tǒng)和嵌入式操作系統(tǒng)的宿主測試目標(biāo)機(jī)系統(tǒng),所述的開發(fā)機(jī)系統(tǒng)中的通信裝置通過數(shù)據(jù)鏈路與目標(biāo)機(jī)系統(tǒng)中的通信裝置相連接,其主要特點(diǎn)是,所述的方法包括以下步驟(1)開發(fā)機(jī)系統(tǒng)定期進(jìn)行生成嵌入式操作系統(tǒng)測試對象、測試執(zhí)行腳本和測試用例信息的處理;(2)開發(fā)機(jī)系統(tǒng)通過通信裝置將所述的嵌入式操作系統(tǒng)測試對象傳輸?shù)侥繕?biāo)機(jī)系統(tǒng)中;(3)目標(biāo)機(jī)系統(tǒng)進(jìn)行啟動嵌入式操作系統(tǒng)和從開發(fā)機(jī)系統(tǒng)下載測試執(zhí)行腳本的處理;(4)目標(biāo)機(jī)系統(tǒng)執(zhí)行測試執(zhí)行腳本,從開發(fā)機(jī)系統(tǒng)下載測試用例信息;(5)目標(biāo)機(jī)系統(tǒng)運(yùn)行測試用例信息并產(chǎn)生測試輸出信息;(6)目標(biāo)機(jī)系統(tǒng)通過通信裝置向開發(fā)機(jī)系統(tǒng)傳送該測試輸出信息;(7)目標(biāo)機(jī)系統(tǒng)刪除當(dāng)前測試用例信息和測試輸出信息;(8)目標(biāo)機(jī)系統(tǒng)判斷測試執(zhí)行腳本是否執(zhí)行完畢,如果未執(zhí)行完畢,則返回步驟(4)運(yùn)行;(9)如果執(zhí)行完畢,則目標(biāo)機(jī)系統(tǒng)通過通信裝置向開發(fā)機(jī)系統(tǒng)傳送測試結(jié)束信息;(10)開發(fā)機(jī)系統(tǒng)接收到該測試結(jié)束信息,并將預(yù)設(shè)的標(biāo)準(zhǔn)輸出信息與接收到的測試輸出信息進(jìn)行比較,得到測試運(yùn)行結(jié)果。
該嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法的定期生成嵌入式操作系統(tǒng)測試對象、測試執(zhí)行腳本和測試用例信息包括以下步驟(1)系統(tǒng)定時從源代碼服務(wù)器上下載最新的代碼;(2)將上述代碼編譯生成嵌入式操作系統(tǒng)的鏡像文件和所有的測試用例程序;(3)系統(tǒng)將各測試用例程序所對應(yīng)的執(zhí)行腳本合成并生成測試執(zhí)行腳本。
該嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法的將嵌入式操作系統(tǒng)測試對象傳輸?shù)侥繕?biāo)機(jī)系統(tǒng)中包括以下步驟(1)開發(fā)機(jī)系統(tǒng)通過通信裝置發(fā)送通知重啟標(biāo)志數(shù)據(jù)到目標(biāo)機(jī)系統(tǒng),通知目標(biāo)機(jī)系統(tǒng)重啟;
(2)目標(biāo)機(jī)系統(tǒng)接收到開發(fā)機(jī)系統(tǒng)發(fā)送來的通知重啟標(biāo)志數(shù)據(jù),重新啟動系統(tǒng);(3)開發(fā)機(jī)系統(tǒng)待目標(biāo)機(jī)系統(tǒng)重啟后,通過通訊裝置將嵌入式操作系統(tǒng)的鏡像文件傳輸?shù)侥繕?biāo)機(jī)系統(tǒng)上;(4)目標(biāo)機(jī)系統(tǒng)通過通信裝置接收到開發(fā)機(jī)系統(tǒng)發(fā)送的鏡像文件,并將其燒寫到目標(biāo)機(jī)系統(tǒng)的嵌入式設(shè)備中。
該嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法的源代碼服務(wù)器可以為CVS源代碼管理服務(wù)器、ClearCase源代碼管理服務(wù)器或者SourceSafe源代碼管理服務(wù)器。
該嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法的啟動嵌入式操作系統(tǒng)和從開發(fā)機(jī)系統(tǒng)下載測試執(zhí)行腳本的處理包括以下步驟(1)目標(biāo)機(jī)系統(tǒng)判斷該啟動屬于以下兩種情況中的哪一種新系統(tǒng)燒寫完后首次啟動,新系統(tǒng)因測試運(yùn)行過程中發(fā)生異常而重啟;(2)如果是新系統(tǒng)燒寫完后首次啟動,則目標(biāo)機(jī)系統(tǒng)通過通信裝置從開發(fā)機(jī)系統(tǒng)下載測試執(zhí)行腳本;(3)如果是新系統(tǒng)因測試運(yùn)行過程中發(fā)生異常而重啟,則將測試執(zhí)行腳本中已經(jīng)執(zhí)行過的命令行刪除,只保留未執(zhí)行過的命令行內(nèi)容。
該嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法的目標(biāo)機(jī)系統(tǒng)運(yùn)行測試用例信息包括以下步驟(1)系統(tǒng)在啟動執(zhí)行該測試用例信息之前記錄下當(dāng)前運(yùn)行的程序命令行;(2)系統(tǒng)創(chuàng)建相應(yīng)的測試用例信息的進(jìn)程并開始執(zhí)行,并在執(zhí)行測試用例進(jìn)程的過程中實(shí)時監(jiān)控各種異常情況的出現(xiàn);(3)如果測試用例進(jìn)程的運(yùn)行使得系統(tǒng)陷入死鎖,則系統(tǒng)將殺死在一段特定時間后還沒有運(yùn)行完畢的進(jìn)程,若殺死該進(jìn)程成功,則繼續(xù)運(yùn)行下一個命令行;若殺死該進(jìn)程失敗,則進(jìn)行系統(tǒng)重啟;(4)如果測試用例進(jìn)程的運(yùn)行使得系統(tǒng)陷入調(diào)試狀態(tài),則系統(tǒng)將殺死該進(jìn)程,若殺死該進(jìn)程成功,則繼續(xù)運(yùn)行下一個命令行;若殺死該進(jìn)程失敗,則進(jìn)行系統(tǒng)重啟;(5)如果測試用例進(jìn)程的運(yùn)行使得系統(tǒng)內(nèi)存不足,若發(fā)現(xiàn)系統(tǒng)內(nèi)存低于系統(tǒng)預(yù)設(shè)值,則進(jìn)行系統(tǒng)重啟。
該嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法中,通過在系統(tǒng)的開發(fā)代碼中添加的經(jīng)過條件編譯控制的死鎖監(jiān)控代碼、調(diào)試狀態(tài)監(jiān)控代碼、內(nèi)存監(jiān)控代碼進(jìn)行異常情況的實(shí)時監(jiān)控。
該嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法的測試結(jié)束信息為測試運(yùn)行結(jié)束標(biāo)志文件。
該嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法的標(biāo)準(zhǔn)輸出信息為標(biāo)準(zhǔn)輸出文件,所述的測試輸出信息為測試輸出文件。
該嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法的將預(yù)設(shè)的標(biāo)準(zhǔn)輸出信息與接收到的測試輸出信息進(jìn)行比較為使用文件比較工具將預(yù)設(shè)的標(biāo)準(zhǔn)輸出文件與接收到的測試輸出文件進(jìn)行比較。
采用了該發(fā)明的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,由于在開發(fā)機(jī)系統(tǒng)上實(shí)現(xiàn)了自動編譯代碼,并通知目標(biāo)機(jī)系統(tǒng)開始測試,且自動上傳操作系統(tǒng)鏡像文件和測試用例程序,自動下載測試輸出文件;同時,在目標(biāo)機(jī)系統(tǒng)上實(shí)現(xiàn)了自動下載、運(yùn)行和刪除測試程序,上傳測試輸出文件,自動處理各種系統(tǒng)異常,并保證異常處理之后測試執(zhí)行腳本能夠繼續(xù)運(yùn)行下一個測試程序,最后通知開發(fā)機(jī)結(jié)束測試,從而實(shí)現(xiàn)了在有限存儲資源的嵌入式設(shè)備上進(jìn)行嵌入式操作系統(tǒng)接口測試的自動化運(yùn)行,無需人工干預(yù),節(jié)約了人力資源,有效縮短了回歸測試的周期,保證嵌入式系統(tǒng)開發(fā)快速平穩(wěn)的推進(jìn),性能穩(wěn)定可靠。不僅如此,本發(fā)明的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法并不限于操作系統(tǒng)接口,對于嵌入式操作系統(tǒng)之上的應(yīng)用接口的測試也同樣適用,能夠?yàn)閼?yīng)用開發(fā)帶來益處,適用范圍較為廣泛,為嵌入式系統(tǒng)及其上層軟件的進(jìn)一步發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。


圖1為本發(fā)明的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法的整體測試框架示意圖。
圖2為本發(fā)明的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法的目標(biāo)機(jī)系統(tǒng)的測試過程示意圖。
圖3為本發(fā)明的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法的開發(fā)機(jī)系統(tǒng)和目標(biāo)機(jī)系統(tǒng)之間進(jìn)行文件傳輸?shù)倪^程示意圖。
具體實(shí)施例方式
為了能夠更清楚地理解本發(fā)明的技術(shù)內(nèi)容,特舉以下實(shí)施例詳細(xì)說明。
請參閱圖1至圖3所示,該嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,包括開發(fā)機(jī)系統(tǒng)和嵌入式操作系統(tǒng)的宿主測試目標(biāo)機(jī)系統(tǒng),所述的開發(fā)機(jī)系統(tǒng)中的通信裝置通過數(shù)據(jù)鏈路與目標(biāo)機(jī)系統(tǒng)中的通信裝置相連接,其中,包括以下步驟(1)開發(fā)機(jī)系統(tǒng)定期進(jìn)行生成嵌入式操作系統(tǒng)測試對象、測試執(zhí)行腳本和測試用例信息的處理,包括以下步驟(a)系統(tǒng)定時從源代碼服務(wù)器上下載最新的代碼,該源代碼服務(wù)器可以為CVS源代碼管理服務(wù)器、ClearCase源代碼管理服務(wù)器或者SourceSafe源代碼管理服務(wù)器;(b)將上述代碼編譯生成嵌入式操作系統(tǒng)的鏡像文件和所有的測試用例程序;(c)系統(tǒng)將各測試用例程序所對應(yīng)的執(zhí)行腳本合成并生成測試執(zhí)行腳本;(2)開發(fā)機(jī)系統(tǒng)通過通信裝置將所述的嵌入式操作系統(tǒng)測試對象傳輸?shù)侥繕?biāo)機(jī)系統(tǒng)中,包括以下步驟(a)開發(fā)機(jī)系統(tǒng)通過通信裝置發(fā)送通知重啟標(biāo)志數(shù)據(jù)到目標(biāo)機(jī)系統(tǒng),通知目標(biāo)機(jī)系統(tǒng)重啟;(b)目標(biāo)機(jī)系統(tǒng)接收到開發(fā)機(jī)系統(tǒng)發(fā)送來的通知重啟標(biāo)志數(shù)據(jù),重新啟動系統(tǒng);(c)開發(fā)機(jī)系統(tǒng)待目標(biāo)機(jī)系統(tǒng)重啟后,通過通訊裝置將嵌入式操作系統(tǒng)的鏡像文件傳輸?shù)侥繕?biāo)機(jī)系統(tǒng)上;(d)目標(biāo)機(jī)系統(tǒng)通過通信裝置接收到開發(fā)機(jī)系統(tǒng)發(fā)送的鏡像文件,并將其燒寫到目標(biāo)機(jī)系統(tǒng)的嵌入式設(shè)備中;(3)目標(biāo)機(jī)系統(tǒng)進(jìn)行啟動嵌入式操作系統(tǒng)和從開發(fā)機(jī)系統(tǒng)下載測試執(zhí)行腳本的處理,包括以下步驟(a)目標(biāo)機(jī)系統(tǒng)判斷該啟動屬于以下兩種情況中的哪一種新系統(tǒng)燒寫完后首次啟動、新系統(tǒng)因測試運(yùn)行過程中發(fā)生異常而重啟;(b)如果是新系統(tǒng)燒寫完后首次啟動,則目標(biāo)機(jī)系統(tǒng)通過通信裝置從開發(fā)機(jī)系統(tǒng)下載測試執(zhí)行腳本;(c)如果是新系統(tǒng)因測試運(yùn)行過程中發(fā)生異常而重啟,則將測試執(zhí)行腳本中已經(jīng)執(zhí)行過的命令行刪除,只保留未執(zhí)行過的命令行內(nèi)容;(4)目標(biāo)機(jī)系統(tǒng)執(zhí)行測試執(zhí)行腳本,從開發(fā)機(jī)系統(tǒng)下載測試用例信息;(5)目標(biāo)機(jī)系統(tǒng)運(yùn)行測試用例信息并產(chǎn)生測試輸出信息,包括以下步驟(a)系統(tǒng)在啟動執(zhí)行該測試用例信息之前記錄下當(dāng)前運(yùn)行的程序命令行;(b)系統(tǒng)創(chuàng)建相應(yīng)的測試用例信息的進(jìn)程并開始執(zhí)行,并在執(zhí)行測試用例進(jìn)程的過程中實(shí)時監(jiān)控各種異常情況的出現(xiàn);(c)如果測試用例進(jìn)程的運(yùn)行使得系統(tǒng)陷入死鎖,則系統(tǒng)將殺死在一段特定時間后還沒有運(yùn)行完畢的進(jìn)程,若殺死該進(jìn)程成功,則繼續(xù)運(yùn)行下一個命令行;若殺死該進(jìn)程失敗,則進(jìn)行系統(tǒng)重啟;
(d)如果測試用例進(jìn)程的運(yùn)行使得系統(tǒng)陷入調(diào)試狀態(tài),則系統(tǒng)將殺死該進(jìn)程,若殺死該進(jìn)程成功,則繼續(xù)運(yùn)行下一個命令行;若殺死該進(jìn)程失敗,則進(jìn)行系統(tǒng)重啟;(e)如果測試用例進(jìn)程的運(yùn)行使得系統(tǒng)內(nèi)存不足,若發(fā)現(xiàn)系統(tǒng)內(nèi)存低于系統(tǒng)預(yù)設(shè)值,則進(jìn)行系統(tǒng)重啟;其中,可以通過在系統(tǒng)的開發(fā)代碼中添加的經(jīng)過條件編譯控制的死鎖監(jiān)控代碼、調(diào)試狀態(tài)監(jiān)控代碼、內(nèi)存監(jiān)控代碼進(jìn)行異常情況的實(shí)時監(jiān)控。
(6)目標(biāo)機(jī)系統(tǒng)通過通信裝置向開發(fā)機(jī)系統(tǒng)傳送該測試輸出信息;(7)目標(biāo)機(jī)系統(tǒng)刪除當(dāng)前測試用例信息和測試輸出信息;(8)目標(biāo)機(jī)系統(tǒng)判斷測試執(zhí)行腳本是否執(zhí)行完畢,如果未執(zhí)行完畢,則返回步驟(4)運(yùn)行;(9)如果執(zhí)行完畢,則目標(biāo)機(jī)系統(tǒng)通過通信裝置向開發(fā)機(jī)系統(tǒng)傳送測試結(jié)束信息,該測試結(jié)束信息為測試運(yùn)行結(jié)束標(biāo)志文件;(10)開發(fā)機(jī)系統(tǒng)接收到該測試結(jié)束信息,并將預(yù)設(shè)的標(biāo)準(zhǔn)輸出信息與接收到的測試輸出信息進(jìn)行比較,得到測試運(yùn)行結(jié)果,其中,該標(biāo)準(zhǔn)輸出信息為標(biāo)準(zhǔn)輸出文件,所述的測試輸出信息為測試輸出文件,將預(yù)設(shè)的標(biāo)準(zhǔn)輸出信息與接收到的測試輸出信息進(jìn)行比較為使用文件比較工具將預(yù)設(shè)的標(biāo)準(zhǔn)輸出文件與接收到的測試輸出文件進(jìn)行比較。
在實(shí)際使用當(dāng)中,本發(fā)明的嵌入式操作系統(tǒng)接口測試的自動化運(yùn)行方法,由開發(fā)機(jī)和目標(biāo)機(jī)(即嵌入式設(shè)備)合作完成開發(fā)機(jī)編譯出所有的測試運(yùn)行文件,開發(fā)機(jī)和目標(biāo)機(jī)之間采用通訊設(shè)備進(jìn)行文件的上傳和下載,目標(biāo)機(jī)自動化對每個測試用例依次進(jìn)行測試用例程序的下載、運(yùn)行,上傳測試輸出文件,刪除測試程序和所生成的文件;嵌入式操作系統(tǒng)自動處理測試程序運(yùn)行過程中可能出現(xiàn)的各種系統(tǒng)異常情況,保證后繼測試程序的自動繼續(xù)運(yùn)行。這樣便可以在有限存儲資源的嵌入式設(shè)備上自動完成所有測試用例程序的運(yùn)行,最后在開發(fā)機(jī)端使用文件比較工具將目標(biāo)機(jī)上傳的測試輸出文件與標(biāo)準(zhǔn)輸出文件進(jìn)行比較,獲得測試結(jié)果。
上述測試用例程序至少具有(1)每個測試用例程序?qū)?yīng)一個標(biāo)準(zhǔn)輸出文件,記錄了該測試用例程序正確運(yùn)行后寫入文件的結(jié)果,這是在初次運(yùn)行測試用例程序時保存下來的。
(2)測試用例程序每次在回歸測試中運(yùn)行結(jié)束后都會生成一個與標(biāo)準(zhǔn)輸出文件同名的輸出文件,記錄當(dāng)次的運(yùn)行結(jié)果,稱為測試輸出文件,通過測試輸出文件和標(biāo)準(zhǔn)輸出文件的比較我們可以得知該測試用例在回歸測試中是否運(yùn)行正確。
(3)需要保證各個測試用例程序的可執(zhí)行文件名各不相同,避免編譯后造成同名覆蓋,以及運(yùn)行生成的輸出文件的名字各不相同,避免某個測試用例運(yùn)行的輸出文件被其它測試用例運(yùn)行的輸出文件覆蓋。
(4)每個測試用例代碼都放在不同的目錄中,一個測試用例對應(yīng)一個執(zhí)行腳本,該執(zhí)行腳本在編寫用例時完成,包括五個命令行,依次為下載測試程序、運(yùn)行測試程序、上傳測試輸出文件、刪除測試程序、刪除測試輸出文件。所有測試用例的執(zhí)行腳本采用相同的名字命名。
簡單而言,接口方法的執(zhí)行會出現(xiàn)正確或錯誤的兩種情況,執(zhí)行正確與否都需要向輸出文件寫入一些語句,而且執(zhí)行正確和執(zhí)行錯誤寫入輸出文件的語句是不同的,因而可以通過標(biāo)準(zhǔn)輸出文件和回歸測試中運(yùn)行生成的輸出文件的比較來判斷測試用例運(yùn)行是否正確。各測試用例都有一個同名的執(zhí)行腳本,所有的執(zhí)行腳本可合成一個大的執(zhí)行腳本,作為測試執(zhí)行腳本。如果某個用例出錯了就注掉相應(yīng)的執(zhí)行腳本,沒有必要再次運(yùn)行,直到缺陷(bug)修復(fù)后再修改它的執(zhí)行腳本,加入測試中運(yùn)行。
其中,上述的目標(biāo)機(jī)至少具有●通訊設(shè)備,可與開發(fā)機(jī)建立連接進(jìn)行數(shù)據(jù)通訊;●對應(yīng)的嵌入式操作系統(tǒng)具備該通訊設(shè)備的驅(qū)動程序,可實(shí)現(xiàn)一個傳輸工具,利用該設(shè)備與開發(fā)機(jī)進(jìn)行文件傳輸;●對應(yīng)的嵌入式操作系統(tǒng)至少具備控制臺和文件系統(tǒng),可進(jìn)行各種文件操作,可采用批處理文件運(yùn)行程序。
而上述的開發(fā)機(jī)至少具有●通訊設(shè)備,可與目標(biāo)機(jī)建立連接進(jìn)行數(shù)據(jù)通訊;●對應(yīng)的操作系統(tǒng)具備該通訊設(shè)備驅(qū)動程序,可實(shí)現(xiàn)一個傳輸工具,利用該設(shè)備與目標(biāo)機(jī)進(jìn)行文件傳輸;●可在開發(fā)機(jī)系統(tǒng)平臺上開發(fā)代碼以及編譯生成目標(biāo)機(jī)代碼。
實(shí)現(xiàn)本發(fā)明的嵌入式操作系統(tǒng)接口測試的自動化運(yùn)行方法的步驟如下1、開發(fā)機(jī)端(1)定時從源代碼服務(wù)器上下載代碼并編譯生成最新版本嵌入式操作系統(tǒng)的鏡像文件,以及所有的測試用例程序;(2)將各測試用例執(zhí)行腳本合成為“測試執(zhí)行腳本”;(3)通過通訊設(shè)備發(fā)送通知重啟標(biāo)志數(shù)據(jù)給目標(biāo)機(jī)的守候程序通知目標(biāo)機(jī)重啟系統(tǒng);
(4)等候一定時間待目標(biāo)機(jī)重啟后,通過通訊設(shè)備將系統(tǒng)鏡像文件傳輸?shù)侥繕?biāo)機(jī)上進(jìn)行燒寫;(5)守候上傳目標(biāo)機(jī)所需的測試執(zhí)行腳本或測試用例程序,守候接收目標(biāo)機(jī)發(fā)送來的測試輸出文件和測試運(yùn)行結(jié)束標(biāo)志文件。
(6)接收到目標(biāo)機(jī)發(fā)送來的測試運(yùn)行結(jié)束標(biāo)志文件,結(jié)束文件傳輸,使用比較工具比較標(biāo)準(zhǔn)輸出文件與測試輸出文件得到測試運(yùn)行結(jié)果。
2、目標(biāo)機(jī)端(1)目標(biāo)機(jī)上運(yùn)行舊版本的嵌入式操作系統(tǒng),其上執(zhí)行一個守候程序一直在循環(huán)讀取通訊設(shè)備數(shù)據(jù),當(dāng)接收到開發(fā)機(jī)發(fā)送來的通知重啟標(biāo)志數(shù)據(jù)時便重新啟動系統(tǒng),并準(zhǔn)備接收開發(fā)機(jī)發(fā)送的鏡像文件;(2)目標(biāo)機(jī)通過通訊設(shè)備接收鏡像文件并燒寫到嵌入式設(shè)備上;(3)啟動嵌入式操作系統(tǒng),在控制臺下會自動調(diào)用一個批處理文件運(yùn)行,該批處理文件執(zhí)行如下操作A、系統(tǒng)啟動可分為兩種情況新系統(tǒng)燒寫完后首次啟動和新系統(tǒng)因測試運(yùn)行過程中發(fā)生異常而重啟。該步驟針對這兩種不同的情況進(jìn)行不同的處理如果是新系統(tǒng)燒寫完后首次啟動,則使用傳輸程序從開發(fā)機(jī)下載“測試執(zhí)行腳本”;如果新系統(tǒng)因測試運(yùn)行過程中發(fā)生異常而重啟,則依據(jù)“命令行記錄文件”中記錄的命令行,將測試執(zhí)行腳本從該命令行以上包括該命令行在內(nèi)的命令行刪除,只保留該命令行往下的命令行內(nèi)容。
“命令行記錄文件”記錄了新系統(tǒng)因出現(xiàn)異常重啟之前最后執(zhí)行的命令行,是該命令行的執(zhí)行導(dǎo)致系統(tǒng)重啟。由于測試執(zhí)行腳本是依次執(zhí)行命令行的,依據(jù)“命令行記錄文件”中記錄的命令行切除測試執(zhí)行腳本里已經(jīng)執(zhí)行過的命令行,從而保證測試從后繼未執(zhí)行過的命令行開始執(zhí)行。
B、調(diào)用“測試執(zhí)行腳本”運(yùn)行,循環(huán)執(zhí)行如下步驟直到運(yùn)行完所有的命令行(循環(huán)執(zhí)行過程請參閱圖2所示)a)使用傳輸程序從開發(fā)機(jī)下載一個測試用例程序;b)控制臺在啟動執(zhí)行該測試用例程序之前記錄下當(dāng)前運(yùn)行的程序命令行到命令行記錄文件中。該文件每次都以寫的方式打開,而非追加的方式,因此不論控制臺執(zhí)行多少次打開寫入該文件的操作,該文件都只記錄最后一次打開寫入的內(nèi)容。
c)控制臺創(chuàng)建該測試用例程序的進(jìn)程并開始執(zhí)行。在執(zhí)行測試用例程序過程中可能會出現(xiàn)各種異常情況,針對不同的異常情況采取不同的自動化處理手段●陷入死鎖(Deadlock)——測試代碼的運(yùn)行可能會造成死鎖,若不加處理就會阻礙后繼測試代碼的運(yùn)行。系統(tǒng)可監(jiān)控該進(jìn)程的運(yùn)行,會自動殺死在一段特定時間后還沒有運(yùn)行完畢的進(jìn)程,若殺死該進(jìn)程成功則繼續(xù)運(yùn)行下一個命令行,若殺死該進(jìn)程失敗則重啟系統(tǒng),重啟之前該命令行已被控制臺記錄在命令行記錄文件中。
●陷入調(diào)試狀態(tài)(Debug)——測試代碼在運(yùn)行過程中可能會陷入debug,若不加處理就會阻礙后繼測試代碼的運(yùn)行。陷入debug后,系統(tǒng)就會自動嘗試殺死該進(jìn)程,若殺死該進(jìn)程成功則繼續(xù)運(yùn)行下一個命令行,若殺死該進(jìn)程失敗則自動重啟系統(tǒng),重啟之前該命令行已被控制臺記錄在命令行記錄文件中。
●內(nèi)存不足(Out of Memory)——如果系統(tǒng)存在內(nèi)存泄露,執(zhí)行某些消耗內(nèi)存的測試程序可能會導(dǎo)致可用內(nèi)存不足,此時若繼續(xù)運(yùn)行其它測試程序就會出現(xiàn)因內(nèi)存不足導(dǎo)致運(yùn)行失敗的情況,而該錯誤是上一個測試程序造成的,因此控制臺在每運(yùn)行一個測試用例程序之前都有必要對系統(tǒng)內(nèi)存進(jìn)行監(jiān)測,若發(fā)現(xiàn)系統(tǒng)內(nèi)存低于某個指定值,則重啟系統(tǒng),重啟之前導(dǎo)致內(nèi)存不足的測試程序運(yùn)行命令行已被控制臺記錄在命令行記錄文件中。
若測試用例執(zhí)行過程中沒有出現(xiàn)異常情況,則繼續(xù)執(zhí)行以下步驟。
d)等待該測試用例程序運(yùn)行完畢,向開發(fā)機(jī)上傳測試輸出文件;e)刪除測試用例程序和測試輸出文件;C、上傳測試結(jié)束標(biāo)志文件,通知開發(fā)機(jī)測試結(jié)束。
上述為了實(shí)現(xiàn)自動化異常處理過程,會在系統(tǒng)的開發(fā)代碼中添加的一些測試專用的代碼,例如死鎖監(jiān)控代碼以及內(nèi)存監(jiān)控代碼等,這些代碼經(jīng)過條件編譯控制僅在回歸測試時才被編譯使用,保證開發(fā)代碼和測試代碼的獨(dú)立。
上述所有步驟輔以腳本語言都可以實(shí)現(xiàn)自動運(yùn)行,并且專門為嵌入式操作系統(tǒng)實(shí)現(xiàn)了自動處理異常的功能,因而能夠自動完成所有測試用例的執(zhí)行,無需人工干預(yù)。
以下結(jié)合

以及具體實(shí)例對本發(fā)明作進(jìn)一步的詳細(xì)說明。
本發(fā)明可以在Elastos嵌入式操作系統(tǒng)及其支持的嵌入式設(shè)備上實(shí)現(xiàn)接口測試的自動化運(yùn)行。Elastos是32位的嵌入式操作系統(tǒng),其包含進(jìn)程、線程等系統(tǒng)API以及圖形系統(tǒng)、文件系統(tǒng)和網(wǎng)絡(luò)系統(tǒng)等系統(tǒng)服務(wù)。Elastos可以廣泛應(yīng)用于工業(yè)裝備、信息家電、汽車電子、手持設(shè)備等領(lǐng)域的各種嵌入式設(shè)備。這里所述的目標(biāo)機(jī)是運(yùn)行Elastos的ARM嵌入式設(shè)備,所述的開發(fā)機(jī)是裝有Windows2000操作系統(tǒng)的計算機(jī),通訊設(shè)備采用嵌入式開發(fā)中常用的串口設(shè)備。
首先介紹該自動化測試實(shí)例中用到的一些工具軟件,包括(1)CVS工具。CVS是一套開源的源代碼管理軟件,采用CVS工具可以從CVS源代碼服務(wù)器上自動下載所需的源代碼。Elastos的各種相關(guān)源代碼在開發(fā)過程中都被Checkin到CVS服務(wù)器上,測試時可從該服務(wù)器上Checkout最新版本的Elastos及其測試代碼。
(2)st/stt文件傳輸工具。st/stt是采用串口驅(qū)動實(shí)現(xiàn)的一套用于文件上傳和下載的工具,文件上傳即讀取文件數(shù)據(jù)并寫入串口,下載即讀取串口收到的文件數(shù)據(jù)重新寫入文件。st運(yùn)行于目標(biāo)機(jī),stt運(yùn)行于開發(fā)機(jī)。st/stt協(xié)同工作完成文件傳輸。首先開發(fā)機(jī)端運(yùn)行stt守候串口讀寫并進(jìn)行相應(yīng)的文件寫讀操作,目標(biāo)機(jī)端運(yùn)行命令行“st FileName”表示從開發(fā)機(jī)下載FileName文件,運(yùn)行命令行“st^FileName”表示上傳FileName文件至開發(fā)機(jī)。傳輸過程請參閱圖3所示。
(3)armsys鏡像文件燒寫工具。在開發(fā)機(jī)上運(yùn)行命令行“armsys/w elastos.img”即采用armsys將Elastos的鏡像文件elastos.img通過串口(默認(rèn)串口1)傳輸?shù)侥繕?biāo)機(jī)上并寫入目標(biāo)機(jī)RAM,燒寫成功后即可啟動Elastos。
(4)wait/notify等待/通知工具。采用armsys燒寫鏡像文件的步驟是開發(fā)機(jī)先執(zhí)行armsys命令行,然后重啟目標(biāo)機(jī)系統(tǒng)才開始鏡像文件的傳輸。為了達(dá)到自動化操作的目,實(shí)現(xiàn)了wait/notify等待通知工具。該工具也是采用串口驅(qū)動實(shí)現(xiàn)的。目標(biāo)機(jī)運(yùn)行wait通過循環(huán)讀取串口數(shù)據(jù)守候開發(fā)機(jī)發(fā)送來特殊的數(shù)據(jù)才結(jié)束等待,開發(fā)機(jī)執(zhí)行notify往串口寫特殊數(shù)據(jù),通知目標(biāo)機(jī)結(jié)束wait并重新啟動,以便燒寫系統(tǒng)。
(5)cutbat批處理剪切工具。該工具依據(jù)命令行記錄文件中記錄的命令行,將測試執(zhí)行腳本runtest.bat從該命令行以上包括該命令行在內(nèi)的命令行刪除,只保留該命令行往下的命令行內(nèi)容。
(6)Windows Scheduled Tasks計劃任務(wù)。開發(fā)機(jī)采用Windows計劃任務(wù)功能實(shí)現(xiàn)定時執(zhí)行一個批處理腳本。
(7)Windows windiff文件比較工具。windiff用于比較測試標(biāo)準(zhǔn)輸出文件和測試生成的輸出文件,獲得測試結(jié)果。
自動化測試前的準(zhǔn)備將目標(biāo)機(jī)與開發(fā)機(jī)采用串口相連,目標(biāo)機(jī)系統(tǒng)運(yùn)行wait命令等待開發(fā)機(jī)通知;配置好Windows計劃任務(wù)。
自動化測試流程如下步驟1開發(fā)機(jī)定時執(zhí)行計劃任務(wù)的批處理腳本,該腳本先進(jìn)行以下操作
步驟1.1使用CVS工具下載Elastos系統(tǒng)以及測試源代碼;步驟1.2進(jìn)入Elastos SDK開發(fā)環(huán)境編譯系統(tǒng)和測試源代碼,編譯后所有目標(biāo)文件生成在bin目錄下;步驟1.3將各測試用例執(zhí)行腳本合成為測試執(zhí)行腳本runtest.bat,使用copy命令將runtest.bat拷貝一份到bin目錄下,并將當(dāng)前目錄切換到bin目錄;步驟1.4執(zhí)行notify命令通知目標(biāo)機(jī)重啟;步驟1.5執(zhí)行“armsys/w elastos.img”命令等待開始燒寫鏡像文件;步驟2目標(biāo)機(jī)串口接收到notify發(fā)來的重啟標(biāo)志數(shù)據(jù),結(jié)束wait,等待5秒后重新啟動;步驟3開發(fā)機(jī)armsys將elastos.img上傳給目標(biāo)機(jī),之后開發(fā)機(jī)運(yùn)行stt,守候串口讀寫傳輸文件;步驟4目標(biāo)機(jī)接收并燒寫elastos.img文件后自動啟動,進(jìn)入系統(tǒng)控制臺后會自動調(diào)用一個批處理文件autorun.bat運(yùn)行,autorun.bat執(zhí)行如下操作步驟4.1系統(tǒng)啟動可分為兩種情況新系統(tǒng)燒寫完后首次啟動和新系統(tǒng)因測試運(yùn)行過程中發(fā)生異常而重啟。該步驟針對這兩種不同的情況進(jìn)行不同的處理如果新系統(tǒng)燒寫完第一次啟動,則運(yùn)行命令行“st runtest.bat”從開發(fā)機(jī)下載測試執(zhí)行腳本runtest.bat;如果新系統(tǒng)因測試運(yùn)行過程中發(fā)生異常而重啟,則運(yùn)行cutbat,依據(jù)命令行記錄文件runcmd.log中記錄的命令行,將runtest.bat從該命令行以上包括該命令行在內(nèi)的命令行刪除,只保留該命令行往下的命令行內(nèi)容。見如下批處理命令if exist runcmd.log(cutbat.exe runtest.bat)if not exist runcmd.log(st runtest.bat)由于runcmd.log是運(yùn)行測試時生成的,如果啟動時發(fā)現(xiàn)存在runcmd.log文件則表示本次啟動是由于測試運(yùn)行過程中發(fā)生異常而重啟的,需要調(diào)用cutbat;否則是系統(tǒng)燒寫完第一次啟動,需要下載runtest.bat文件。
步驟4.2調(diào)用測試執(zhí)行腳本runtest.bat運(yùn)行,循環(huán)執(zhí)行如下步驟直到執(zhí)行完所有的命令行步驟4.2.1使用st工具從開發(fā)機(jī)下載一個測試用例程序;步驟4.2.2控制臺獲取當(dāng)前系統(tǒng)可用內(nèi)存值,如果可用內(nèi)存值低于某個內(nèi)存限制值(例如限制最小可用內(nèi)存為500頁),則重啟系統(tǒng),否則繼續(xù)運(yùn)行。這樣便解決了測試過程中內(nèi)存不足的異常;
步驟4.2.3控制臺記錄下當(dāng)前運(yùn)行的程序命令行到runcmd.log文件中,即調(diào)用如下函數(shù)執(zhí)行void LogCmdLine(){wchar_t szFullName[_MAX_PATH];
//以寫方式打開空文件runcmd.log,若該文件存在,清空其內(nèi)容FILE*pfout=_wfopen(L"runcmd.log",L"w");
assert(pfout!=NULL);
//記錄運(yùn)行命令行至文件中fwprintf(pfout,L"%s",g_wszCmdLine);
fclose(pfout);
}其中“g_wszCmdLine”是控制臺解析runtest.bat獲得的當(dāng)前運(yùn)行的命令行。
步驟4.2.4控制臺啟動死鎖監(jiān)控程序,開始進(jìn)入重啟倒計時,即調(diào)用如下函數(shù)執(zhí)行void StartRebootCountDown(){ECODE ec;
IDriver*pTestingDriver;
//獲取監(jiān)控服務(wù)ec=EzFindService(L"device:testingserver",(IObject**)&pTestingDriver);
if(FAILED(ec)){printf("Error:EzFindService testingserver failed ec=0x%x\n",ec);
HaltTesting();
}//最大運(yùn)行時間為300秒UINT uMaxTime=300000;
//再加10秒的等待時間,即最大運(yùn)行時間到來后,有10秒時間殺死死鎖進(jìn)//程,若殺死失敗,10秒后將重啟系統(tǒng)uMaxTime+=10000;
EzByteBuf_Box ezbbTimeOut(&uMaxTime,wcslen(wszMaxTime)+1);
//開始重啟倒計時pTestingDriver->Control(TSCommand_StartRebootCountDown,ezbbTimeOut,EZBYTEBUF_NULL,NULL);
pTestingDriver->Release();
}該函數(shù)中“devicetestingserver”服務(wù)是在系統(tǒng)內(nèi)核中實(shí)現(xiàn)的專門為測試提供的一種服務(wù)。Elastos系統(tǒng)提供定時器例程(Timer),可在指定的一段時間之后執(zhí)行它的回調(diào)函數(shù),Timer創(chuàng)建后回調(diào)函數(shù)以內(nèi)核線程的形式存在。testingserver利用Timer的這種特性,在啟動測試進(jìn)程之前設(shè)置Timer在310秒(該時間可設(shè)置為其它值,其中300秒為測試用例進(jìn)程最大運(yùn)行時間,另外10秒等待系統(tǒng)殺死死鎖進(jìn)程,若殺死失敗則在10秒之后重啟系統(tǒng))之后進(jìn)入回調(diào)函數(shù)線程執(zhí)行系統(tǒng)重啟。測試用例進(jìn)程應(yīng)該在310秒之內(nèi)執(zhí)行完畢或被殺死,并終止Timer的運(yùn)行,否則回調(diào)函數(shù)線程將被執(zhí)行,發(fā)生重啟。“devicetestingserver”服務(wù)程序主要實(shí)現(xiàn)代碼如下
class CTestingServer:public Driver{public:
CARAPI Read(/*[in]*/UINT64 u64Offset,/*[in]*/UINT uNumberOfBytesToRead,/*[out]*/EzByteBuf ebbData,/*[out]*/IEvent**ppCompletionEvent);
CARAPI Write(/*[in]*/UINT64 u64Offset,/*[in]*/EzByteBuf ebbData,/*[out]*/UINT*puNumberOfBytesWritten,/*[out]*/IEvent**ppCompletionEvent);
CARAPI Control(/*[in]*/INT nControlCode,/*[in]*/EzByteBuf ebbInData,/*[out]*/EzByteBuf ebbOutData,/*[out]*/IEvent**ppCompletionEvent);
virtual void Dispose();
public:
ECODE Initialize();
public:
DzTimer*m_pTimer;
};
void CDECL TimerRoutine(void*pvParameter){kprintf("Testing-System:Timer control Rebooting...\n:);
BspReboot();
}EXTERN IDriver*CDECL CreateTestingServer(uint_t uDeviceNo,void*pvParameter){CTestingServer*pTestingServer=new CTestingServer;
if(NULL==pTestingServer){kprintf("ERROR:new CTestingServer:Not enough memory!\n");
return NULL;
}ECODE ec=pTestingServer->Initialize();
if(FAILED(ec)){delete pTestingServer;
return NULL;
}pTestingServer->AddRef();
return pTestingServer;
}ECODE CTestingServer∷Initialize(){uint_t uTicks=DzMillisecondsToTicks(1000*1000);
m_pTimer=new DzTimer(uTicks,TimerRoutine,NULL);
if(NULL==m_pTimer){kprintf("ERROR:new Timer:Not enough memory!\n");
return E_OUT_OF_MEMORY;
}return NOERROR;
}ECODE CTestingServer∷Control(/*[in]*/INT nControlCode,/*[in]*/EzByteBuf ebbInData,/*[out]*/EzByteBuf ebbOutData,/*[out]*/IEvent**ppCompletionEvent)
{uint32_t uTime=0;
uint_t uTicks=0;
switch(nControlCode){case TSCommand StartRebootCountDown:
uTime=*(uint32_t*)(wchar_t*)ebblnData;
uTicks=DzMillisecondsToTicks(uTime);
m_pTimer->Restart(uTicks);
break;
case TSCommand_CancelRebootCountDown:
m_pTimer->Cancel();
break;
default:
kprintf("Unknown TestingServer Command.\n");
break;
}return NOERROR;
}CTestingServer類是按照Elastos驅(qū)動編程方法實(shí)現(xiàn)的一個偽驅(qū)動類,與內(nèi)核代碼一起編譯,系統(tǒng)啟動時調(diào)用CreateTestingServer創(chuàng)建了CTestingServer對象并將其注冊為“devicetestingserver”服務(wù)讓控制臺獲取并調(diào)用相關(guān)方法。CTestingServer對象創(chuàng)建時調(diào)用CTestingServer∷Initialize創(chuàng)建了Timer對象。TimerRoutine函數(shù)即Timer回調(diào)函數(shù),其調(diào)用BspReboot函數(shù)用于重啟系統(tǒng)。CTestingServer∷Control有兩個控制字TSCommand_StartRebootCountDown控制字用于啟動Timer對象,開始重啟倒計時,參數(shù)ebbInData用于傳遞控制臺指定的Timer對象相對到期時間(即重啟倒計時時間);TSCommand_CancelRebootCountDown控制字用于取消運(yùn)行的Timer對象,中止重啟倒計時。
步驟4.2.5控制臺創(chuàng)建測試用例進(jìn)程并運(yùn)行,即調(diào)用如下函數(shù)執(zhí)行ECODE RunExe(wchar_t*pwszCmd,wchar_t*pwszArgs,BOOL bBackGround){ECODE ec=NOERROR;
IProcess*pIProcess;
//創(chuàng)建測試用例進(jìn)程ec=EzCreateProcess(pwszCmd,pwszArgs,&pIProcess);
if(ec==NOERROR){//Create process succeededECODE ec1;
WaitResult wr;
INT ms=300000;
//等待進(jìn)程在300秒內(nèi)運(yùn)行結(jié)束ec1=pIProcess->W(wǎng)aitForExit(ms,&wr);
if(SUCCEEDED(ec1)&&(WaitResult_TimedOut==wr)){//發(fā)生超時,殺死該進(jìn)程pIProcess->Kill();
wprintf(L"Testing-System:Deadlock process was killed.\n");
}}pIProcess->Release();
}return ec;
}
創(chuàng)建測試用例進(jìn)程成功后,最多等待300秒(該時間可設(shè)置為其它值)讓進(jìn)程運(yùn)行,如果等待超時,則殺死該進(jìn)程,以便后繼進(jìn)程的運(yùn)行。如果該進(jìn)程運(yùn)行過程中進(jìn)入了debug,系統(tǒng)會自動跳轉(zhuǎn)到DebuggerHandler中執(zhí)行,在DebuggerHandler中專門為測試添加了如下處理函數(shù),在進(jìn)入DebuggerHandler時就調(diào)用該函數(shù)執(zhí)行void TestingDebuggerHandler(){//判斷是kernel debug還是user debugif(IS_IN_KERNEL_MODE(pContext)){kprintf("Kernel debugger!\n");
}else{kprintf("User debugger!\n");
if(NULL!=pCurrentProcess){//獲取當(dāng)前進(jìn)程CProcess*pCurrentProcess=GetCurrentProcess();
//殺死進(jìn)入user debug的進(jìn)程pCurrentProcess->Kill();
}}//進(jìn)入kernel debug或殺死user debug進(jìn)程失敗,重啟系統(tǒng)BspReboot();
return;
}如果系統(tǒng)陷入user debug則殺死debug進(jìn)程,以便運(yùn)行后繼測試代碼,若殺死失敗則調(diào)用BspReboot函數(shù)重啟系統(tǒng);如果陷入kernel debug,則調(diào)用BspReboot函數(shù)重啟系統(tǒng)。這樣便解決了測試過程中進(jìn)入debug的異常。
步驟4.2.6控制臺中止死鎖監(jiān)控程序運(yùn)行,取消重啟倒計時,即調(diào)用如下函數(shù)執(zhí)行void CancelRebootCountDown(){ECODE ec;
IDriver *pTestingDriver;
//獲取監(jiān)控服務(wù)ec=EzFindService(L"device:testingserver",(IObject**)&pTestingDriver);
if(FAILED(ec)){printf("Error:EzFindService testingserver failed ec=0x%x\n",ec);
HaltTesting();
}//取消重啟倒計時pTestingDriver->Control(TSCommand_CancelRebootCountDown,EZBYTEBUF_NULL,EZBYTEBUF_NULL,NULL);
pTestingDriver->Release();
}調(diào)用“devicetestingserver”服務(wù)中止Timer運(yùn)行,如果步驟4.2.5發(fā)生了進(jìn)程陷入死鎖并且不能被殺死,那么控制臺就不會調(diào)用CancelRebootCountDown函數(shù),系統(tǒng)會在進(jìn)程運(yùn)行開始310秒之后自動進(jìn)入Timer回調(diào)函數(shù)線程執(zhí)行系統(tǒng)重啟,這樣便解決了測試過程中陷入死鎖的異常。
步驟4.2.7使用st向開發(fā)機(jī)上傳該測試用例生成的輸出文件;步驟4.2.8刪除該測試用例程序和輸出文件;步驟4.3目標(biāo)機(jī)執(zhí)行完runtest.bat中所有命令行后,運(yùn)行“st runcmd.log”上傳runcmd.log文件標(biāo)志所有測試用例運(yùn)行結(jié)束。
步驟4.4開發(fā)機(jī)端stt監(jiān)測到runcmd.log被上傳時自動退出,此時stt已經(jīng)接收到了所有的測試輸出文件。
步驟4.5開發(fā)機(jī)使用windiff將標(biāo)準(zhǔn)輸出文件與測試輸出文件相比得出測試運(yùn)行結(jié)果。
對于造成系統(tǒng)異常的測試程序,它們會生成空的輸出文件或沒有生成輸出文件,需要重新運(yùn)行這些測試用例程序以定位問題。如果某個測試用例程序出錯了就注掉相應(yīng)的執(zhí)行腳本,沒有必要再次運(yùn)行,直到bug修復(fù)后再修改它的執(zhí)行腳本,加入測試中運(yùn)行。
上述在系統(tǒng)內(nèi)核以及控制臺中為測試專門添加的代碼,經(jīng)過條件編譯控制僅在回歸測試時才被編譯使用,保證開發(fā)代碼和測試代碼的獨(dú)立。
采用了上述的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,由于在開發(fā)機(jī)系統(tǒng)上實(shí)現(xiàn)了自動編譯代碼,并通知目標(biāo)機(jī)系統(tǒng)開始測試,且自動上傳操作系統(tǒng)鏡像文件和測試用例程序,自動下載測試輸出文件;同時,在目標(biāo)機(jī)系統(tǒng)上實(shí)現(xiàn)了自動下載、運(yùn)行和刪除測試程序,上傳測試輸出文件,自動處理各種系統(tǒng)異常,并保證異常處理之后測試執(zhí)行腳本能夠繼續(xù)運(yùn)行下一個測試程序,最后通知開發(fā)機(jī)結(jié)束測試,從而實(shí)現(xiàn)了在有限存儲資源的嵌入式設(shè)備上進(jìn)行嵌入式操作系統(tǒng)接口測試的自動化運(yùn)行,無需人工干預(yù),節(jié)約了人力資源,有效縮短了回歸測試的周期,保證嵌入式系統(tǒng)開發(fā)快速平穩(wěn)的推進(jìn),性能穩(wěn)定可靠。不僅如此,本發(fā)明的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法并不限于操作系統(tǒng)接口,對于嵌入式操作系統(tǒng)之上的應(yīng)用接口的測試也同樣適用,能夠?yàn)閼?yīng)用開發(fā)帶來益處,適用范圍較為廣泛,為嵌入式系統(tǒng)及其上層軟件的進(jìn)一步發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
在此說明書中,本發(fā)明已參照其特定的實(shí)施例作了描述。但是,很顯然仍可以作出各種修改和變換而不背離本發(fā)明的精神和范圍。因此,說明書和附圖應(yīng)被認(rèn)為是說明性的而非限制性的。
權(quán)利要求
1.一種嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,包括開發(fā)機(jī)系統(tǒng)和嵌入式操作系統(tǒng)的宿主測試目標(biāo)機(jī)系統(tǒng),所述的開發(fā)機(jī)系統(tǒng)中的通信裝置通過數(shù)據(jù)鏈路與目標(biāo)機(jī)系統(tǒng)中的通信裝置相連接,其特征在于,所述的方法包括以下步驟(1)開發(fā)機(jī)系統(tǒng)定期進(jìn)行生成嵌入式操作系統(tǒng)測試對象、測試執(zhí)行腳本和測試用例信息的處理;(2)開發(fā)機(jī)系統(tǒng)通過通信裝置將所述的嵌入式操作系統(tǒng)測試對象傳輸?shù)侥繕?biāo)機(jī)系統(tǒng)中;(3)目標(biāo)機(jī)系統(tǒng)進(jìn)行啟動嵌入式操作系統(tǒng)和從開發(fā)機(jī)系統(tǒng)下載測試執(zhí)行腳本的處理;(4)目標(biāo)機(jī)系統(tǒng)執(zhí)行測試執(zhí)行腳本,從開發(fā)機(jī)系統(tǒng)下載測試用例信息;(5)目標(biāo)機(jī)系統(tǒng)運(yùn)行測試用例信息并產(chǎn)生測試輸出信息;(6)目標(biāo)機(jī)系統(tǒng)通過通信裝置向開發(fā)機(jī)系統(tǒng)傳送該測試輸出信息;(7)目標(biāo)機(jī)系統(tǒng)刪除當(dāng)前測試用例信息和測試輸出信息;(8)目標(biāo)機(jī)系統(tǒng)判斷測試執(zhí)行腳本是否執(zhí)行完畢,如果未執(zhí)行完畢,則返回步驟(4)運(yùn)行;(9)如果執(zhí)行完畢,則目標(biāo)機(jī)系統(tǒng)通過通信裝置向開發(fā)機(jī)系統(tǒng)傳送測試結(jié)束信息;(10)開發(fā)機(jī)系統(tǒng)接收到該測試結(jié)束信息,并將預(yù)設(shè)的標(biāo)準(zhǔn)輸出信息與接收到的測試輸出信息進(jìn)行比較,得到測試運(yùn)行結(jié)果。
2.根據(jù)權(quán)利要求1所述的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,其特征在于,所述的定期生成嵌入式操作系統(tǒng)測試對象、測試執(zhí)行腳本和測試用例信息包括以下步驟(1)系統(tǒng)定時從源代碼服務(wù)器上下載最新的代碼;(2)將上述代碼編譯生成嵌入式操作系統(tǒng)的鏡像文件和所有的測試用例程序;(3)系統(tǒng)將各測試用例程序所對應(yīng)的執(zhí)行腳本合成并生成測試執(zhí)行腳本。
3.根據(jù)權(quán)利要求2所述的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,其特征在于,所述的將嵌入式操作系統(tǒng)測試對象傳輸?shù)侥繕?biāo)機(jī)系統(tǒng)中包括以下步驟(1)開發(fā)機(jī)系統(tǒng)通過通信裝置發(fā)送通知重啟標(biāo)志數(shù)據(jù)到目標(biāo)機(jī)系統(tǒng),通知目標(biāo)機(jī)系統(tǒng)重啟;(2)目標(biāo)機(jī)系統(tǒng)接收到開發(fā)機(jī)系統(tǒng)發(fā)送來的通知重啟標(biāo)志數(shù)據(jù),重新啟動系統(tǒng);(3)開發(fā)機(jī)系統(tǒng)待目標(biāo)機(jī)系統(tǒng)重啟后,通過通訊裝置將嵌入式操作系統(tǒng)的鏡像文件傳輸?shù)侥繕?biāo)機(jī)系統(tǒng)上;(4)目標(biāo)機(jī)系統(tǒng)通過通信裝置接收到開發(fā)機(jī)系統(tǒng)發(fā)送的鏡像文件,并將其燒寫到目標(biāo)機(jī)系統(tǒng)的嵌入式設(shè)備中。
4.根據(jù)權(quán)利要求2或3所述的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,其特征在于,所述的源代碼服務(wù)器為CVS源代碼管理服務(wù)器、ClearCase源代碼管理服務(wù)器或者SourceSafe源代碼管理服務(wù)器。
5.根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,其特征在于,所述的啟動嵌入式操作系統(tǒng)和從開發(fā)機(jī)系統(tǒng)下載測試執(zhí)行腳本的處理包括以下步驟(1)目標(biāo)機(jī)系統(tǒng)判斷該啟動屬于以下兩種情況中的哪一種新系統(tǒng)燒寫完后首次啟動、新系統(tǒng)因測試運(yùn)行過程中發(fā)生異常而重啟;(2)如果是新系統(tǒng)燒寫完后首次啟動,則目標(biāo)機(jī)系統(tǒng)通過通信裝置從開發(fā)機(jī)系統(tǒng)下載測試執(zhí)行腳本;(3)如果是新系統(tǒng)因測試運(yùn)行過程中發(fā)生異常而重啟,則將測試執(zhí)行腳本中已經(jīng)執(zhí)行過的命令行刪除,只保留未執(zhí)行過的命令行內(nèi)容。
6.根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,其特征在于,所述的目標(biāo)機(jī)系統(tǒng)運(yùn)行測試用例信息包括以下步驟(1)系統(tǒng)在啟動執(zhí)行該測試用例信息之前記錄下當(dāng)前運(yùn)行的程序命令行;(2)系統(tǒng)創(chuàng)建相應(yīng)的測試用例信息的進(jìn)程并開始執(zhí)行,并在執(zhí)行測試用例進(jìn)程的過程中實(shí)時監(jiān)控各種異常情況的出現(xiàn);(3)如果測試用例進(jìn)程的運(yùn)行使得系統(tǒng)陷入死鎖,則系統(tǒng)將殺死在一段特定時間后還沒有運(yùn)行完畢的進(jìn)程,若殺死該進(jìn)程成功,則繼續(xù)運(yùn)行下一個命令行;若殺死該進(jìn)程失敗,則進(jìn)行系統(tǒng)重啟;(4)如果測試用例進(jìn)程的運(yùn)行使得系統(tǒng)陷入調(diào)試狀態(tài),則系統(tǒng)將殺死該進(jìn)程,若殺死該進(jìn)程成功,則繼續(xù)運(yùn)行下一個命令行;若殺死該進(jìn)程失敗,則進(jìn)行系統(tǒng)重啟;(5)如果測試用例進(jìn)程的運(yùn)行使得系統(tǒng)內(nèi)存不足,若發(fā)現(xiàn)系統(tǒng)內(nèi)存低于系統(tǒng)預(yù)設(shè)值,則進(jìn)行系統(tǒng)重啟。
7.根據(jù)權(quán)利要求6所述的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,其特征在于,通過在系統(tǒng)的開發(fā)代碼中添加的經(jīng)過條件編譯控制的死鎖監(jiān)控代碼、調(diào)試狀態(tài)監(jiān)控代碼、內(nèi)存監(jiān)控代碼進(jìn)行異常情況的實(shí)時監(jiān)控。
8.根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,其特征在于,所述的測試結(jié)束信息為測試運(yùn)行結(jié)束標(biāo)志文件。
9.根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,其特征在于,所述的標(biāo)準(zhǔn)輸出信息為標(biāo)準(zhǔn)輸出文件,所述的測試輸出信息為測試輸出文件。
10.根據(jù)權(quán)利要求9所述的嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,其特征在于,所述的將預(yù)設(shè)的標(biāo)準(zhǔn)輸出信息與接收到的測試輸出信息進(jìn)行比較為使用文件比較工具將預(yù)設(shè)的標(biāo)準(zhǔn)輸出文件與接收到的測試輸出文件進(jìn)行比較。
全文摘要
本發(fā)明涉及一種嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,包括開發(fā)機(jī)定期生成測試對象、測試執(zhí)行腳本和測試用例信息、將測試對象傳輸?shù)侥繕?biāo)機(jī)、目標(biāo)機(jī)啟動系統(tǒng)并下載測試執(zhí)行腳本、循環(huán)下載測試用例信息運(yùn)行并產(chǎn)生測試輸出信息、向開發(fā)機(jī)傳送該測試輸出信息和測試結(jié)束信息、開發(fā)機(jī)將標(biāo)準(zhǔn)輸出信息與測試輸出信息進(jìn)行比較后得到測試運(yùn)行結(jié)果。采用該種嵌入式操作系統(tǒng)中接口測試的自動化運(yùn)行方法,無需人工干預(yù),節(jié)約了人力資源,有效縮短了回歸測試的周期,保證嵌入式系統(tǒng)開發(fā)快速平穩(wěn)的推進(jìn),性能穩(wěn)定可靠,而且對于應(yīng)用接口的測試也同樣適用,能夠?yàn)閼?yīng)用開發(fā)帶來益處,適用范圍較為廣泛,為嵌入式系統(tǒng)及其上層軟件的進(jìn)一步發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
文檔編號G06F11/36GK1932776SQ20061011686
公開日2007年3月21日 申請日期2006年9月29日 優(yōu)先權(quán)日2006年9月29日
發(fā)明者雷光亮, 付強(qiáng) 申請人:上??铺┦兰o(jì)科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1