新四季網

一種基於佔用Android系統智能設備內存和CPU的壓力測試方法

2023-05-25 16:43:36

一種基於佔用Android系統智能設備內存和CPU的壓力測試方法
【專利摘要】本發明涉及一種基於佔用Android系統智能設備內存和CPU的壓力測試方法,在被測設備上安裝agent程序,測試主機首先通過測試腳本運行agent程序,agent程序運行後會啟動一個服務Service,服務中開啟一個線程作為socket服務端監聽客戶端的連接請求;測試主機作為socket客戶端發出連接請求,與agent建立socket連接,通過socket通信機制控制agent程序進行佔用Android系統內存和CPU的行為;agent程序接受到測試主機端發送的佔用內存和CPU的命令後,即開始佔用內存和CPU,使Android系統資源匱乏,為壓力測試提供條件;然後測試主機端開始各項測試工作,完成測試後發出停止佔用內存和CPU的命令,agent程序接收到此項命令便終止佔用系統內存和CPU的行為;最後,測試主機端通過命令斷開與agent程序的socket連接並使agent程序終止運行。
【專利說明】—種基於佔用Android系統智能設備內存和CPU的壓力測試方法
【技術領域】
[0001]本發明涉及一種基於佔用Android系統智能設備內存和CPU的壓力測試方法,屬於軟體可靠性測試【技術領域】,為Android軟體壓力測試提供條件。
【背景技術】
[0002]Google開發的Android系統,作為智慧型手機作業系統之一,是基於Linux平臺的開源手機作業系統,如今已佔據全球智慧型手機作業系統市場大部分的份額。用戶對Android應用的需求與日俱增,所以,為更加快速有效地開發出穩定的應用,測試技術就顯得尤為重要。
[0003]壓力測試是保證軟體質量的重要測試工作,在軟體所需資源(內存、CPU等)匱乏的條件下進行測試工作。然而在Android系統中進行資源的佔用與傳統的計算機中資源佔用情況是有較大區別的,例如,Android框架對每個進程的內存可用大小限制在幾十M,這就給內存佔用增加了難度。
[0004]Monkey是Android系統自帶的一個命令行工具,它通過向系統發送偽隨機的用戶事件流,實現對應用程式進行壓力測試。但是Monkey只是模擬巨大的工作負荷(一連串事件的執行)以查看應用程式是否有異常情況出現,它並沒有對系統的資源進行大量主動的佔用,也就是說,Monkey沒有能讓應用程式在系統資源匱乏的條件下進行測試工作。

【發明內容】

[0005]本發明的技術解決問題:克服現有技術的不足,提供一種佔用Android系統智能設備內存和CPU以支持壓力測試方法。軟體測試中測試主機端通過socket通信能隨時控制佔用或停止佔用被測設備內存和CPU,更好的支持了壓力測試的過程;agent程序使用JNI技術實現對系統內存的佔用和停止佔用,擺脫了 android框架對進程所能佔用內存的限制;由於提高了 agent程序中各服務的優先權,使得對系統內存和CPU的佔用更加穩定。
[0006]本發明技術解決方案:一種基於佔用Android系統智能設備內存和CPU的壓力測試方法,實現步驟如下:
[0007](I)在被測設備上安裝Android的應用程式即agent程序,測試人員在測試主機上通過編寫測試腳本對被測設備上的軟體進行測試;
[0008](2)壓力測試時,測試主機首先通過測試腳本運行agent程序,agent程序運行後會啟動一個服務Service,服務中開啟一個線程作為socket服務端監聽客戶端的連接請求;
[0009](3)測試主機作為socket客戶端發出連接請求,與agent建立socket連接,通過socket通信機制控制agent程序進行佔用Android系統內存和CPU的行為;
[0010](4)agent程序接受到測試主機端發送的佔用內存和CPU的命令後,即開始佔用內存和CPU,使Android系統資源匱乏,為壓力測試提供條件;[0011](5)然後測試主機端開始各項測試工作,完成測試後發出停止佔用內存和CPU的命令,agent程序接收到此項命令便終止佔用系統內存和CPU的行為;
[0012](6)最後,測試主機端通過命令斷開與agent程序的socket連接並使agent程序終止運行。
[0013]所述步驟(3)中的agent程序進行佔用Android系統內存行為的實現過程為:
[0014](I)首先agent程序通過接受到的佔用Android系統內存的命令後,獲取需要的內存佔用比例大小;
[0015](2)利用 java.lang.ProcessBuilder 類和 java.lang.Process 類創建一個進程,執行「cat/proc/meminfo」命令獲取當前內存使用信息,解析所述的使用信息得到Android系統總的內存大小及當前空閒內存大小;
[0016](3)再根據之前解析的內存佔用比例計算出需要agent程序佔用的內存大小,啟動佔用內存的服務SM,並將所需佔用的內存大小作為消息參數傳遞給SM,服務Sm,啟動後,首先加載之前生成好的動態庫,此動態庫由實現本地方法即佔用內存和停止佔用內存的方法的C++文件生成,在服務中聲明動態庫中的本地方法便可在服務中調用這些本地方法;服務Sm獲取需要佔用的內存大小,然後調用佔用內存的本地方法實現內存佔用操作;
[0017](4)當agent程序接收到停止佔用內存的命令時,即終止服務Smem的運行;服務Smem被銷毀時調用停止佔用內存的本地方法,從而釋放掉自己佔用的內存。
[0018]所述步驟(3)中的agent程序進行佔用Android系統CPU行為的實現過程為:
[0019](I)首先解析命令得到需要把CPU佔用比例之後,利用java.lang.ProcessBuilder類和java.lang.Process類創建一個進程,執行本地命令「top」並解析其返回結果得到當前的CPU使用率;
[0020](2)利用當前CPU使用率和需要的CPU佔用比例,計算出需要agent佔用的CPU比例,把此比例作為消息參數傳遞給佔用CPU的服務Scpu並啟動Sctu ;
[0021](3)服務Sepu啟動後,首先獲得需要佔用CPU的比例大小,之後便啟動線程佔用一定比例的CPU,每個線程中是一個循環,以一定的時間(幾十毫秒)為周期,每個周期分為兩段時間,一段時間內線程做空循環以佔用CPU,另一段時間調用Thread, sleep O方法睡眠以讓出CPU,通過控制每個周期內兩段時間的比例決定進程佔單個CPU的比例;
[0022](4)當agent程序接收到停止佔用CPU的命令時,即終止服務Sepu,Scpu在結束前終止所有之前開啟的佔用CPU的線程,結束對CPU的佔用。
[0023]本發明原理:首先,對Android系統內存的佔用,由於Android框架限制每個進程所能使用的內存,超出內存限制就會報出00M (Out of Memory)異常,為了能夠佔用隨意大小的內存,使用JNI技術,調用C++代碼,在C++代碼中使用mallocO方法分配一定的內存,這種方法佔用的內存大小是不計入Android對進程所能使用內存的限制的。為確定所需佔用內存的大小,就需要知道系統總的內存大小和當前已用內存大小。在Android程序中利用 java.lang.ProcessBuilder 類和 java.lang.Process 類創建一個進程來執行「cat/proc/meminfo」命令並得到此命令的返回結果,對這些結果信息進行解析得到所需的內存信息。
[0024]在系統CPU的佔用方面,採用多線程方法,啟動一個或多個線程佔用CPU,每個線程在一段時間內一直做一個空循環,另一段時間內通過Thread, sleep 方法睡眠,控制這兩段時間的比例以決定佔用CPU的比例大小。對於單核的設備,確定此比例相對容易,多核的就比較複雜,需多個線程配合,例如,對於雙核的設備,要佔用小於50%的CPU,開啟一個線程佔用CPU並調整其佔用比例來實現,而要佔用大於50%的CPU,可以讓一個線程完全佔用一個核,另一個線程再佔用一定比例CPU來配合完成佔用所需比例的CPU。與佔用內存類似,需獲取當前CPU使用信息以確定要佔用多少比例的CPU,同樣利用java.lang.ProcessBuilder類和java.lang.Process類創建一個進程,執行本地命令「top」並解析其返回結果得到當前的CPU使用信息。
[0025]上述兩項功能是通過在Android程序(agent)中分別啟動一個服務(Service)實現的。在測試工作開始之前,首先將此Android應用程式安裝到被測設備上,進行壓力測試時,測試人員通過adb(Android Debug Bridge)執行shell命令啟動程序,程序運行後會啟動一個服務,服務中開啟一個線程作為socket服務端監聽客戶端的連接請求。客戶端發出socket連接請求,成功建立socket連接後,在需要的時候,向socket服務端發出佔用(停止佔用)內存或CPU的命令,服務端接收到命令後做出相應操作。若是要佔用內存(CPU),則開啟佔用內存(CPU)的服務,程序開始佔用系統內存(CPU);反之,若收到停止佔用內存(CPU)的服務,則停止佔用內存(CPU)服務的運行,釋放所佔內存(CPU)。在佔用與停止佔用內存(CPU)之間便能提供壓力測試的條件(內存、CPU資源的匱乏),測試人員可在這種條件下進行各種測試。
[0026]本發明具有如下優點和積極效果:
[0027]( I)測試人員在測試主機端編寫測試腳本對被測設備上的軟體進行測試時,能通過socket通信控制被測設備上agent程序的動作隨時進行佔用或停止佔用設備的內存和CPU,從而能夠隨時為壓力測試提供系統資源匱乏的條件,更方便了測試腳本的編寫,也更好的支持了壓力測試的過程。
[0028](2)Agent程序中使用JNI技術實現對系統內存的佔用和停止佔用,擺脫了android框架對進程所能佔用內存的限制。
[0029](3)對agent程序中各個服務進行了保護,提升了各個服務的優先權,防止系統在資源匱乏的條件下將agent程序中的服務終止,使agent程序對系統內存和CPU的佔用更加穩定。
【專利附圖】

【附圖說明】
[0030]圖1是本發明測試主機端進行壓力測試的流程示意圖;
[0031]圖2是本發明中agent程序的工作流程示意圖;
[0032]圖3是agent程序的類圖。
【具體實施方式】
[0033]下面將結合附圖和實施示例對本發明作進一步的詳細說明。通過足夠詳細的描述這些實施示例,使得本領域技術人員能夠理解和實踐本發明。在不脫離本發明的主旨和範圍的情況下,可以對實施做出邏輯的、實現的和其他的改變。因此,以下詳細說明不應該被理解為限制意義,本發明的範圍僅僅由權利要求來限定。
[0034]軟體自動化測試工作中,測試人員通過編寫測試腳本控制測試過程,進行壓力測試時,測試主機首先運行之前安裝在被測設備上的用於佔用系統資源的應用程式(agent)。Agent運行後,作為socket服務端等待客戶端連接請求,測試主機作為socket客戶端發出連接請求。在建立socket連接之後,便可通過測試腳本的編寫來與agent進行socket通信,控制agent佔用和停止佔用系統內存和CPU,為所需的壓力測試提供條件。
[0035]壓力測試過程如圖1所示,測試人員在編寫腳本時遵循圖示步驟控制測試,腳本中首先執行語句啟動agent並與之建立socket連接,然後通過socket通信控制agent佔用內存和CPU,這樣便可在內存和CPU資源匱乏的條件下進行各種壓力測試工作,查看被測軟體在資源不充裕的條件下的運行情況。壓力測試工作完成後,在腳本中執行語句,通過socket連接發出停止佔用內存和CPU的命令,然後斷開socket連接並結束agent的運行。
[0036]Agent程序是運行在被測設備上的Android應用程式,開始運行時啟動一個主服務S,主服務開啟一個線程,用於監聽socket連接請求,在socket連接建立後接受並解析客戶端發送過來的命令,根據命令做出相應操作。
[0037]對於佔用系統內存的命令,首先解析命令得到需要把內存佔用率提高到的比例。然後利用 java.lang.ProcessBuilder 類和 java.lang.Process 類創建一個進程執行「cat/proc/meminfo」命令獲取當前內存使用信息,解析這些信息得到系統總的內存大小及當前空閒內存大小,再根據之前解析的內存佔用比例計算出需要agent佔用的內存大小。啟動佔用內存的服務Sm並將所需佔用的內存大小作為消息參數傳遞給SM。服務Sm啟動後,首先加載之前生成好的動態庫,此動態庫由實現本地方法(佔用內存和停止佔用內存的方法)的C++文件生成,在服務中聲明動態庫中的本地方法便可在服務中調用這些本地方法。服務Sm獲取需要佔用的內存大小,然後調用佔用內存的本地方法實現內存佔用操作。
[0038]Socket服務端接收到停止佔用內存的命令時,即終止服務Sm的運行,服務Sm被銷毀時調用停止佔用內存的本地方法,從而釋放掉自己佔用的內存。
[0039]類似地,當收到佔用CPU的命令時,agent主服務S解析命令得到需要把CPU佔用率提高到的比例,之後同樣利用java.lang.ProcessBuilder類和java.lang.Process類創建一個進程,執行本地命令「top」並解析其返回結果得到當前的CPU使用率。有了當前CPU使用率和需要的CPU佔用比例,便能計算出需要agent佔用的CPU比例。把此比例作為消息參數傳遞給佔用CPU的服務Scpu並啟動S-。服務Sctu啟動後,首先獲得需要佔用CPU的比例大小,之後便啟動線程佔用一定比例的CPU。每個線程中是一個循環,以一定的時間(幾十毫秒)為周期,每個周期分為兩段時間,一段時間內線程做空循環以佔用CPU,另一段時間調用Thread, sleep O方法睡眠以讓出CPU。通過控制每個周期內兩段時間的比例決定進程佔單個CPU的比例,例如,若使兩段時間相等,那麼進程一般可佔一個CPU百分之五十左右的使用率。所以,對於單核設備,佔用一定比例的CPU比較容易,可只開啟一個線程,把線程循環周期中做空循環的時間所佔比例設為所需佔用CPU的比例即可。多核的情況就比較複雜,要佔用大比率的CPU就需要多個線程。下面以雙核為例進行說明,假設需要佔用CPU的比例為a,若a小於50%,則開啟一個線程,設置它空循環時間的比例為2a,那麼此線程佔用總的CPU (兩個)的比例即為a左右;在壓力測試中,測試人員需要的是資源匱乏的條件,所以一般情況下要佔用的CPU使用率會比50%大很多,若a大於50%,開啟兩個線程(只開啟單獨的一個線程不能滿足需求),設置一個線程空循環時間的比例為100%,另一個線程空循環時間的比例為(a_50%)*2,這樣兩個線程能佔用a的CPU比例。對於更多核的設備,就需要更多線程協同配合來完成CPU的佔用工作,其原理與雙核類似。
[0040]在需要停止佔用CPU時,銷毀服務Scpu, Sctu在結束前終止所有之前開啟的佔用CPU的線程。
[0041]圖2所示是agent程序的工作過程,agent被啟動之後首先作為socket服務端,監聽客戶端的連接請求,收到socket連接請求並成功建立連接後,agent開始等待客戶端發送過來的命令。通過對命令的解析,agent決定採取何種動作,對於佔用內存、佔用CPU、停止佔用內存、停止佔用CPU的命令所做操作分別是啟動佔用內存的服務開始佔用內存、啟動佔用CPU的服務開始佔用CPU、停止佔用內存的服務、停止佔用CPU的服務,然後繼續等待客戶端發送的命令。當agent收到結束運行的命令時,agent便結束程序運行。
[0042]Agent的類圖如圖3所示,作為一個Android應用程式,agent開始運行時首先是啟動一個活動(Activity),該活動馬上啟動主服務(MainService)並結束自己的運行,從而使agent在後臺運行,主服務創建socket並開始監聽客戶端連接請求。主服務(MainService)、佔用內存的服務(OccupyMemService)和佔用CPU的服務(OccupyCPUService)都繼承了 Service類,MainService負責與測試主機的通信,接受命令通過啟動(停止)OccupyMemService、OccupyCPUService完成對系統內存和CPU的佔用(釋放)。兩個服務OccupyMemService和OccupyCPUService分別實現內存佔用和CPU佔用的功能。
[0043]本發明未詳細闡述部分屬於本領域技術人員公知技術。
【權利要求】
1.一種基於佔用Android系統智能設備內存和CPU的壓力測試方法,其特徵在於步驟如下: 第一步,在被測設備上安裝Android的應用程式即agent程序,測試人員在測試主機上通過編寫測試腳本對被測設備上的軟體進行測試; 第二步,壓力測試時,測試主機首先通過測試腳本運行agent程序,agent程序運行後會啟動一個服務Service,服務中開啟一個線程作為socket服務端監聽客戶端的連接請求; 第三步,測試主機作為socket客戶端發出連接請求,與agent建立socket連接,通過socket通信機制控制agent程序進行佔用Android系統內存和CPU的行為; 第四步,agent程序接受到測試主機端發送的佔用內存和CPU的命令後,即開始佔用內存和CPU,使Android系統資源匱乏,為壓力測試提供條件; 第五步,然後測試主機端開始各項測試工作,完成測試後發出停止佔用內存和CPU的命令,agent程序接收到此項命令便終止佔用系統內存和CPU的行為; 第六步,最後,測試主機端通過命令斷開與agent程序的socket連接並使agent程序終止運行。
2.根據權利要求1所述的基於佔用Android系統智能設備內存和CPU的壓力測試方法,其特徵在於:所述步驟(3)中的agent程序進行佔用Android系統內存行為的實現過程為: (1)首先agent程序接受到佔用Android系統內存的命令後,獲取需要的內存佔用比例大小; (2)利用java.lang.ProcessBuilder 類和 java.lang.Process 類創建一個進程,執行「cat/proc/meminfo」命令獲取當前內存使用信息,解析所述的使用信息得到Android系統總的內存大小及當前空閒內存大小; (3)再根據之前解析的內存佔用比例計算出需要agent程序佔用的內存大小,啟動佔用內存的服務SM,並將所需佔用的內存大小作為消息參數傳遞給SM,服務Sm啟動後,首先加載之前生成好的動態庫,此動態庫由實現本地方法即佔用內存和停止佔用內存的方法的C++文件生成,在服務中聲明動態庫中的本地方法便可在服務中調用這些本地方法;月艮務Sm獲取需要佔用的內存大小,然後調用佔用內存的本地方法實現內存佔用操作; (4)當agent程序接收到停止佔用內存的命令時,即終止服務Smem的運行;服務Smem被銷毀時調用停止佔用內存的本地方法,從而釋放掉自己佔用的內存。
3.根據權利要求1所述的基於佔用Android系統智能設備內存和CPU的壓力測試方法,其特徵在於:所述步驟(3)中的agent程序進行佔用Android系統CPU行為的實現過程為: Cl)首先解析命令得到需要把CPU佔用比例之後,利用java.lang.ProcessBuilder類和java.lang.Process類創建一個進程,執行本地命令「top」並解析其返回結果得到當前的CPU使用率; (2)利用當前CPU使用率和需要的CPU佔用比例,計算出需要agent佔用的CPU比例,把此比例作為消息參數傳遞給佔用CPU的服務Scpu並啟動Sctu ; (3)服務Sepu啟動後,首先獲得需要佔用CPU的比例大小,之後便啟動線程佔用一定比例的CPU,每個線程中是一個循環,以一定的時間為周期,每個周期分為兩段時間,一段時間內線程做空循環以佔用CPU,另一段時間調用Thread, sleep O方法睡眠以讓出CPU,通過控制每個周期內兩段時間的比例決定進程佔單個CPU的比例; (4)當agent程序接收到停止佔用CPU的命令時,即終止服務Sepu,Sepu在結束前終止所有之前開啟的佔 用CPU的線程,結束對CPU的佔用。
【文檔編號】G06F11/36GK103455416SQ201310303706
【公開日】2013年12月18日 申請日期:2013年7月18日 優先權日:2013年7月18日
【發明者】姜博, 沈彥鳴, 高小鵬, 王珂, 陳鵬, 萬寒, 龍翔 申請人:北京航空航天大學

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀