本發(fā)明自動(dòng)化測(cè)試領(lǐng)域,具體涉及一種內(nèi)存抖動(dòng)自動(dòng)化測(cè)試方法及裝置。
背景技術(shù):
在當(dāng)前的直播應(yīng)用中,直播間內(nèi)播放器、彈幕、禮物和各種消息都非常消耗安卓設(shè)備內(nèi)存,內(nèi)存負(fù)荷一直是一個(gè)很突出、嚴(yán)重的問題,這也導(dǎo)致了直播應(yīng)用內(nèi)存抖動(dòng)的現(xiàn)象頻發(fā)。
對(duì)于內(nèi)存抖動(dòng)的頻繁現(xiàn)象,在對(duì)安卓應(yīng)用的當(dāng)前測(cè)試方案中,都沒有針對(duì)內(nèi)存抖動(dòng)方面進(jìn)行測(cè)試的,內(nèi)存抖動(dòng)的問題一直還沒有得到很好的重視。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種克服上述問題或者至少部分地解決上述問題的內(nèi)存抖動(dòng)自動(dòng)化測(cè)試方法及裝置。
根據(jù)本發(fā)明的一個(gè)方面,提供一種內(nèi)存抖動(dòng)自動(dòng)化測(cè)試方法,包括:
s1,當(dāng)檢測(cè)到安卓設(shè)備與測(cè)試平臺(tái)連接成功后,獲取測(cè)試腳本參數(shù);
s2,根據(jù)所述測(cè)試腳本參數(shù),使用測(cè)試平臺(tái)上的命令行monkey工具向安卓設(shè)備發(fā)送運(yùn)行指令,以使待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行;
s3,基于待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行后,收集安卓設(shè)備上的垃圾回收日志;
s4,對(duì)所述垃圾回收日志進(jìn)行分析,來(lái)確定安卓設(shè)備是否存在內(nèi)存抖動(dòng)。
本發(fā)明的有益效果為:采用android自帶的命令行monkey工具對(duì)安卓設(shè)備的內(nèi)存抖動(dòng)進(jìn)行自動(dòng)化測(cè)試,在保證測(cè)試的穩(wěn)定性的同時(shí),填補(bǔ)了安卓設(shè)備內(nèi)存抖動(dòng)檢測(cè)的空白。
在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以作如下改進(jìn)。
進(jìn)一步的,所述步驟s1之前還包括:
使用python語(yǔ)言在測(cè)試平臺(tái)上編寫測(cè)試腳本,并初始化測(cè)試腳本參數(shù),所述測(cè)試腳本參數(shù)包括待測(cè)試應(yīng)用安裝包的名稱和待測(cè)試應(yīng)用安裝包在安卓設(shè)備上的預(yù)設(shè)運(yùn)行時(shí)長(zhǎng)。
進(jìn)一步的,所述步驟s2具體包括:
使用測(cè)試平臺(tái)上的命令行monkey工具向安卓設(shè)備發(fā)送運(yùn)行指令,所述運(yùn)行指令中包括測(cè)試腳本參數(shù);
根據(jù)所述測(cè)試腳本參數(shù)中的待測(cè)試應(yīng)用安裝包的名稱,在安卓設(shè)備上找到待測(cè)試應(yīng)用安裝包,并根據(jù)測(cè)試腳本參數(shù)中的預(yù)設(shè)運(yùn)行時(shí)長(zhǎng),在安卓設(shè)備上運(yùn)行所述待測(cè)試應(yīng)用安裝包。進(jìn)一步的,所述步驟s3具體包括:
檢測(cè)安卓設(shè)備的系統(tǒng)版本;
當(dāng)待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行后,根據(jù)安卓設(shè)備的不同系統(tǒng)版本,對(duì)與安卓設(shè)備的系統(tǒng)版本對(duì)應(yīng)的虛擬機(jī)上的垃圾回收日志進(jìn)行收集。
進(jìn)一步的,所述垃圾回收日志中包括生成垃圾回收日志的時(shí)間戳;
所述步驟s4具體包括:
s41,根據(jù)生成垃圾回收日志的時(shí)間戳,統(tǒng)計(jì)安卓設(shè)備回收垃圾的頻率以及在預(yù)設(shè)時(shí)間內(nèi)回收垃圾的次數(shù);
s42,根據(jù)安卓設(shè)備回收垃圾的頻率和在預(yù)設(shè)時(shí)間內(nèi)回收垃圾的次數(shù),確定安卓設(shè)備中是否存在內(nèi)存抖動(dòng)。
進(jìn)一步的,所述步驟s42具體包括:
當(dāng)安卓設(shè)備回收垃圾的頻率小于預(yù)設(shè)頻率且安卓設(shè)備在預(yù)設(shè)時(shí)間內(nèi)回收垃圾的次數(shù)小于預(yù)設(shè)次數(shù)時(shí),安卓設(shè)備不存在內(nèi)存抖動(dòng),否則,安卓設(shè)備存在內(nèi)存抖動(dòng)。
所述進(jìn)一步的有益效果為:通過分析安卓設(shè)備上垃圾回收的頻率和在預(yù)定時(shí)間內(nèi)的垃圾回收的次數(shù),來(lái)確定安卓設(shè)備上是否存在內(nèi)存抖動(dòng),定量進(jìn)行分析,使得測(cè)試結(jié)果更加準(zhǔn)確。
進(jìn)一步的,所述步驟s3之后還包括:
根據(jù)收集的垃圾回收日志,繪制安卓設(shè)備的剩余內(nèi)存與時(shí)間對(duì)應(yīng)關(guān)系曲線圖表。
根據(jù)本發(fā)明的另一個(gè)方面,還提供了一種內(nèi)存抖動(dòng)自動(dòng)化測(cè)試裝置,包括:
參數(shù)獲取模塊,用于當(dāng)檢測(cè)到安卓設(shè)備與測(cè)試平臺(tái)連接成功后,獲取測(cè)試腳本參數(shù);指令發(fā)送模塊,用于根據(jù)所述測(cè)試腳本參數(shù),使用測(cè)試平臺(tái)上的monkey工具向安卓設(shè)備發(fā)送運(yùn)行指令,以使待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行;
日志收集模塊,用于基于待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行后,收集安卓設(shè)備上的垃圾回收日志;
分析模塊,用于對(duì)所述垃圾回收日志進(jìn)行分析,來(lái)確定安卓設(shè)備是否存在內(nèi)存抖動(dòng)。
進(jìn)一步的,還包括:
腳本編寫模塊,用于使用python語(yǔ)言在測(cè)試平臺(tái)上編寫測(cè)試腳本,并初始化測(cè)試腳本參數(shù),所述測(cè)試腳本參數(shù)包括待測(cè)試應(yīng)用安裝包的名稱和待測(cè)試應(yīng)用安裝包在安卓設(shè)備上的預(yù)設(shè)運(yùn)行時(shí)長(zhǎng)。
進(jìn)一步的,所述垃圾回收日志中包括生成垃圾回收日志的時(shí)間戳,所述分析模塊包括:
統(tǒng)計(jì)子單元,用于根據(jù)生成垃圾回收日志的時(shí)間戳,統(tǒng)計(jì)安卓設(shè)備回收垃圾的頻率以及在預(yù)設(shè)時(shí)間內(nèi)回收垃圾的次數(shù);
確定子單元,用于根據(jù)安卓設(shè)備回收垃圾的頻率和在預(yù)設(shè)時(shí)間內(nèi)回收垃圾的次數(shù),確定安卓設(shè)備中是否存在內(nèi)存抖動(dòng)。
附圖說(shuō)明
圖1為本發(fā)明一個(gè)實(shí)施例的內(nèi)存抖動(dòng)自動(dòng)化測(cè)試方法流程圖;
圖2為本發(fā)明另一個(gè)實(shí)施例的內(nèi)存抖動(dòng)自動(dòng)化測(cè)試裝置連接框圖;
圖3為本發(fā)明另一個(gè)實(shí)施例的內(nèi)存抖動(dòng)自動(dòng)化測(cè)試裝置的整個(gè)連接框圖;
圖4為本發(fā)明另一個(gè)實(shí)施例的分析模塊內(nèi)部連接框圖;
圖5為本發(fā)明又一個(gè)實(shí)施例的內(nèi)存抖動(dòng)自動(dòng)化測(cè)試裝置的測(cè)試設(shè)備連接框圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的具體實(shí)施方式作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說(shuō)明本發(fā)明,但不用來(lái)限制本發(fā)明的范圍。
參見圖1,為本發(fā)明一個(gè)實(shí)施例的內(nèi)存抖動(dòng)自動(dòng)化測(cè)試方法,適用于對(duì)安卓設(shè)備的內(nèi)存抖動(dòng)現(xiàn)象進(jìn)行測(cè)試,該方法包括:s1,當(dāng)檢測(cè)到安卓設(shè)備與測(cè)試平臺(tái)連接成功后,獲取測(cè)試腳本參數(shù);s2,根據(jù)所述測(cè)試腳本參數(shù),使用測(cè)試平臺(tái)上的命令行monkey工具向安卓設(shè)備發(fā)送運(yùn)行指令,以使待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行;s3,基于待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行后,收集安卓設(shè)備上的垃圾回收日志;s4,對(duì)所述垃圾回收日志進(jìn)行分析,來(lái)確定安卓設(shè)備是否存在內(nèi)存抖動(dòng)。
內(nèi)存抖動(dòng)是指在短時(shí)間內(nèi)有大量的對(duì)象被創(chuàng)建或者被回收的現(xiàn)象,內(nèi)存抖動(dòng)出現(xiàn)的原因主要頻繁在循環(huán)里創(chuàng)建對(duì)象,這樣會(huì)導(dǎo)致大量的對(duì)象在短時(shí)間內(nèi)被創(chuàng)建,由于新創(chuàng)建的對(duì)象是需要占用內(nèi)存空間的,如果一次或者兩次在循環(huán)里創(chuàng)建對(duì)象,對(duì)內(nèi)存的影響不會(huì)太大,不會(huì)造成嚴(yán)重的內(nèi)存抖動(dòng),但如果是頻繁創(chuàng)建對(duì)象,那么內(nèi)存的抖動(dòng)就會(huì)很嚴(yán)重。如果內(nèi)存抖動(dòng)很頻繁,會(huì)導(dǎo)致垃圾回收機(jī)制頻繁運(yùn)行,因?yàn)槎虝r(shí)間內(nèi)產(chǎn)生大量的對(duì)象,需要大量的內(nèi)存,而且還是頻繁抖動(dòng),就可能會(huì)需要回收內(nèi)存用以產(chǎn)生對(duì)象,垃圾回收機(jī)制自然就頻繁運(yùn)行。
本實(shí)施例由于是對(duì)安卓設(shè)備的內(nèi)存抖動(dòng)進(jìn)行測(cè)試,因此,需要對(duì)在安卓設(shè)備上運(yùn)行的應(yīng)用安裝包的運(yùn)行數(shù)據(jù)進(jìn)行測(cè)試。而需要對(duì)安卓設(shè)備進(jìn)行測(cè)試,首先需要檢測(cè)安卓設(shè)備與測(cè)試平臺(tái)的連接狀態(tài),當(dāng)安卓設(shè)備與測(cè)試平臺(tái)成功連接后,測(cè)試平臺(tái)才能對(duì)安卓設(shè)備進(jìn)行測(cè)試。隨后,測(cè)試平臺(tái)獲取預(yù)先編寫好的測(cè)試腳本的參數(shù),其中,測(cè)試腳本參數(shù)至少包括安卓設(shè)備上待測(cè)試應(yīng)用安裝包的名稱。測(cè)試平臺(tái)根據(jù)測(cè)試腳本參數(shù),使用命令行monkey工具向安卓設(shè)備發(fā)送運(yùn)行指令,運(yùn)行指令中包括測(cè)試參數(shù),即安卓設(shè)備需要運(yùn)行的待測(cè)試應(yīng)用安裝包的名稱。安卓設(shè)備接收到測(cè)試平臺(tái)發(fā)送的運(yùn)行指令,根據(jù)運(yùn)行指令中的待測(cè)試應(yīng)用安裝包的名稱找到待測(cè)試應(yīng)用安裝包,并在安卓設(shè)備上運(yùn)行該待測(cè)試應(yīng)用安裝包。
在待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行的過程中,會(huì)產(chǎn)生大量的對(duì)象,需要對(duì)安卓設(shè)備中的內(nèi)存進(jìn)行垃圾回收。因此,當(dāng)待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行結(jié)束后,測(cè)試平臺(tái)對(duì)安卓設(shè)備上的垃圾回收日志進(jìn)行收集。通過對(duì)垃圾回收日志的分析,來(lái)確定安卓設(shè)備是否存在內(nèi)存抖動(dòng)現(xiàn)象。
在本發(fā)明的一個(gè)實(shí)施例中,所述步驟s1在測(cè)試平臺(tái)對(duì)安卓設(shè)備進(jìn)行測(cè)試之前還包括:使用python語(yǔ)言在測(cè)試平臺(tái)上編寫測(cè)試腳本,并初始化測(cè)試腳本參數(shù),所述測(cè)試腳本參數(shù)包括待測(cè)試應(yīng)用安裝包的名稱和待測(cè)試應(yīng)用安裝包在安卓設(shè)備上的預(yù)設(shè)運(yùn)行時(shí)長(zhǎng)。
在測(cè)試平臺(tái)對(duì)安卓設(shè)備進(jìn)行測(cè)試之前,預(yù)先在測(cè)試平臺(tái)上使用python語(yǔ)言來(lái)編寫測(cè)試腳本,并且初始化測(cè)試腳本的參數(shù),其中,測(cè)試腳本參數(shù)主要包括待測(cè)試應(yīng)用安裝包的名稱和待測(cè)試應(yīng)用安裝包在安卓設(shè)備上的預(yù)設(shè)運(yùn)行時(shí)長(zhǎng)。
在本發(fā)明的另一個(gè)實(shí)施例中,所述步驟s2包括:使用測(cè)試平臺(tái)上的命令行monkey工具向安卓設(shè)備發(fā)送運(yùn)行指令,所述運(yùn)行指令中包括測(cè)試腳本參數(shù);根據(jù)所述測(cè)試腳本參數(shù)中的待測(cè)試應(yīng)用安裝包的名稱,在安卓設(shè)備上找到待測(cè)試應(yīng)用安裝包,并根據(jù)測(cè)試腳本參數(shù)中的預(yù)設(shè)運(yùn)行時(shí)長(zhǎng),在安卓設(shè)備上運(yùn)行所述待測(cè)試應(yīng)用安裝包。
在測(cè)試平臺(tái)對(duì)安卓設(shè)備進(jìn)行測(cè)試時(shí),獲取預(yù)先編寫好的測(cè)試腳本參數(shù),即待測(cè)試應(yīng)用安裝包的名稱和待測(cè)試應(yīng)用安裝包的預(yù)設(shè)運(yùn)行時(shí)長(zhǎng)。根據(jù)測(cè)試腳本參數(shù),采用monkey工具向安卓平臺(tái)發(fā)送運(yùn)行指令,其中,運(yùn)行指令中包括腳本測(cè)試參數(shù)。接收到運(yùn)行指令,安卓設(shè)備根據(jù)運(yùn)行指令中的待測(cè)試應(yīng)用安裝包的名稱,找到待測(cè)試應(yīng)用安裝包,并將待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行預(yù)設(shè)運(yùn)行時(shí)長(zhǎng)。其中,monkey程序在模擬器或者真實(shí)設(shè)備運(yùn)行的時(shí)候,monkey程序會(huì)產(chǎn)生一定數(shù)量或一定時(shí)間內(nèi)的隨機(jī)事件,用來(lái)模擬用戶的操作,如點(diǎn)擊、按鍵或手勢(shì)等來(lái)模擬用戶的操作。根據(jù)monkey工具模擬的這些用戶的操作在安卓設(shè)備上運(yùn)行待測(cè)試應(yīng)用安裝包。
在本發(fā)明的另一個(gè)實(shí)施例中,所述步驟s3具體包括:檢測(cè)安卓設(shè)備的系統(tǒng)版本;當(dāng)待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行后,根據(jù)安卓設(shè)備的不同系統(tǒng)版本,對(duì)與安卓設(shè)備的系統(tǒng)版本對(duì)應(yīng)的虛擬機(jī)上的垃圾回收日志進(jìn)行收集。
在測(cè)試平臺(tái)對(duì)安卓設(shè)備上的垃圾回收日志收集之前,先檢測(cè)安卓設(shè)備的系統(tǒng)版本,由于安卓設(shè)備的系統(tǒng)版本不同,運(yùn)行待測(cè)試應(yīng)用安裝包是在不同的虛擬機(jī)中運(yùn)行的,那么觸發(fā)垃圾回收機(jī)制產(chǎn)生的垃圾回收日志也會(huì)在不同的虛擬機(jī)中。安卓設(shè)備的系統(tǒng)版本在5.0之后,其中的虛擬機(jī)由dalvik虛擬機(jī)變成了art虛擬機(jī),所以在開始對(duì)安卓設(shè)備上的垃圾回收日志進(jìn)行收集前,需要識(shí)別當(dāng)前安卓設(shè)備的系統(tǒng)版本。測(cè)試平臺(tái)根據(jù)當(dāng)前安卓設(shè)備的不同系統(tǒng)版本,需要對(duì)不同的虛擬機(jī)中的垃圾回收日志進(jìn)行回收。
當(dāng)安卓設(shè)備的系統(tǒng)版本小于5.0時(shí),收集安卓設(shè)備中所有的dalvik日志,并通過測(cè)試腳本遍歷dalvik日志,獲取由于應(yīng)用程序調(diào)用接口觸發(fā)的垃圾回收機(jī)制而生成的垃圾回收日志;當(dāng)安卓設(shè)備的系統(tǒng)版本大于等于5.0時(shí),收集安卓設(shè)備中所有的art日志,并通過測(cè)試腳本遍歷art日志,獲取由于應(yīng)用程序調(diào)用接口觸發(fā)的垃圾回收機(jī)制而生成的垃圾回收日志。
當(dāng)安卓設(shè)備的系統(tǒng)版本小于5.0,收集垃圾回收日志的過程為:dalvik虛擬機(jī)運(yùn)行時(shí)垃圾回收機(jī)制gc類型如下:
(1)gc_for_malloc:表示是在堆上分配對(duì)象時(shí)內(nèi)存不足觸發(fā)的垃圾回收機(jī)制gc。
(2)gc_concurrent:當(dāng)應(yīng)用程序的堆內(nèi)存達(dá)到一定量時(shí),或者可以理解為堆內(nèi)存快要滿的時(shí)候,系統(tǒng)會(huì)自動(dòng)觸發(fā)垃圾回收機(jī)制gc操作來(lái)釋放內(nèi)存。
(3)gc_explicit:表示是應(yīng)用程序調(diào)用system.gc、vmruntime.gc接口或者收到sigusr1信號(hào)時(shí)觸發(fā)的垃圾回收機(jī)制gc。
(4)gc_before_oom:表示是在準(zhǔn)備拋oom異常之前進(jìn)行的最后努力而觸發(fā)的垃圾回收機(jī)制gc。
其中,gc_for_malloc、gc_concurrent和gc_before_oom三種類型的垃圾回收機(jī)制gc都是在分配對(duì)象的過程觸發(fā)的,而gc_explicit則是導(dǎo)致內(nèi)存抖動(dòng)的主要原因。在測(cè)試平臺(tái)上編寫的測(cè)試腳本通過過濾類型為gc_explicit的垃圾回收日志。預(yù)先收集所有的dalvik日志,測(cè)試腳本通過遍歷dalvik日志,獲取帶gc_explicit關(guān)鍵字部分的垃圾回收日志,截取出該部分的垃圾回收日志和生成垃圾回收日志的時(shí)間戳。
當(dāng)安卓設(shè)備的系統(tǒng)版本大于等于5.0時(shí),art虛擬機(jī)運(yùn)行時(shí)垃圾回收回收gc類型如下:
(1)kgccauseforalloc:當(dāng)要為對(duì)象分配內(nèi)存的時(shí)候發(fā)現(xiàn)內(nèi)存不夠的情況下引起的垃圾回收機(jī)制gc,這種情況下的垃圾回收機(jī)制gc會(huì)stopworld。
(2)kgccausebackground:當(dāng)內(nèi)存達(dá)到一定閥值的時(shí)候會(huì)觸發(fā)垃圾回收機(jī)制gc,不會(huì)引起stopworld。
(3)kgccauseexplicit:調(diào)用的時(shí)候進(jìn)行的垃圾回收機(jī)制gc,如果art打開了這個(gè)選項(xiàng)的情況下,在system.gc的時(shí)候會(huì)進(jìn)行垃圾回收機(jī)制gc進(jìn)行垃圾回收。
其中,art運(yùn)行庫(kù)下kgccauseexplicit標(biāo)記的是調(diào)用接口時(shí)進(jìn)行的垃圾回收機(jī)制gc,是導(dǎo)致內(nèi)存抖動(dòng)的主要原因。在測(cè)試平臺(tái)上編寫的測(cè)試腳本通過過濾類型為kgccauseexplici的垃圾回收日志。測(cè)試平臺(tái)預(yù)先收集所有的art日志,測(cè)試腳本通過遍歷art日志獲取帶kgccauseexplici關(guān)鍵字部分的有效垃圾回收日志,截取出該部分的垃圾回收日志和生成該垃圾回收日志的時(shí)間戳)。
在本發(fā)明的另一個(gè)實(shí)施例中,所述垃圾回收日志中包括生成垃圾回收日志的時(shí)間戳;所述步驟s4對(duì)所述垃圾回收日志進(jìn)行分析,來(lái)確定安卓設(shè)備是否存在內(nèi)存抖動(dòng)具體包括:s41,根據(jù)生成垃圾回收日志的時(shí)間戳,統(tǒng)計(jì)安卓設(shè)備回收垃圾的頻率以及在預(yù)設(shè)時(shí)間內(nèi)回收垃圾的次數(shù);s42,根據(jù)安卓設(shè)備回收垃圾的頻率和在預(yù)設(shè)時(shí)間內(nèi)回收垃圾的次數(shù),確定安卓設(shè)備中是否存在內(nèi)存抖動(dòng)。
其中,步驟s42具體包括:當(dāng)安卓設(shè)備回收垃圾的頻率小于預(yù)設(shè)頻率且安卓設(shè)備在預(yù)設(shè)時(shí)間內(nèi)回收垃圾的次數(shù)小于預(yù)設(shè)次數(shù)時(shí),安卓設(shè)備不存在內(nèi)存抖動(dòng),否則,安卓設(shè)備存在內(nèi)存抖動(dòng)。
比如,在直播應(yīng)用中,每秒垃圾回收頻率不能超過1(針對(duì)短時(shí)間內(nèi)有大量顯示gc的場(chǎng)景)且連續(xù)五秒的垃圾回收總數(shù)不能超過5(針對(duì)較為平緩的顯示gc,用戶的感知可能不是很明顯的場(chǎng)景)。針對(duì)這個(gè)條件,對(duì)比收集的安卓設(shè)備中的垃圾回收日志,如果其gc_explicit類型的垃圾回收頻率過高,則判斷安卓設(shè)備存在內(nèi)存抖動(dòng),并將手機(jī)到的垃圾回收日志持久保存,提供給開發(fā)人員定位和解決問題。
其中,需要說(shuō)明的是,垃圾回收的頻率是指每秒內(nèi)回收垃圾的次數(shù),即每一秒都會(huì)去檢測(cè)垃圾回收的頻率,只要是其中有一秒垃圾回收的次數(shù)大于預(yù)設(shè)次數(shù),比如,每秒回收垃圾的次數(shù)超過10次,則認(rèn)為內(nèi)存存在抖動(dòng),對(duì)垃圾回收頻率的測(cè)試可以看做短時(shí)間內(nèi)的測(cè)試,比如,在一秒的時(shí)間內(nèi)發(fā)生了一個(gè)瞬時(shí)垃圾回收的高峰,那么此時(shí)可以認(rèn)為內(nèi)存發(fā)生了瞬時(shí)抖動(dòng)。而對(duì)預(yù)設(shè)時(shí)間內(nèi)垃圾回收的次數(shù)進(jìn)行檢測(cè),比如,設(shè)定10秒內(nèi)垃圾回收的次數(shù)不能超過70次,若超過這個(gè)次數(shù),則認(rèn)為內(nèi)存在這10內(nèi)是存在抖動(dòng)的。例如,在10秒內(nèi),垃圾回收的次數(shù)為70次,每秒內(nèi)回收垃圾的次數(shù)為7,并未超過10次,從垃圾回收的頻率這個(gè)條件來(lái)看,內(nèi)存是不存在抖動(dòng)的。因此,本實(shí)施例在垃圾回收的頻率設(shè)定的條件上,還設(shè)定了在連續(xù)的預(yù)設(shè)時(shí)間內(nèi)垃圾回收的次數(shù)不能超過預(yù)設(shè)次數(shù),預(yù)設(shè)時(shí)間通常比1秒長(zhǎng),如前所述,在10秒內(nèi)回收垃圾的次數(shù)為70次,這樣計(jì)算每秒內(nèi)的頻率是沒有超過10次的,但是依然認(rèn)為在10秒內(nèi)存在抖動(dòng),這是較長(zhǎng)時(shí)間內(nèi)的測(cè)試。采用兩個(gè)條件共同確定內(nèi)存是否發(fā)生了抖動(dòng),準(zhǔn)確性更高。
在本發(fā)明的另一個(gè)實(shí)施例中,根據(jù)收集的垃圾回收日志,繪制安卓設(shè)備的剩余內(nèi)存與時(shí)間對(duì)應(yīng)關(guān)系曲線圖表。利用圖表來(lái)展示安卓設(shè)備的內(nèi)存抖動(dòng)情況,更加直觀。
實(shí)施例2、為本發(fā)明另一個(gè)實(shí)施例的內(nèi)存抖動(dòng)自動(dòng)化測(cè)試裝置,包括參數(shù)獲取模塊21、指令發(fā)送模塊22、日志收集模塊23和分析模塊24。
參數(shù)獲取模塊21,用于當(dāng)檢測(cè)到安卓設(shè)備與測(cè)試平臺(tái)連接成功后,獲取測(cè)試腳本參數(shù);
指令發(fā)送模塊22,用于根據(jù)所述測(cè)試腳本參數(shù),使用測(cè)試平臺(tái)上的monkey工具向安卓設(shè)備發(fā)送運(yùn)行指令,以使待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行;
日志收集模塊23,用于基于待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行后,收集安卓設(shè)備上的垃圾回收日志;
分析模塊24,用于對(duì)所述垃圾回收日志進(jìn)行分析,來(lái)確定安卓設(shè)備是否存在內(nèi)存抖動(dòng)。
參見圖3,內(nèi)存抖動(dòng)自動(dòng)化測(cè)試裝置還包括編寫模塊25、檢測(cè)模塊26和繪制模塊27。
腳本編寫模塊25,用于使用python語(yǔ)言在測(cè)試平臺(tái)上編寫測(cè)試腳本,并初始化測(cè)試腳本參數(shù),所述測(cè)試腳本參數(shù)包括待測(cè)試應(yīng)用安裝包的名稱和待測(cè)試應(yīng)用安裝包在安卓設(shè)備上的預(yù)設(shè)運(yùn)行時(shí)長(zhǎng)。
所述指令發(fā)送模塊22具體用于:
使用測(cè)試平臺(tái)上的命令行monkey工具向安卓設(shè)備發(fā)送運(yùn)行指令,所述運(yùn)行指令中包括測(cè)試腳本參數(shù);
根據(jù)所述測(cè)試腳本參數(shù)中的待測(cè)試應(yīng)用安裝包的名稱,在安卓設(shè)備上找到待測(cè)試應(yīng)用安裝包,并根據(jù)測(cè)試腳本參數(shù)中的預(yù)設(shè)運(yùn)行時(shí)長(zhǎng),在安卓設(shè)備上運(yùn)行所述待測(cè)試應(yīng)用安裝包。
檢測(cè)模塊26,用于檢測(cè)安卓設(shè)備的系統(tǒng)版本;
從而,所述日志收集模塊23具體包括:
當(dāng)待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行后,根據(jù)安卓設(shè)備的不同系統(tǒng)版本,對(duì)與安卓設(shè)備的系統(tǒng)版本對(duì)應(yīng)的虛擬機(jī)上的垃圾回收日志進(jìn)行收集。
參加圖4,分析模塊24具體包括統(tǒng)計(jì)子單元241和確定子單元242,其中,垃圾回收日志中包括生成垃圾回收日志的時(shí)間戳,統(tǒng)計(jì)子單元241,用于根據(jù)生成垃圾回收日志的時(shí)間戳,統(tǒng)計(jì)安卓設(shè)備回收垃圾的頻率以及在預(yù)設(shè)時(shí)間內(nèi)回收垃圾的次數(shù)。確定子單元242,用于根據(jù)安卓設(shè)備回收垃圾的頻率和在預(yù)設(shè)時(shí)間內(nèi)回收垃圾的次數(shù),確定安卓設(shè)備中是否存在內(nèi)存抖動(dòng)。
具體的,確定子單元242具體用于當(dāng)安卓設(shè)備回收垃圾的頻率小于預(yù)設(shè)頻率且安卓設(shè)備在預(yù)設(shè)時(shí)間內(nèi)回收垃圾的次數(shù)小于預(yù)設(shè)次數(shù)時(shí),安卓設(shè)備不存在內(nèi)存抖動(dòng),否則,安卓設(shè)備存在內(nèi)存抖動(dòng)。
基于上述圖2、圖3和圖4對(duì)應(yīng)實(shí)施例所提供的內(nèi)存抖動(dòng)自動(dòng)化測(cè)試裝置,本發(fā)明還提供了一種內(nèi)存抖動(dòng)自動(dòng)化測(cè)試裝置的測(cè)試設(shè)備。參見圖5,該內(nèi)存抖動(dòng)自動(dòng)化測(cè)試裝置的測(cè)試設(shè)備包括:處理器(processor)501、存儲(chǔ)器(memory)502、通信接口(communicationsinterface)503和總線504;
其中,處理器501、存儲(chǔ)器502及通信接口503分別通過總線504完成相互間的通信;
通信接口503用于該測(cè)試設(shè)備與內(nèi)存抖動(dòng)自動(dòng)化測(cè)試裝置的通信設(shè)備之間的信息傳輸;
處理器501用于調(diào)用存儲(chǔ)器502中的程序指令,以執(zhí)行上述圖1對(duì)應(yīng)實(shí)施例所提供的內(nèi)存抖動(dòng)自動(dòng)化測(cè)試方法,例如包括:當(dāng)檢測(cè)到安卓設(shè)備與測(cè)試平臺(tái)連接成功后,獲取測(cè)試腳本參數(shù);根據(jù)所述測(cè)試腳本參數(shù),使用測(cè)試平臺(tái)上的命令行monkey工具向安卓設(shè)備發(fā)送運(yùn)行指令,以使待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行;基于待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行后,收集安卓設(shè)備上的垃圾回收日志;對(duì)所述垃圾回收日志進(jìn)行分析,來(lái)確定安卓設(shè)備是否存在內(nèi)存抖動(dòng)。
本發(fā)明公開一種計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括存儲(chǔ)在非暫態(tài)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上的計(jì)算機(jī)程序,該計(jì)算機(jī)程序包括程序指令,當(dāng)程序指令被計(jì)算機(jī)執(zhí)行時(shí),計(jì)算機(jī)能夠執(zhí)行上述圖1對(duì)應(yīng)實(shí)施例所提供的內(nèi)存抖動(dòng)自動(dòng)化測(cè)試方法,例如包括:當(dāng)檢測(cè)到安卓設(shè)備與測(cè)試平臺(tái)連接成功后,獲取測(cè)試腳本參數(shù);根據(jù)所述測(cè)試腳本參數(shù),使用測(cè)試平臺(tái)上的命令行monkey工具向安卓設(shè)備發(fā)送運(yùn)行指令,以使待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行;基于待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行后,收集安卓設(shè)備上的垃圾回收日志;對(duì)所述垃圾回收日志進(jìn)行分析,來(lái)確定安卓設(shè)備是否存在內(nèi)存抖動(dòng)。
本發(fā)明提供一種非暫態(tài)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),該非暫態(tài)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)計(jì)算機(jī)指令,該計(jì)算機(jī)指令使計(jì)算機(jī)執(zhí)行上述圖1對(duì)應(yīng)實(shí)施例所提供的內(nèi)存抖動(dòng)自動(dòng)化測(cè)試方法,例如包括:當(dāng)檢測(cè)到安卓設(shè)備與測(cè)試平臺(tái)連接成功后,獲取測(cè)試腳本參數(shù);根據(jù)所述測(cè)試腳本參數(shù),使用測(cè)試平臺(tái)上的命令行monkey工具向安卓設(shè)備發(fā)送運(yùn)行指令,以使待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行;基于待測(cè)試應(yīng)用安裝包在安卓設(shè)備上運(yùn)行后,收集安卓設(shè)備上的垃圾回收日志;對(duì)所述垃圾回收日志進(jìn)行分析,來(lái)確定安卓設(shè)備是否存在內(nèi)存抖動(dòng)。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來(lái)完成,前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:rom、ram、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所描述的內(nèi)存抖動(dòng)自動(dòng)化測(cè)試裝置的測(cè)試設(shè)備等實(shí)施例僅僅是示意性的,其中作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動(dòng)的情況下,即可以理解并實(shí)施。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實(shí)施方式可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如rom/ram、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個(gè)實(shí)施例或者實(shí)施例的某些部分方法。
本發(fā)明提供的一種內(nèi)存抖動(dòng)自動(dòng)化測(cè)試方法及裝置,采用python語(yǔ)言編寫測(cè)試腳本,并結(jié)合android自帶的命令行monkey工具對(duì)安卓設(shè)備的內(nèi)存抖動(dòng)進(jìn)行自動(dòng)化測(cè)試,在保證測(cè)試的穩(wěn)定性的同時(shí),填補(bǔ)了安卓設(shè)備內(nèi)存抖動(dòng)檢測(cè)的空白。在進(jìn)行內(nèi)存抖動(dòng)分析時(shí),通過垃圾回收的頻率以及在預(yù)定時(shí)間內(nèi)垃圾回收的次數(shù)進(jìn)行分析,能夠準(zhǔn)確判斷按照卓設(shè)備是否存在內(nèi)存抖動(dòng)。
最后,本申請(qǐng)的方法僅為較佳的實(shí)施方案,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。