1. 程式人生 > >app專項效能測試——獲取手機cpu、記憶體、流量

app專項效能測試——獲取手機cpu、記憶體、流量

1、Cpu獲取

瞭解過騰訊GT工具的原始碼,他們用的是通過讀取/proc/stat的資料,將每一個核的cpu使用跟閒置資料提取。使用率永遠是增量式計算。計算方法為100*(cpu忙時增量-cpu整體增量),從計算方法來看,可能會導致負數出現。 getProcessCpuUsage:計算程序的CPU使用率,主要通過"/proc/" + pid + "/stat"來計算,在這裡回京過一系列計算,拿到程序的CPU時間片。這樣的方式比較麻煩,但是相容性可能會好一些。下面方法是直接adb shell top -n來找到應用的top資訊,直接取cpu那一列的數

// 獲取手機指定packagename的cpu佔比
    public static String getCPU(String PackageName) {

        String Cpu = null;
        try {

            Runtime runtime = Runtime.getRuntime();
            Process proc = runtime.exec("adb shell top -n 1| grep " + PackageName);
            try {
                if (proc.waitFor() != 0) {
                    System.err.println("exit value = " + proc.exitValue());
                }
                BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                StringBuffer stringBuffer = new StringBuffer();
                String line = null;
                while ((line = in.readLine()) != null) {
                    stringBuffer.append(line + " ");

                }

                String str1 = stringBuffer.toString();
//                System.out.println("返回是#####"+str1);
                // 以空格區分正則
                String[] toks = str1.split(" +");
/// /            String str2 = str1.substring(str1.indexOf(" " + PackageName) - 46, str1.indexOf(" " + PackageName));
                Cpu = toks[4];
//                System.out.println("當前程序的cpu佔用是*** " + Cpu );

            } catch (InterruptedException e) {
                System.err.println(e);
            } finally {
                try {
                    proc.destroy();
                } catch (Exception e2) {
                }
            }
        } catch (Exception StringIndexOutOfBoundsException) {

            System.out.println("請檢查裝置是否連線");

        }

        return Cpu;

    }

2、記憶體獲取

adb shell dumpsys meminfo|grep packagename

public static double getMemory(String PackageName) {

        double Heap = 0;

        try {
            Runtime runtime = Runtime.getRuntime();
            Process proc = runtime.exec("adb shell dumpsys meminfo|grep " + PackageName);
            try {
                if (proc.waitFor() != 0) {
                    System.err.println("exit value = " + proc.exitValue());
                }
                BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                StringBuffer stringBuffer = new StringBuffer();
                String line = null;
                while ((line = in.readLine()) != null) {
                    stringBuffer.append(line + " ");

                }

                String str1 = stringBuffer.toString();
                String str2 = str1.substring(str1.indexOf(": "+PackageName) - 12, str1.indexOf(": "+PackageName)).trim();
                String str3 = str2.substring(0, str2.indexOf("K"));
                str3 = str3.trim().replace(",","");
                Heap = Double.parseDouble(str3) / 1024;
                DecimalFormat df = new DecimalFormat("#.000");
                String memory = df.format(Heap);
                Heap = Double.parseDouble(memory);
                System.out.println(Heap + "MB");
            } catch (InterruptedException e) {
                System.err.println(e);
            } finally {
                try {
                    proc.destroy();
                } catch (Exception e2) {
                }
            }
        }

        catch (Exception StringIndexOutOfBoundsException) {
            System.out.print("請檢查裝置是否連線");

        }
        return Heap;
    }

3、獲取流量

通過看 /proc/$pid/net/dev,檢視應用流量使用情況。wlan0: 一行顯示了接受、傳送流量的位元組數,把兩個相加就是app累計消耗的流量(bytes),除以1024得到kbps。開啟手機飛航模式、會使該資料清零。

下面通過時間查計算流量,兩次獲取流量除以時間(下面用的是1秒,所以得到的每秒消耗流量 kbps/s)

public static double getFlowAction(String PackageName) {
        double flowAction = 0;
        try {

            String Pid = PID(PackageName);

            Runtime runtime = Runtime.getRuntime();
            Process proc = runtime.exec("adb shell cat /proc/" + Pid + "/net/dev");
            try {
                if (proc.waitFor() != 0) {
                    System.err.println("exit value = " + proc.exitValue());
                }
                BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                StringBuffer stringBuffer = new StringBuffer();
                String line = null;
                while ((line = in.readLine()) != null) {
                    stringBuffer.append(line + " ");

                }
                String str1 = stringBuffer.toString();
                String str2 = str1.substring(str1.indexOf("wlan0:"), str1.indexOf("wlan0:") + 100);
//                System.out.println("先獲取的句子  " + str2);
//              空格分成字串陣列取第2個,第10個數,分別是傳送流量和接受流量
                String[] toks = str2.split(" +");
                String str4 = toks[1];
                String str6 = toks[9];
                int b = Integer.parseInt(str4);
                int a = Integer.parseInt(str6);

                double sendFlow = a / 1024 ;
                double revFlow = b / 1024 ;
                flowAction = sendFlow + revFlow;
                System.out.println("當前應用使用流量為: " + flowAction + "Kbps");
            } catch (InterruptedException e) {
                System.err.println(e);
            } finally {
                try {
                    proc.destroy();
                } catch (Exception e2) {
                }
            }
        } catch (Exception StringIndexOutOfBoundsException) {
            System.out.println("請檢查裝置是否連線");

        }

        return flowAction;
    }

    public static double getFlow() {
        double flow = 0;
        double flowbefore = 0;
        double flowafter = 0;
        flowbefore = getFlowAction("com.umetrip.android.msky.app");
        try {
            sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        flowafter = getFlowAction("com.umetrip.android.msky.app");
        flow = flowafter - flowbefore;
        return flow;
    }

相關推薦

app專項效能測試——獲取手機cpu記憶體流量

1、Cpu獲取瞭解過騰訊GT工具的原始碼,他們用的是通過讀取/proc/stat的資料,將每一個核的cpu使用跟閒置資料提取。使用率永遠是增量式計算。計算方法為100*(cpu忙時增量-cpu整體增量),從計算方法來看,可能會導致負數出現。 getProcessCpuUsag

loadrunner效能測試手機app

本文從原理與細節上詳細介紹一下loadrunner錄製APP指令碼,在這之前本人依照網上步驟試驗多次仍不成功,原因是網路代理配置錯誤。 測試方法 loadrunner壓力測試APP.png APP的壓力測試與WEB或TCP的略有不同,loadrunner錄製網頁

獲取Android手機CPU型別 ARMARMV7NEON

1 檢視手機CPU資訊 cmd——adb shell——cd /proc------cat cpuinfo 2 獲取cpu的是arm指令集,armv7指令集、還是neon指令集 /** * * [獲取cpu型別和架構] * * @return

linux調優:按照CPU記憶體磁碟IO網路效能監測

系統優化是一項複雜、繁瑣、長期的工作,優化前需要監測、採集、測試、評估,優化後也需要測試、採集、評估、監測,而且是一個長期和持續的過程,不 是說現在優化了,測試了,以後就可以一勞永逸了,也不是說書本上的優化就適合眼下正在執行的系統,不同的系統、不同的硬體、不同的應用優化的重點也不同、 優化的

手機APP介面:設計一個獲取手機驗證碼的功能

現在的專案中,都會涉及到一個手機驗證碼獲取功能 我們今天就來探討下如何更好的設計好這個看似小的功能 給APP設計一個獲取手機驗證碼的介面 根據業務邏輯,初步總結了可能會有以下業務場景 需要用到手機驗證碼的驗證功能 大家來看下圖片吧 login:登入 reg

Linux下java獲取CPU記憶體磁碟IO網路頻寬使用率

原文地址:https://www.cnblogs.com/gisblogs/p/3985393.html 一、CPU 使用proc檔案系統,"proc檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介面。使用者和應用程式可以通過p

批量ssh登入,獲取作業系統CPU記憶體硬碟資訊<shell>

說明:該指令碼讀取machine.txt檔案中的機器名,然後批量ssh登入,獲取每臺機器的作業系統,CPU,記憶體,硬碟等資訊。 使用方法:將檔案儲存為sh,chmod +x filename 為該sh檔案賦予執行許可權。 for line in `cat machine.txt` do

效能測試基礎——(CPU)轉

效能測試基礎——(CPU) 發表於:2017-8-01 11:12  作者:aceaoh   來源:51Testing軟體測試網採編 字型:大 中 小 | 上一篇 | 下一篇 |我要投稿 |&

漫遊測試效能測試(4.4.Linux下記憶體\磁碟\CPU問題的判斷方法)

以vmstat這個工具查詢出來的結果的欄位為解釋的依據。其它監控工具,只需要瞭解每個欄位的說明,其原理類似。 [email protected]:~# vmstat 2  procs -----------memory---------- ---swap-- --

效能測試--系統吞吐量(TPS)使用者併發量效能測試概念和公式

PS:下面是效能測試的主要概念和計算公式,記錄下: 一.系統吞度量要素:   一個系統的吞度量(承壓能力)與request對CPU的消耗、外部介面、IO等等緊密關聯。 單個reqeust 對CPU消耗越高,外部系統介面、IO影響速度越慢,系統吞吐能力越低,反之越高。 系統吞吐量幾個重要引數:QPS

通過python呼叫adb命令對app進行效能測試(6 -1)

上篇文章中講述了adb是什麼,以及常用的命令,下面我們來看下通過adb來檢視手機裝置中的效能引數,首先要檢視apk的包名和預設Activity的名字有好幾種方式,下面介紹2種 第一種 1 開啟cmd 切換目錄D:\tool\android-sdk_r24.

Linux效能優化之CPU記憶體IO優化

 Linux 的效能進行監測,以下是 VPSee 常用的工具: 工具    簡單介紹 top    檢視程序活動狀態以及一些系統狀況 vmstat    檢視系統狀態、硬體和系統資訊等 iostat    檢視CPU 負載,硬碟狀況 sar    綜合工具,檢視

Qt linux獲取cpu使用率記憶體網路收發速度磁碟讀寫速度磁碟剩餘空間等

#include "resource_minitor.h" #include "sys/statfs.h" resource_minitor::resource_minitor(QObject *parent) : QObject(parent) { connect(&monito

獲取手機號碼所屬省份城市運營商Api介面

/** * 要查詢的電話號碼歸屬地 * http://www.baidu.com/api.php?m=Tel&p=13281000000 * {"province":"u56dbu5ddd","city":"u6210u90fd","supplier":"u8

python功能模組之psutil------ Linux效能CPU磁碟記憶體網絡卡)監控

採集系統的基本效能資訊包括CPU、記憶體、磁碟、網路等,可以完整描述當前系統的執行狀態及質量。psutil模組已經封裝了這些方法,使用者可以根據自身的應用場景,呼叫相應的方法來滿足需求,非常簡單實用。 (1)CPU資訊 Linux作業系統的CPU利用率有以下幾個部分:

如何利用Java獲取系統的資訊(CPU記憶體各碟符使用情況)

/*********************************************************************** * Project: gpsAdapter * Note: Console Application ***********

Linux按照CPU記憶體磁碟IO網路效能監測(強烈推薦)

系統優化是一項複雜、繁瑣、長期的工作,優化前需要監測、採集、測試、評估,優化後也需要測試、採集、評估、監測,而且是一個長期和持續的過程,不 是說現在優化了,測試了,以後就可以一勞永逸了,也不是說書本上的優化就適合眼下正在執行的系統,不同的系統、不同的硬體、不同的應用優化的重

重要硬體瞭解(硬碟記憶體CPU顯示卡)通常是衡量電腦效能的關鍵指標

磁碟,是計算機的外部儲存器中類似磁帶的裝置,將圓形的磁性碟片裝在一個方的密封盒子裡,這樣做的目的是為了防止磁碟表面劃傷,導致資料丟失。磁碟有軟磁碟,硬磁碟。硬磁碟就是機械硬碟。硬碟,是電腦主要的儲存媒介之一,由一個或者多個鋁製或者玻璃制的碟片組成。碟片外覆蓋有鐵磁性材料。硬碟

Android獲取手機Cpu溫度

在最近的專案中,需要獲取手機當前Cpu溫度,網上也有很多文章介紹,這裡記錄一下。 獲取CPU溫度的方式: 在Android系統中,獲取CPU溫度的方法並沒有直接提供給我們開發者,我們可以通過兩種方式來獲取Cpu溫度: 1、 通過讀取手機感測器sensor的溫度近似於手機CPU溫度(當然這種方式只是一個近似的值

Linux下java獲取CPU記憶體磁碟IO網路IO

獲取linux命令執行結果 下面的程式碼用於獲取執行一個Linux命令之後的結果,函式返回一個字串,即命令的執行結果 import java.io.IOException; import java.io.InputStreamReader; i