本發(fā)明涉及測試技術(shù)領(lǐng)域,特別是涉及一種自動化測試方法和一種自動化測試裝置。
背景技術(shù):
目前,隨著計算機技術(shù)的迅速發(fā)展,軟件的應(yīng)用范圍越來越廣泛,軟件結(jié)構(gòu)也越來越復(fù)雜,隨之對軟件的質(zhì)量要求也越來越高,為了保證軟件產(chǎn)品的質(zhì)量,軟件測試特別是自動化測試越來越受到人們的重視。
現(xiàn)有的測試過程具體包括:編寫測試用例,該測試用例通常為JAVA文件;將該JAVA文件編譯為Class(類)文件;執(zhí)行該Class文件得到相應(yīng)的用例執(zhí)行結(jié)果。
由于現(xiàn)有的測試過程中一個測試用例分別對應(yīng)一個JAVA文件和一個Class文件,這樣,測試用例的數(shù)目較多時,這些測試用例對應(yīng)的眾多JAVA文件和Class文件需要占用大量的磁盤空間,容易導(dǎo)致磁盤空間不足的現(xiàn)象,從而拖慢計算機的運行速度。
技術(shù)實現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的自動化測試方法和相應(yīng)的自動化測試裝置。
依據(jù)本發(fā)明的一個方面,提供了一種自動化測試方法,包括:
從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼;
在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼;
在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果。
可選地,所述在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼的步驟,包括:
依據(jù)所述用例邏輯代碼中依賴關(guān)鍵字,獲取所述依賴關(guān)鍵字對應(yīng)關(guān)聯(lián)包的路徑;
利用所述路徑加載所述關(guān)聯(lián)包,并利用所述關(guān)聯(lián)包在內(nèi)存中將所述用例 邏輯代碼編譯為字節(jié)碼。
可選地,所述在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果的步驟,包括:
通過反射方式執(zhí)行所述字節(jié)代碼對應(yīng)測試用例的入口方法,得到所述測試用例的執(zhí)行結(jié)果。
可選地,所述在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果的步驟,包括:
將所述字節(jié)碼加載到JAVA虛擬機中;
對所述字節(jié)碼進行格式校驗;
在所述字節(jié)碼的格式校驗通過后,通過所述JAVA虛擬機將所述字節(jié)碼解釋為機器指令,并執(zhí)行所述機器指令。
可選地,在所述從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼的步驟之前,所述方法還包括:
通過功能模塊顯示用例類型對應(yīng)的應(yīng)用程序編程接口API;其中,所述用例類型對應(yīng)的API用于開發(fā)所述用例類型對應(yīng)測試用例的、字符串形式的用例邏輯代碼;
接收通過所述用例類型對應(yīng)的API開發(fā)的字符串形式的用例邏輯代碼;
將所述字符串形式的用例邏輯代碼存儲至所述數(shù)據(jù)庫。
可選地,所述方法還包括:
對所述在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼和/或所述在內(nèi)存中執(zhí)行所述字節(jié)碼過程中的JAVA對象進行垃圾回收。
可選地,所述功能模塊為插件。
可選地,所述用例類型包括如下類型中的至少一種:web圖形用戶界面自動化測試、接口自動化測試、安卓應(yīng)用自動化測試、數(shù)據(jù)庫測試和安全性測試。
依據(jù)本發(fā)明的另一方面,提供了一種自動化測試裝置,包括:
讀取模塊,用于從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼;
編譯模塊,用于在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼;及
執(zhí)行模塊,用于在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果。
可選地,所述編譯模塊,包括:
路徑獲取子模塊,用于依據(jù)所述用例邏輯代碼中依賴關(guān)鍵字,獲取所述依賴關(guān)鍵字對應(yīng)關(guān)聯(lián)包的路徑;及
加載執(zhí)行子模塊,用于利用所述路徑加載所述關(guān)聯(lián)包,并利用所述關(guān)聯(lián)包在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼。
可選地,所述執(zhí)行模塊,包括:
反射執(zhí)行子模塊,用于通過反射方式執(zhí)行所述字節(jié)代碼對應(yīng)測試用例的入口方法,得到所述測試用例的執(zhí)行結(jié)果。
可選地,所述執(zhí)行模塊,包括:
加載子模塊,用于將所述字節(jié)碼加載到JAVA虛擬機中;
校驗子模塊,用于對所述字節(jié)碼進行格式校驗;
解釋執(zhí)行子模塊,用于在所述字節(jié)碼的格式校驗通過后,通過所述JAVA虛擬機將所述字節(jié)碼解釋為機器指令,并執(zhí)行所述機器指令。
可選地,所述裝置還包括:
顯示模塊,用于在所述從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼之前,通過功能模塊顯示用例類型對應(yīng)的應(yīng)用程序編程接口API;其中,所述用例類型對應(yīng)的API用于開發(fā)所述用例類型對應(yīng)測試用例的、字符串形式的用例邏輯代碼;
接收模塊,用于接收通過所述用例類型對應(yīng)的API開發(fā)的字符串形式的用例邏輯代碼;
存儲模塊,用于將所述字符串形式的用例邏輯代碼存儲至所述數(shù)據(jù)庫。
可選地,所述裝置還包括:
垃圾回收模塊,用于對所述在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼和/或所述在內(nèi)存中執(zhí)行所述字節(jié)碼過程中的JAVA對象進行垃圾回收。
可選地,所述功能模塊為插件。
可選地,所述用例類型包括如下類型中的至少一種:web圖形用戶界面自動化測試、接口自動化測試、安卓應(yīng)用自動化測試、數(shù)據(jù)庫測試和安全性測試。
根據(jù)本發(fā)明的自動化測試方法和裝置,將用例邏輯代碼以字符串形式保存至數(shù)據(jù)庫,并且,在接收到測試用例的執(zhí)行指令時,可以從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼,在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼,并在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果,其具有如下優(yōu)點:
首先,由于本發(fā)明實施例在內(nèi)存中執(zhí)行整個自動化測試流程,且自動化測試流程中的用例邏輯代碼、字節(jié)碼等均在內(nèi)存中出現(xiàn),因此,相對于現(xiàn)有方案將JAVA文件編譯為Class文件,本發(fā)明實施例能夠避免JAVA文件、Class文件等垃圾文件的出現(xiàn),還能夠避免垃圾數(shù)據(jù)的出現(xiàn),因此能夠節(jié)省計算機系統(tǒng)的磁盤空間;
其次,在執(zhí)行完每一個測試用例后,可以對該測試用例所占用的內(nèi)存空間進行回收,以釋放該內(nèi)存空間給其它測試用例,因此,本發(fā)明實施例還能夠通過及時釋放內(nèi)存空間有效提升計算機系統(tǒng)的運行速度;
再者,本發(fā)明實施例可以通過數(shù)據(jù)庫實現(xiàn)各種測試用例的一體性和完整性,這相對于現(xiàn)有方案對于JAVA文件進行管理,增加了測試用例管理的便捷性。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個實施例的一種自動化測試方法實施例的步驟流程圖;
圖2示出了根據(jù)本發(fā)明一個實施例的一種自動化測試方法實施例的步驟流程圖;
圖3示出了根據(jù)本發(fā)明一個實施例的一種自動化測試方法實施例的步驟流程圖;
圖4示出了根據(jù)本發(fā)明一個實施例的一種自動化測試裝置實施例的結(jié)構(gòu)框圖;
圖5示出了根據(jù)本發(fā)明一個實施例的一種自動化測試裝置實施例的結(jié)構(gòu)框圖;以及
圖6示出了根據(jù)本發(fā)明一個實施例的一種自動化測試裝置實施例的結(jié)構(gòu)框圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
參照圖1,示出了根據(jù)本發(fā)明一個實施例的一種自動化測試方法實施例的步驟流程圖,具體可以包括如下步驟:
步驟101、從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼;
本發(fā)明實施例可以應(yīng)用于軟件的自動化測試裝置中。相對于現(xiàn)有將JAVA文件編譯為Class文件的自動化測試流程,本發(fā)明實施例可以將用例邏輯代碼以字符串形式保存至數(shù)據(jù)庫,并且,在接收到測試用例的執(zhí)行指令時,可以從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼,在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼,并在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果;由于本發(fā)明實施例在內(nèi)存中執(zhí)行整個自動化測試流程,且自動化測試流程中的用例邏輯代碼、字節(jié)碼等均在內(nèi)存中出現(xiàn),因此,相對于現(xiàn)有方案, 本發(fā)明實施例能夠避免JAVA文件、Class文件等垃圾文件的出現(xiàn),還能夠避免垃圾數(shù)據(jù)的出現(xiàn),因此能夠節(jié)省計算機系統(tǒng)的磁盤空間;另外,在執(zhí)行完每一個測試用例后,可以對該測試用例所占用的內(nèi)存空間進行回收,以釋放該內(nèi)存空間給其它測試用例,因此,本發(fā)明實施例還能夠通過及時釋放內(nèi)存空間有效提升計算機系統(tǒng)的運行速度。
在具體實現(xiàn)中,本發(fā)明實施例的自動化測試裝置可以提供測試用例的生成接口,以使用戶通過該生成接口按照該生成接口對應(yīng)的規(guī)范生成測試用例。其中,該生成接口對應(yīng)的規(guī)范具體可以包括:可以規(guī)定測試用例編號、測試標題、重要級別、測試輸入、操作步驟、預(yù)期結(jié)果等測試用例信息的格式,還可以規(guī)定這些測試用例信息之間的順序、及操作步驟對應(yīng)的用例邏輯,本發(fā)明實施例對于該生成接口對應(yīng)的規(guī)范不加以限制。
在實際應(yīng)用中,可以測試用例的名稱為索引,在數(shù)據(jù)庫中以字符串形式存儲測試用例的用例邏輯代碼,并依據(jù)該索引從數(shù)據(jù)庫中讀取測試用例對應(yīng)的用例邏輯代碼。其中,可以依據(jù)邏輯、功能等特性將用例邏輯代碼歸屬到對應(yīng)的字段,并利用上述字段對用例邏輯代碼進行存儲,本發(fā)明實施例對于在數(shù)據(jù)庫中以字符串形式存儲測試用例的用例邏輯代碼的具體過程不加以限制。
步驟102、在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼;
在具體實現(xiàn)中,可以采用基于JDK(JAVA開發(fā)包,Java Development Kit)開發(fā)的動態(tài)編譯器,將字符串形式的用例邏輯代碼編譯為二進制形式的字節(jié)碼。假設(shè)用例邏輯代碼具體包括字符串形式的測試用例類名和字符串形式的JAVA代碼內(nèi)容,則動態(tài)編譯器可以對字符串形式的測試用例類名和字符串形式的JAVA代碼內(nèi)容,動態(tài)編譯并返回編譯好的class對象,其中該class對象用于表示編譯得到的字節(jié)碼。
在本發(fā)明的一種應(yīng)用示例中,動態(tài)編譯器可以通過StandardJavaFileManager(標準JAVA文檔管理)類控制用例邏輯代碼的輸入、及字節(jié)碼的輸出。在具體實現(xiàn)中,可以首先建立一個DiagnosticCollector(診斷收集)實例,以及通過getStandardFileManager()方法得到一個 StandardFileManager對象,最后通過CompilationTask(編譯任務(wù))中的call方法編譯字符串形式的用例邏輯代碼。
上述字符串形式的用例邏輯代碼和二進制形式的字節(jié)碼均可以在內(nèi)存中執(zhí)行,這樣,在執(zhí)行完每一個測試用例后,可以對該測試用例所占用的內(nèi)存空間進行回收,而可以不占用磁盤空間。
在本發(fā)明的一種可選實施例中,上述在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼的步驟,具體可以包括:
步驟S11、依據(jù)所述用例邏輯代碼中依賴關(guān)鍵字,獲取所述依賴關(guān)鍵字對應(yīng)關(guān)聯(lián)包的路徑;
步驟S12、利用所述路徑加載所述關(guān)聯(lián)包,并利用所述關(guān)聯(lián)包在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼。
在用例邏輯代碼的編譯過程中可能會存在包的依賴問題,例如,所述用例邏輯代碼中A類的編譯需要B類的方法,如果缺少B類的方法,則容易出現(xiàn)編譯不通過的問題。針對上述問題,本可選實施例可以在所述用例邏輯代碼中設(shè)計依賴關(guān)鍵字,該依賴關(guān)鍵字可用于描述當(dāng)前測試用例所需的關(guān)聯(lián)包(如關(guān)聯(lián)包的名稱等)。并且,本可選實施例還可以預(yù)先存儲關(guān)聯(lián)包的路徑,這樣,在在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼的過程中,可以首先獲取所述依賴關(guān)鍵字對應(yīng)關(guān)聯(lián)包的路徑,然后利用所述路徑加載所述關(guān)聯(lián)包,并利用所述關(guān)聯(lián)包在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼。在本發(fā)明的一種應(yīng)用示例中,該關(guān)聯(lián)包可以為JAR(JAVA歸檔文件,Java Archive File)包,該JAR包中可以包含至少一個類。
步驟103、在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果。
在具體實現(xiàn)中,在動態(tài)編譯器在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼后,可以將該字節(jié)碼傳遞給JVM(JAVA虛擬機,Java Virtual Machine),由JVM在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果。
在本發(fā)明的一種可選實施例中,所述在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果的步驟,具體可以包括:
步驟S21、通過反射方式執(zhí)行所述字節(jié)代碼對應(yīng)測試用例的入口方法, 得到所述測試用例的執(zhí)行結(jié)果。
JAVA反射方式是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為JAVA反射方法。
上述測試用例的入口方法作為測試用例的主方法,該主方法中可以包括單元方法,該主方法可用于觸發(fā)測試用例的執(zhí)行,并在執(zhí)行過程中接收每個單元方法的執(zhí)行結(jié)果。
在本發(fā)明的另一種可選實施例中,所述在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果的步驟,具體可以包括:
步驟S31、將所述字節(jié)碼加載到JAVA虛擬機中;
步驟S32、對所述字節(jié)碼進行格式校驗;
步驟S33、在所述字節(jié)碼的格式校驗通過后,通過所述JAVA虛擬機將所述字節(jié)碼解釋為機器指令,并執(zhí)行所述機器指令。
可以理解,上述只是作為在內(nèi)存中執(zhí)行所述字節(jié)碼的可選方案,本發(fā)明實施例對于在內(nèi)存中執(zhí)行所述字節(jié)碼的具體方案不加以限制。
需要說明的是,在本發(fā)明的一種可選實施例中,可以采用日志記錄各測試用例的自動化測試流程,以使用戶通過該日志獲取各測試用例在自動化測試流程中的執(zhí)行過程。
綜上,本發(fā)明實施例將用例邏輯代碼以字符串形式保存至數(shù)據(jù)庫,并且,在接收到測試用例的執(zhí)行指令時,可以從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼,在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼,并在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果,具有如下優(yōu)點:
首先,由于本發(fā)明實施例在內(nèi)存中執(zhí)行整個自動化測試流程,且自動化測試流程中的用例邏輯代碼、字節(jié)碼等均在內(nèi)存中出現(xiàn),因此,相對于現(xiàn)有方案將JAVA文件編譯為Class文件,本發(fā)明實施例能夠避免JAVA文件、Class文件等垃圾文件的出現(xiàn),還能夠避免垃圾數(shù)據(jù)的出現(xiàn),因此能夠節(jié)省計算機系統(tǒng)的磁盤空間;
其次,在執(zhí)行完每一個測試用例后,可以對該測試用例所占用的內(nèi)存空 間進行回收,以釋放該內(nèi)存空間給其它測試用例,因此,本發(fā)明實施例還能夠通過及時釋放內(nèi)存空間有效提升計算機系統(tǒng)的運行速度;
再者,本發(fā)明實施例可以通過數(shù)據(jù)庫實現(xiàn)各種測試用例的一體性和完整性,這相對于現(xiàn)有方案對于JAVA文件進行管理,增加了測試用例管理的便捷性。
參照圖2,示出了根據(jù)本發(fā)明一個實施例的一種自動化測試方法實施例的步驟流程圖,具體可以包括如下步驟:
步驟201、從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼;
步驟202、在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼;
步驟203、在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果;
步驟204、對所述在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼和/或所述在內(nèi)存中執(zhí)行所述字節(jié)碼過程中的JAVA對象進行垃圾回收。
相對于圖1所示實施例,本實施例可以對所述在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼和/或所述在內(nèi)存中執(zhí)行所述字節(jié)碼過程中的JAVA對象進行垃圾回收,實現(xiàn)對該測試用例所占用的內(nèi)存空間進行回收,以釋放該內(nèi)存空間給其它測試用例。
垃圾回收是JAVA的一大特性,JAVA可以自主的判斷出不再使用的JAVA對象,即廢棄的JAVA對象,當(dāng)JAVA對象不再被引用,或者無法找到JAVA對象時,該JAVA對象即為廢棄的JAVA對象,JAVA語言在找到廢棄的JAVA對象后,可以將其回收,以使新建的JAVA對象有足夠的存儲空間。JAVA對象是從JAVA堆中分配存儲空間,JAVA堆是JAVA的數(shù)據(jù)存儲區(qū)。
在本發(fā)明的一種可選實施例中,提供的內(nèi)存垃圾回收方法具體可以包括標記-清除(mark-sweep)算法、復(fù)制算法、標記-壓縮算法等。其中,標記-清除方法可以首先遍歷所有JAVA對象并標記可到達的JAVA對象,然后掃描堆棧以尋找未標記的JAVA對象(即廢棄的JAVA對象),并釋放它們的內(nèi)存,即刪除廢棄的JAVA對象;標記-壓縮方法:標記-壓縮方法可以首先 遍歷JAVA對象并標記可到達的JAVA對象,然后把標記的JAVA對象復(fù)制到新的存儲空間中,以便進行壓縮堆棧。
在本發(fā)明的另一種可選實施例中,可以采用分代垃圾回收方法。分代垃圾回收方法將堆分成兩個或多個對象,對象按照生存期分組,每一個子堆為一“代”對象服務(wù)。垃圾收集器將從最年輕的子堆(這個子堆被稱為新生代)中收集這些對象,如果一個對象經(jīng)歷了幾次垃圾收集后仍然存活,那么,這個對象就成長為生存期更高的一代,當(dāng)超過預(yù)設(shè)的生存期閾值時,該對象會被轉(zhuǎn)移到另外一個子堆(這個子堆被稱為老年代)中去。
該分代垃圾回收方法具體可以包括次要垃圾回收(minor GC)和全局垃圾回收(full GC),minor GC主要回收新生代的內(nèi)存垃圾,且把到達一定生存期的對象轉(zhuǎn)移到老年代,minor GC進行的頻率較高;而full GC則同時回收新生代和老年代的內(nèi)存垃圾。
在本發(fā)明的再一種可選實施例中,對于執(zhí)行時間較長的全局內(nèi)存垃圾回收,可以采用內(nèi)存調(diào)優(yōu)方法。比如,減小分代內(nèi)存中老年區(qū)內(nèi)存大小以降低全局內(nèi)存垃圾收集的執(zhí)行時間,或增大老年區(qū)內(nèi)存大小以減少全局內(nèi)存垃圾收集的執(zhí)行次數(shù)。
在本發(fā)明的又一種可選實施例中,可以采用實時RTSJ(Java實時規(guī)范,Real-time Specification for Java)。RTSJ在普通的JVM中增加了新的內(nèi)存區(qū)域,即永久內(nèi)存(Immortal Memory)和作用域內(nèi)存(Scoped Memory)。其中,永久內(nèi)存中的對象一旦分配就一直存在,直到JVM退出,因此不會被作為垃圾回收;而作用域內(nèi)存可以看作是臨時性的永久內(nèi)存,作用域內(nèi)存也不會引起垃圾回收,但其只在某個范圍內(nèi)有效,離開該范圍時,該作用域內(nèi)存塊作為一個整體將被釋放掉。RTSJ提出的這些概念,大大降低了代碼引起垃圾回收的機會,而且垃圾回收的時刻被限定在可預(yù)測的范圍之內(nèi)。
以上對JAVA對象的垃圾回收方案進行了詳細介紹,可以理解,本領(lǐng)域技術(shù)人員可以根據(jù)實際需要采用上述垃圾回收方案的一種或組合,本發(fā)明實施例對于具體的垃圾回收方案不加以限制。
參照圖3,示出了根據(jù)本發(fā)明一個實施例的一種自動化測試方法實施例的步驟流程圖,具體可以包括如下步驟:
步驟301、通過功能模塊顯示用例類型對應(yīng)的應(yīng)用程序編程接口API;其中,所述用例類型對應(yīng)的API用于開發(fā)所述用例類型對應(yīng)測試用例的、字符串形式的用例邏輯代碼;
步驟302、接收通過所述用例類型對應(yīng)的API開發(fā)的字符串形式的用例邏輯代碼;
步驟303、將所述字符串形式的用例邏輯代碼存儲至所述數(shù)據(jù)庫;
步驟304、從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼;
步驟305、在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼;
步驟306、在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果。
相對于圖1所示實施例,本實施例通過步驟301-步驟303增加了將所述字符串形式的用例邏輯代碼存儲至所述數(shù)據(jù)庫的具體過程;其中,可以通過功能模塊顯示用例類型對應(yīng)的API(應(yīng)用程序編程接口,Application Program Interface),也即,各功能模塊均可提供對應(yīng)用例類型的API,以使用戶根據(jù)該API開發(fā)所述用例類型對應(yīng)測試用例的、字符串形式的用例邏輯代碼。
在本發(fā)明的一種應(yīng)用示例中,所述用例類型具體可以包括如下類型中的至少一種:web圖形用戶界面自動化測試、接口自動化測試、安卓應(yīng)用自動化測試、數(shù)據(jù)庫測試和安全性測試??梢葬槍Ω饔美愋徒⑾鄳?yīng)格式的數(shù)據(jù)庫表,由該數(shù)據(jù)庫表存儲對應(yīng)測試用例的用例邏輯代碼。
在本發(fā)明的一種可選實施例中,所述功能模塊可以為插件。也即,上述功能模塊可以熱插拔的形式連接至本發(fā)明實施例的自動化測試裝置,使得本領(lǐng)域技術(shù)人員根據(jù)實際需要靈活地采用上述功能模塊,從而能夠增加自動化測試裝置所支持用例類型的擴展性。
對于方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明實施例并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明實施例,某些步驟可以采用其他順序或者同時進行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實施例均屬于優(yōu)選實施 例,所涉及的動作并不一定是本發(fā)明實施例所必須的。
參照圖4,示出了根據(jù)本發(fā)明一個實施例的一種自動化測試裝置實施例的結(jié)構(gòu)框圖,具體可以包括如下模塊:
讀取模塊401,用于從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼;
編譯模塊402,用于在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼;及
執(zhí)行模塊403,用于在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果。
在本發(fā)明的一種可選實施例中,所述編譯模塊402,具體可以包括:
路徑獲取子模塊,用于依據(jù)所述用例邏輯代碼中依賴關(guān)鍵字,獲取所述依賴關(guān)鍵字對應(yīng)關(guān)聯(lián)包的路徑;及
加載執(zhí)行子模塊,用于利用所述路徑加載所述關(guān)聯(lián)包,并利用所述關(guān)聯(lián)包在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼。
在本發(fā)明的另一種可選實施例中,所述執(zhí)行模塊403,具體可以包括:
反射執(zhí)行子模塊,用于通過反射方式執(zhí)行所述字節(jié)代碼對應(yīng)測試用例的入口方法,得到所述測試用例的執(zhí)行結(jié)果。
在本發(fā)明的再一種可選實施例中,所述執(zhí)行模塊403,具體可以包括:
加載子模塊,用于將所述字節(jié)碼加載到JAVA虛擬機中;
校驗子模塊,用于對所述字節(jié)碼進行格式校驗;
解釋執(zhí)行子模塊,用于在所述字節(jié)碼的格式校驗通過后,通過所述JAVA虛擬機將所述字節(jié)碼解釋為機器指令,并執(zhí)行所述機器指令。
由于本發(fā)明實施例在內(nèi)存中執(zhí)行整個自動化測試流程,且自動化測試流程中的用例邏輯代碼、字節(jié)碼等均在內(nèi)存中出現(xiàn),因此,相對于現(xiàn)有方案將JAVA文件編譯為Class文件,本發(fā)明實施例能夠避免JAVA文件、Class文件等垃圾文件的出現(xiàn),還能夠避免垃圾數(shù)據(jù)的出現(xiàn),因此能夠節(jié)省計算機系統(tǒng)的磁盤空間。
參照圖5,示出了根據(jù)本發(fā)明一個實施例的一種自動化測試裝置實施例 的結(jié)構(gòu)框圖,具體可以包括如下模塊:
讀取模塊501,用于從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼;
編譯模塊502,用于在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼;
執(zhí)行模塊503,用于在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果;及
垃圾回收模塊504,用于對所述在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼和/或所述在內(nèi)存中執(zhí)行所述字節(jié)碼過程中的JAVA對象進行垃圾回收。
本實施例可以對所述在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼和/或所述在內(nèi)存中執(zhí)行所述字節(jié)碼過程中的JAVA對象進行垃圾回收,實現(xiàn)對該測試用例所占用的內(nèi)存空間進行回收,以釋放該內(nèi)存空間給其它測試用例。
參照圖6,示出了根據(jù)本發(fā)明一個實施例的一種自動化測試裝置實施例的結(jié)構(gòu)框圖,具體可以包括如下模塊:
顯示模塊601,用于通過功能模塊顯示用例類型對應(yīng)的應(yīng)用程序編程接口API;其中,所述用例類型對應(yīng)的API用于開發(fā)所述用例類型對應(yīng)測試用例的、字符串形式的用例邏輯代碼;
接收模塊602,用于接收通過所述用例類型對應(yīng)的API開發(fā)的字符串形式的用例邏輯代碼;
存儲模塊603,用于將所述字符串形式的用例邏輯代碼存儲至所述數(shù)據(jù)庫;
讀取模塊604,用于從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼;
編譯模塊605,用于在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼;及
執(zhí)行模塊606,用于在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果。
在本發(fā)明的一種可選實施例中,所述功能模塊可以為插件。上述功能模塊可以熱插拔的形式連接至本發(fā)明實施例的自動化測試裝置,使得本領(lǐng)域技術(shù)人員根據(jù)實際需要靈活地采用上述功能模塊,從而能夠增加自動化測試裝 置所支持用例類型的擴展性。
在本發(fā)明的另一種可選實施例中,所述用例類型包括如下類型中的至少一種:web圖形用戶界面自動化測試、接口自動化測試、安卓應(yīng)用自動化測試、數(shù)據(jù)庫測試和安全性測試。
對于裝置實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實施例的部分說明即可。
在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權(quán)利要求書由此明確地并入該具體實施方式,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴 隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的自動化測試方法和裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
本發(fā)明公開了A1、一種自動化測試方法,包括:
從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼;
在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼;
在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果。
A2、如A1所述的方法,所述在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼的步驟,包括:
依據(jù)所述用例邏輯代碼中依賴關(guān)鍵字,獲取所述依賴關(guān)鍵字對應(yīng)關(guān)聯(lián)包的路徑;
利用所述路徑加載所述關(guān)聯(lián)包,并利用所述關(guān)聯(lián)包在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼。
A3、如A1所述的方法,所述在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果的步驟,包括:
通過反射方式執(zhí)行所述字節(jié)代碼對應(yīng)測試用例的入口方法,得到所述測試用例的執(zhí)行結(jié)果。
A4、如A1所述的方法,所述在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果的步驟,包括:
將所述字節(jié)碼加載到JAVA虛擬機中;
對所述字節(jié)碼進行格式校驗;
在所述字節(jié)碼的格式校驗通過后,通過所述JAVA虛擬機將所述字節(jié)碼解釋為機器指令,并執(zhí)行所述機器指令。
A5、如A1所述的方法,在所述從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼的步驟之前,所述方法還包括:
通過功能模塊顯示用例類型對應(yīng)的應(yīng)用程序編程接口API;其中,所述用例類型對應(yīng)的API用于開發(fā)所述用例類型對應(yīng)測試用例的、字符串形式的用例邏輯代碼;
接收通過所述用例類型對應(yīng)的API開發(fā)的字符串形式的用例邏輯代碼;
將所述字符串形式的用例邏輯代碼存儲至所述數(shù)據(jù)庫。
A6、如A1至A5中任一所述的方法,所述方法還包括:
對所述在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼和/或所述在內(nèi)存中執(zhí)行所述字節(jié)碼過程中的JAVA對象進行垃圾回收。
A7、如A5所述的方法,所述功能模塊為插件。
A8、如A5所述的方法,所述用例類型包括如下類型中的至少一種:web圖形用戶界面自動化測試、接口自動化測試、安卓應(yīng)用自動化測試、數(shù)據(jù)庫測試和安全性測試。
本發(fā)明還公開了B9、一種自動化測試裝置,包括:
讀取模塊,用于從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼;
編譯模塊,用于在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼;及
執(zhí)行模塊,用于在內(nèi)存中執(zhí)行所述字節(jié)碼,得到對應(yīng)測試用例的執(zhí)行結(jié)果。
B10、如B9所述的裝置,所述編譯模塊,包括:
路徑獲取子模塊,用于依據(jù)所述用例邏輯代碼中依賴關(guān)鍵字,獲取所述依賴關(guān)鍵字對應(yīng)關(guān)聯(lián)包的路徑;及
加載執(zhí)行子模塊,用于利用所述路徑加載所述關(guān)聯(lián)包,并利用所述關(guān)聯(lián)包在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼。
B11、如B9所述的裝置,所述執(zhí)行模塊,包括:
反射執(zhí)行子模塊,用于通過反射方式執(zhí)行所述字節(jié)代碼對應(yīng)測試用例的入口方法,得到所述測試用例的執(zhí)行結(jié)果。
B12、如B9所述的裝置,所述執(zhí)行模塊,包括:
加載子模塊,用于將所述字節(jié)碼加載到JAVA虛擬機中;
校驗子模塊,用于對所述字節(jié)碼進行格式校驗;
解釋執(zhí)行子模塊,用于在所述字節(jié)碼的格式校驗通過后,通過所述JAVA虛擬機將所述字節(jié)碼解釋為機器指令,并執(zhí)行所述機器指令。
B13、如B9所述的裝置,所述裝置還包括:
顯示模塊,用于在所述從數(shù)據(jù)庫中讀取字符串形式的用例邏輯代碼之前,通過功能模塊顯示用例類型對應(yīng)的應(yīng)用程序編程接口API;其中,所述 用例類型對應(yīng)的API用于開發(fā)所述用例類型對應(yīng)測試用例的、字符串形式的用例邏輯代碼;
接收模塊,用于接收通過所述用例類型對應(yīng)的API開發(fā)的字符串形式的用例邏輯代碼;
存儲模塊,用于將所述字符串形式的用例邏輯代碼存儲至所述數(shù)據(jù)庫。
B14、如B9至B13中任一所述的裝置,所述裝置還包括:
垃圾回收模塊,用于對所述在內(nèi)存中將所述用例邏輯代碼編譯為字節(jié)碼和/或所述在內(nèi)存中執(zhí)行所述字節(jié)碼過程中的JAVA對象進行垃圾回收。
B15、如B13所述的裝置,所述功能模塊為插件。
B16、如B13所述的裝置,所述用例類型包括如下類型中的至少一種:web圖形用戶界面自動化測試、接口自動化測試、安卓應(yīng)用自動化測試、數(shù)據(jù)庫測試和安全性測試。