用adb命令进行安卓性能测试,把结果存储到本地的excel表中

我将从以下几个方面来介绍一下我做的安卓app性能–自动化测试
1.为什么要做app性能测试?
2.app性能测试包括哪些?
3.测试app性能常用的方法/工具有哪些?
4.怎么实现app性能测试自动化?
5.成果展示

  1. 为什么要做app性能测试?
    app性能测试是提高产品质量很重要的一部分。
    尤其是当今app市场竞争如此激烈的情况下,如果app在使用过程中总是出现卡顿,闪退,发烫严重等这些影响用户体验的情况,估计就会被卸载了。

  2. app性能测试包括哪些?
    内存,cpu,流量,流畅度,耗电,响应速度,弱网测试等。

  3. 测试app性能常用的方法/工具有哪些?
    手机系统自带的流畅度,耗电和流量检测, adb命令,腾讯GT(需要root),Emmagee(不支持7.0以上),抓音视频包再计算帧率码率等。

  4. 怎么实现app性能测试自动化?
    adb命令其实很强大,查看各种性能的命令都有。但是一行行命令敲,使用不方便。如果要系统化的做测试,以及能将结果批量输出用来做数据分析,肯定需要考虑实现自动化。
    我使用的是java嵌入adb命令。

  5. 成果展示
    以测试memory内存为例:

(1)写一个配置文件packageName.properties存app的包名,放在项目的src下,这样测试不同的app时,只要改配置文件即可。
写一个工具类 class ReadPackName 专门读取配置文件
用adb命令进行安卓性能测试,把结果存储到本地的excel表中_第1张图片

public class ReadPackName {

    //读配置文件中的包名
    public static final String [] message = readName();

    private static String[] readName() {
        Properties prop=new Properties();
        String [] message=new String[1];
        int i=0;
        try {
            InputStream in=new BufferedInputStream(new FileInputStream("src/packageName.properties"));
            prop.load(in);
            message[0]=prop.getProperty("packName");

            in.close();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return message;
    }

(2)写一个类TestMemory,执行测试memory的adb命令

class TestMemory {

    private static final String[] myPackage = ReadPackName.message;

    public static void  TeM(){
        Process p1;
        Process p2;
        String adb_path = "adb";

            //用adb命令查看包名的内存,将结果存为Menory.txt放在手机里
            try{
                p1=Commons.excuteShell(adb_path+" shell dumpsys meminfo "+myPackage[0]+" > /sdcard/Menory.txt");    
                Thread.sleep(3000);
                }catch (Exception e)
                {
                    System.out.println("error");
                }
				//把手机里的日志导入到电脑D盘中
                p2=Commons.excuteShell(adb_path+" pull /mnt/sdcard/Menory.txt  D:/Menory.txt");  
                System.out.println("-----getMenory----success!---------");


                         }

(3)写一个类CatchMemoryTotal,读取D:/Menory.txt的想要的值
如图我要取的是memory的total值。
用adb命令进行安卓性能测试,把结果存储到本地的excel表中_第2张图片

public class CatchMemoryTotal {

    String total=null;
    public String getNum(){
    String s = null,s2 = null;

        BufferedReader readFile = null;
        try {
            readFile = new BufferedReader(new FileReader("D://Memory.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        while(true) {
            try {
                if (!((s = readFile.readLine()) != null)) break;
            } catch (IOException e) {
                e.printStackTrace();
            }
            s2 += s + "\n";
        }
        if ( s2.contains("TOTAL:")){
            String[] use= s2.split("TOTAL:");    //根据唯一字符,一段段切,直到取到文本中想要的值
            String[] realuse = use[1].split("TOTAL SWAP PSS:");

            total=realuse[0].trim(); //去掉空格
       
            System.out.println("--------------"+total+"-------------- " );
           // System.out.println(s2);

        }
        try {
            readFile.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return total;
   }

(4)写一个类CreatExcel,把取到的存到total值,保存到excel表中,方便以后做数据分析或界面图像输出。
用adb命令进行安卓性能测试,把结果存储到本地的excel表中_第3张图片

public class CreatExcel {
    /**
     * @功能:手工构建一个简单格式的Excel
     */
    public static String getMe()
    {
        CatchMemoryTotal catchMemoryTotal = new CatchMemoryTotal();
        String a = catchMemoryTotal.getNum();
        System.out.println("--------已保存为excel表---------------");
        return a;
    }

    public static void main(String[] args) throws Exception
    {
        // 第一步,创建一个webbook,对应一个Excel文件
        HSSFWorkbook wb = new HSSFWorkbook();
        // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = wb.createSheet("表一");       //表名
        // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
        HSSFRow row = sheet.createRow((int) 0);
        // 第四步,创建单元格,并设置值表头 设置表头居中
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式

        HSSFCell cell = row.createCell((short) 0);
        cell.setCellValue("内存总消耗");      //列名
        cell.setCellStyle(style);

        // 第五步,写入实体数据 
            row = sheet.createRow(1);
            row.createCell((short) 0).setCellValue((String) CreatExcel.getMe());
            
        // 第六步,将文件存到指定位置D:/Members.xls
        try
        {
            FileOutputStream fout = new FileOutputStream("D:/Members.xls");
            wb.write(fout);
            fout.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

本小白 java水平一般,代码比较简单也有点乱。后期慢慢优化!希望这篇博文对大家做安卓性能自动化有所帮助或启发,欢迎大家和我一起进步,互相学习一下测试技术等。

你可能感兴趣的:(Android系统应用测试,Java)