我将从以下几个方面来介绍一下我做的安卓app性能–自动化测试
1.为什么要做app性能测试?
2.app性能测试包括哪些?
3.测试app性能常用的方法/工具有哪些?
4.怎么实现app性能测试自动化?
5.成果展示
-
为什么要做app性能测试?
app性能测试是提高产品质量很重要的一部分。
尤其是当今app市场竞争如此激烈的情况下,如果app在使用过程中总是出现卡顿,闪退,发烫严重等这些影响用户体验的情况,估计就会被卸载了。 -
app性能测试包括哪些?
内存,cpu,流量,流畅度,耗电,响应速度,弱网测试等。 -
测试app性能常用的方法/工具有哪些?
手机系统自带的流畅度,耗电和流量检测, adb命令,腾讯GT(需要root),Emmagee(不支持7.0以上),抓音视频包再计算帧率码率等。 -
怎么实现app性能测试自动化?
adb命令其实很强大,查看各种性能的命令都有。但是一行行命令敲,使用不方便。如果要系统化的做测试,以及能将结果批量输出用来做数据分析,肯定需要考虑实现自动化。
我使用的是java嵌入adb命令。 -
成果展示
以测试memory内存为例:
(1)写一个配置文件packageName.properties存app的包名,放在项目的src下,这样测试不同的app时,只要改配置文件即可。
写一个工具类 class ReadPackName 专门读取配置文件
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值。
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表中,方便以后做数据分析或界面图像输出。
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水平一般,代码比较简单也有点乱。后期慢慢优化!希望这篇博文对大家做安卓性能自动化有所帮助或启发,欢迎大家和我一起进步,互相学习一下测试技术等。