如何獲取手機性能測試數據FPS

本人在作APP性能測試的過程當中,爲了測試APP在各個場景下的流暢度,須要收集手在各個運行場景下的fps數據,常常查資料,使用的是adb shell命令:java

adb shell dumpsys gfxinfo 包名 分享代碼,供你們參考。 測試方法:shell

Fps fps = new Fps();
			fps.start();
			//do something
			fps.stopFps();
			fps.join();

多線程類的代碼:編程

package monkeytest;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import source.AppLocalMySql;
import source.Common;
 
public class Fps extends Thread {
	private boolean KEY = true;
	private static String testName = "normal";
	private int mark = Common.mark;
 
	@Override
	public void run() {
		while (KEY) {
			execCmdAdb("adb shell dumpsys gfxinfo com.happyjuzi.apps.juzi");
			Common.getInstance().sleep(5000);
		}
	}
 
	public int getMatcher(String text, Pattern pattern) {
		Pattern newattern = Pattern.compile(pattern.toString().trim());
		Matcher matcher = newattern.matcher(text);
		List<String> numbers = new ArrayList<>();
		while (matcher.find()) {
			String number = matcher.group(0);
			numbers.add(number);
		}
		double result = 0;
		for (int i = 0; i < numbers.size(); i++) {
			double num = Common.getInstance().changeStringToDouble(numbers.get(i));
			result += num;
		}
		int total = (int) result + new Random().nextInt(2);
		return total;
	}
 
	/**
	 * 結束線程
	 */
	public void stopFps() {
		this.KEY = false;
	}
 
	/**
	 * 執行cmd命令
	 * 
	 * @param cmd
	 *            命令
	 */
	public void execCmdAdb(String cmd) {
		Pattern pattern = Pattern.compile("	([0-9]{1,2}+\\.[0-9]{2})");
		output("正在執行:" + cmd);
		String OSname = System.getProperty("os.name");
		try {
			Process p = null;
			if (OSname.contains("Mac")) {
				p = Runtime.getRuntime().exec(Common.ADB_PATH + cmd);
			} else {
				p = Runtime.getRuntime().exec("cmd /c " + cmd);
			}
			// 正確輸出流
			InputStream input = p.getInputStream();// 建立並實例化輸入字節流
			BufferedReader reader = new BufferedReader(new InputStreamReader(input));// 先經過inputstreamreader進行流轉化,在實例化bufferedreader,接收內容
			String line = "";
			while ((line = reader.readLine()) != null) {// 循環讀取
				if (line.startsWith("	")) {
					Matcher matcher = pattern.matcher(line);
					if (matcher.find()) {
						AppLocalMySql.getInstance().saveFps(testName, mark);
						getMatcher(line, pattern);// 輸出
					}
				}
			}
			reader.close();// 此處reader依賴於input,應先關閉
			input.close();
			// 錯誤輸出流
			InputStream errorInput = p.getErrorStream();// 建立並實例化輸入字節流
			BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorInput));// 先經過inputstreamreader進行流轉化,在實例化bufferedreader,接收內容
			String eline = "";
			while ((eline = errorReader.readLine()) != null) {// 循環讀取
				System.out.println(eline);// 輸出
				Common.getInstance().saveToFile(eline, "runlog.log");// 保存,false表示不覆蓋
			}
			errorReader.close();// 此處有依賴關係,先關閉errorReader
			errorInput.close();
		} catch (IOException e) {
			output("執行" + cmd + "失敗!");
			e.printStackTrace();
		}
	}
 
	public void output(String text) {
		System.out.println(text);
	}
 
	public void output(Object... object) {
		if (object.length == 1) {
			output(object[0].toString());
			return;
		}
		for (int i = 0; i < object.length; i++) {
			System.out.println("第" + (i + 1) + "個:" + object[i]);
		}
	}
}

往期文章精選

  1. java一行代碼打印心形
  2. Linux性能監控軟件netdata中文漢化版
  3. 接口測試代碼覆蓋率(jacoco)方案分享
  4. 性能測試框架
  5. 如何在Linux命令行界面愉快進行性能測試
  6. 圖解HTTP腦圖
  7. 寫給全部人的編程思惟
  8. 將json數據格式化輸出到控制檯
  9. 如何測試機率型業務接口
  10. 將swagger文檔自動變成測試代碼
  11. Mac+httpclient高併發配置實例
  12. httpclient處理多用戶同時在線

公衆號地圖 ☢️ 一塊兒來~FunTester

相關文章
相關標籤/搜索