安卓界面自動化測試方法、裝置及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種安卓界面自動化測試方法、裝置及系統(tǒng)。
【背景技術(shù)】
[0002]安卓界面(Android UI)自動化測試是一種通過模擬用戶操作,能夠自動發(fā)現(xiàn)Android應用中存在的缺陷的測試方法,可減少測試人員的大量重復手工測試操作,對于提高測試效率和提升測試質(zhì)量具有很高的應用價值。
[0003]現(xiàn)有的一種Android UI自動化測試方法大致如下:首先在架構(gòu)上分為測試端和服務端,測試端運行在計算機上,服務端運行在安卓設(shè)備上,測試端進行測試之前,需要在服務端將測試驅(qū)動代碼和被測應用的程序源代碼進行編譯得到最終的被測程序,然后在安卓設(shè)備上運行被測程序,接著開始運行測試端,測試端的測試用例代碼通過特定的接口層協(xié)議訪問安卓設(shè)備中的接口層驅(qū)動代碼,服務端調(diào)用安卓設(shè)備提供的框架操作安卓控件,由此來進行測試。
[0004]可以看出,上述方法在進行測試之前,必須獲取被測應用的程序源代碼,不同的被測應用的程序源代碼是不同的,在無法獲得被測應用的程序源代碼的情況下,測試無法進行。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種安卓界面自動化測試方法、裝置及系統(tǒng),在測試過程中無需獲取被測應用的程序源代碼就可實現(xiàn)自動化測試,而且不需要對應用進行重簽名,還可同時測試多個應用或多個進程。
[0006]第一方面,本發(fā)明提供一種安卓界面自動化測試方法,包括:
[0007]根據(jù)測試端發(fā)送的測試指令中包含的被測應用的代碼查找所述代碼對應的被測應用的進程標識;
[0008]將所述被測應用的進程標識對應的被測進程附加到目標進程;
[0009]分別獲取用于分配內(nèi)存的函數(shù)在所述目標進程中的第一地址、用于加載動態(tài)鏈接模塊的函數(shù)在所述目標進程中的第二地址和用于獲取測試樁加載器模塊中目標函數(shù)的地址的函數(shù)在所述目標進程中的第三地址;
[0010]在所述目標進程中通過依次調(diào)用所述用于加載動態(tài)鏈接模塊的函數(shù)、所述用于獲取測試樁加載器模塊中目標函數(shù)的地址的函數(shù)和所述目標函數(shù),在所述被測進程中創(chuàng)建第一服務端,以使所述測試端通過所述第一服務端對所述被測進程進行測試。
[0011]進一步地,所述根據(jù)測試端發(fā)送的測試指令中包含的被測應用的代碼查找所述代碼對應的被測應用的進程標識之前,還包括:
[0012]接收所述測試端發(fā)送的所述測試信令。
[0013]進一步地,所述在所述目標進程中通過依次調(diào)用所述用于加載動態(tài)鏈接模塊的函數(shù)、所述用于獲取測試樁加載器模塊中目標函數(shù)的地址的函數(shù)和所述目標函數(shù),在所述被測進程中創(chuàng)建第一服務端之后,還包括:
[0014]監(jiān)聽到來自所述測試端的測試程序的連接后,與所述測試端建立連接;
[0015]接收所述測試程序發(fā)送的操作指令并執(zhí)行所述操作指令,返回執(zhí)行結(jié)果給所述測試程序。
[0016]進一步地,所述操作指令包括:獲取控件樹,或,獲取控件文本,或,點擊按鈕。
[0017]第二方面,本發(fā)明提供一種安卓界面自動化測試方法,包括:
[0018]向服務端發(fā)送測試指令,所述測試指令包含被測應用的代碼,以使所述服務端接收到所述測試指令后根據(jù)所述代碼查找所述代碼對應的被測應用的進程標識,在所述被測應用的進程標識對應的被測進程中創(chuàng)建第一服務端;
[0019]通過所述第一服務端對所述被測進程進行測試。
[0020]進一步地,所述通過所述第一服務端對所述被測進程進行測試之前,還包括:
[0021]向所述服務端發(fā)送測試程序的連接,以使所述服務端監(jiān)聽到所述連接后與所述測試端建立連接。
[0022]進一步地,所述通過所述第一服務端對所述被測進程進行測試,包括:
[0023]向所述服務端發(fā)送操作指令;
[0024]接收所述服務端返回的執(zhí)行結(jié)果。
[0025]進一步地,所述操作指令包括:獲取控件樹,或,獲取控件文本,或,點擊按鈕。
[0026]第三方面,本發(fā)明提供一種服務端,包括:
[0027]查找模塊,用于根據(jù)測試端發(fā)送的測試指令中包含的被測應用的代碼查找所述代碼對應的被測應用的進程標識;
[0028]處理模塊,用于將所述被測應用的進程標識對應的被測進程附加到目標進程;
[0029]獲取模塊,用于分別獲取用于分配內(nèi)存的函數(shù)在所述目標進程中的第一地址、用于加載動態(tài)鏈接模塊的函數(shù)在所述目標進程中的第二地址和用于獲取測試樁加載器模塊中目標函數(shù)的地址的函數(shù)在所述目標進程中的第三地址;
[0030]創(chuàng)建模塊,用于在所述目標進程中通過依次調(diào)用所述用于加載動態(tài)鏈接模塊的函數(shù)、所述用于獲取測試樁加載器模塊中目標函數(shù)的地址的函數(shù)和所述目標函數(shù),在所述被測進程中創(chuàng)建第一服務端,以使所述測試端通過所述第一服務端對所述被測進程進行測試。
[0031]進一步地,所述服務端還包括:
[0032]接收模塊,用于在所述查找模塊根據(jù)測試端發(fā)送的測試指令中包含的被測應用的代碼查找所述代碼對應的被測應用的進程標識之前,接收所述測試端發(fā)送的所述測試信令。
[0033]進一步地,所述處理模塊還用于在所述目標進程中通過依次調(diào)用所述用于加載動態(tài)鏈接模塊的函數(shù)、所述用于獲取測試樁加載器模塊中目標函數(shù)的地址的函數(shù)和所述目標函數(shù),在所述被測進程中創(chuàng)建第一服務端之后,監(jiān)聽來自所述測試端的測試程序的連接;
[0034]所述處理模塊還用于監(jiān)聽到來自所述測試端的測試程序的連接后,與所述測試端建立連接;
[0035]所述接收模塊還用于接收所述測試程序發(fā)送的操作指令;
[0036]所述處理模塊還用于執(zhí)行所述操作指令;
[0037]所述服務端還包括:發(fā)送模塊,用于返回執(zhí)行結(jié)果給所述測試程序。
[0038]進一步地,所述操作指令包括:獲取控件樹,或,獲取控件文本,或,點擊按鈕。
[0039]第四方面,本發(fā)明提供一種測試端,包括:
[0040]發(fā)送模塊,用于向服務端發(fā)送測試指令,所述測試指令包含被測應用的代碼,以使所述服務端接收到所述測試指令后根據(jù)所述代碼查找所述代碼對應的被測應用的進程標識,在所述被測應用的進程標識對應的被測進程中創(chuàng)建第一服務端;
[0041]處理模塊,用于通過所述第一服務端對所述被測進程進行測試。
[0042]進一步地,所述發(fā)送模塊還用于在所述處理模塊通過所述第一服務端對所述被測進程進行測試之前,向所述服務端發(fā)送測試程序的連接,以使所述服務端監(jiān)聽到所述連接后與所述測試端建立連接。
[0043]進一步地,所述發(fā)送模塊還用于向所述服務端發(fā)送操作指令;
[0044]所述測試端還包括:
[0045]接收模塊,用于接收所述服務端返回的執(zhí)行結(jié)果。
[0046]進一步地,所述操作指令包括:獲取控件樹,或,獲取控件文本,或,點擊按鈕。
[0047]第五方面,本發(fā)明提供一種測試系統(tǒng),包括第三方面所述的服務端和第四方面所述的測試端。
[0048]本發(fā)明提供的安卓界面自動化測試方法、裝置及系統(tǒng),通過服務端根據(jù)被測應用的代碼查找代碼對應的被測應用的進程標識后,將被測進程附加到目標進程,接著用于