Android App自動化性能測試探究
作者:網絡轉載 發布時間:[ 2016/8/9 13:21:55 ] 推薦標簽:性能測試 app測試
Android App的性能測試是移動測試過程中必不可少的一個環節。在我們項目組內,性能測試的過程是這樣的,先設置測試場景,然后一邊手工執行場景,一邊通過工具獲取性能數據,為了減少誤差,一個場景一般重復執行3-5次,測試完后將各種性能數據整理成報告。這個過程如果是一個經驗豐富的測試工程師去做,可能要花半天到時間,而如果是一個新人去做,甚至可能要花兩天時間。而且有時候還會遇到,剛測完,開發說優化了性能,又需要重新測試。這還只是一個Android端的時間,如果再加上iOS端,時間加倍。對于這樣一個現狀,我們急需探索出一種自動化的方式提高性能測試的效率。本文接下來將要介紹云測試平臺在自動化性能測試方面的探索和成果。
需求分析
作為一個負責任的測試開發工程師,我們首先要搞清楚需求,即產品線的性能測試到底要怎么測,要測哪些數據。于是,我跟著參與了產品線的性能測試方案及標準的討論。了解到的性能測試需要采集的數據有:1.響應時間;2.耗電量;3.CPU,內存消耗,網絡流量;4.渲染幀率。而這幾組數據需要覆蓋的測試場景大概有16種,如下表所示。
方案調研
UI自動化與性能測試相結合
在Android端,獲取性能數據的方式有很多種,可以通過開源工具采集,可以通過adb命令獲取,也可以調用系統API獲取。各種方法采集的數據基本差別不大,重點是場景操作和數據整理比較麻煩。既然要提高測試效率,那好的方式肯定是通過自動化來解決。自動化的框架有很多種,這里不一一做討論了,我們采用的是Appium框架,但是做了二次封裝和改進,易用性更好。關于云測試平臺UI自動化功能的使用方法介紹,大家可以參考云測試平臺幫助文檔一文。
測試方案
對于CPU,內存,FPS,流量這幾組數據,云測平臺早可以提供測試了。通過一個與UI自動化并行的線程來發送adb命令獲取應用的性能數據。我們需要解決的是如何設置性能測試的起點和終點,還有一個場景多次重復測試的問題。
那么我們需要想辦法測試響應時間,我們采用的方案是設置一個待加載頁面的基準控件,利用Appium的元素查找功能一直循環查找,一旦控件找到了,則認為頁面加載成功,這中間的時間差即為頁面響應時間。這個時間雖然沒有代碼插樁準確,但誤差范圍基本控制在100ms內,對整體測試結果的影響不大。
方案實施
開啟一個性能測試的線程
關于獲取方式前面也介紹了,話不多說,直接上代碼:
@Override
public void run() {
// TODO Auto-generated method stub
this.running = true;
while (running) {
String time = String.valueOf(System.currentTimeMillis());
time = CalendarDate.GetCurrentTime();
//獲取內存數據
int [] memArray = AndroidPerformanceTools.getMemoryInfo(androidPerformance.getPkgname(), androidPerformance.getDevice());
int totalMem = memArray[0];
int appMem = memArray[1];
//獲取CPU數據
int cpuUsage = AndroidPerformanceTools.getCPUInfo(androidPerformance.getPkgname(), androidPerformance.getDevice());
//獲取FPS
float fps = AndroidPerformanceTools.getFPSInfo(androidPerformance.getPkgname(), androidPerformance.getDevice());
//獲取流量數據
long [] trafficArray = AndroidPerformanceTools.getTrafficInfo(androidPerformance.getPkgname(), androidPerformance.getDevice());
long totalTrffic = trafficArray[0];
long recTraffic = trafficArray[1];
long sndTraffic = trafficArray[2];
//數據初始化
if (this.androidPerformance.getAndroidPerformanceData().getInittotal() == -1
&& totalTrffic > 0) {
this.androidPerformance.getAndroidPerformanceData().setInittotal(totalTrffic);
this.androidPerformance.getAndroidPerformanceData().setInitrec(recTraffic);
this.androidPerformance.getAndroidPerformanceData().setInitsnd(sndTraffic);
}
//匯總數據
MemInfo memInfo = new MemInfo(time, totalMem, appMem);
FPSInfo fpsInfo = new FPSInfo(time, fps);
CPUInfo cpuInfo = new CPUInfo(time, cpuUsage);
TrafficInfo trafficInfo = new TrafficInfo(time, totalTrffic, recTraffic, sndTraffic);
this.androidPerformance.getAndroidPerformanceData().getCpuinfolist().add(cpuInfo);
this.androidPerformance.getAndroidPerformanceData().getMeminfolist().add(memInfo);
this.androidPerformance.getAndroidPerformanceData().getTraffinfolist().add(trafficInfo);
this.androidPerformance.getAndroidPerformanceData().getFpsinfolist().add(fpsInfo);
//設置采集間隔時間
try {
Thread.sleep(this.sleepTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
設置開始和結束的點
由于UI自動化的執行每次都是從啟動App開始,但性能數據的收集卻是針對具體某個場景的,比如進入生活繳費頁面。因此為了方便設置性能測試的開始和結束時間,我們在UI自動化腳本的錄制action中加了兩個字段:startPerformance和stopPerformance。用戶可以在腳本的任意位置加入這兩個action,但主要先后關系,而且需要配對使用。當我們在執行腳本的時候,遇到startPeformance,啟動性能測試線程,然后遇到stopPerformance,則停止線程,并保存數據。一個完整的用于做性能測試的腳本如下所示:
腳本
相關推薦

最新發布
性能測試之測試環境搭建的方法
2020/7/21 15:39:32軟件測試是從什么時候開始被企業所重視的呢?
2020/7/17 9:09:11Android自動化測試框架有哪些?有什么用途?
2020/7/17 9:03:50什么樣的項目適合做自動化?自動化測試人員應具備怎樣的能力?
2020/7/17 8:57:06幾大市面主流性能測試工具測評
2020/7/17 8:52:11RPA機器人能夠快速響應企業需求,是怎么做到的?
2020/7/17 8:48:05Bug可以真正消滅嗎?為什么?
2020/7/17 8:43:03軟件測試基本概念是怎么來的?軟件測試生命周期的形成歷經了什么?
2020/7/16 9:11:10