您的位置:首页 > 产品设计 > UI/UE

使用uiautomator获取应用内存

2015-07-15 14:11 435 查看
最近在学习uiautomator,于是研究了下使用uiautomator来获取应用内存使用情况。

准备工作

1.制定测试场景,考虑到一般会引起内存泄漏的情形,诸如activity之间的跳转、大缓存文件的切换、数据库的读写操作。

2.通过命令行查看应用内存,其中Pss对应的TOTAL值为应用所占用的实际内存值。

adb shell dumpsys meminfo packageName




3.根据测试场景,采集应用内存数据。

实现方法

每执行一次测试场景用例(例如新建文件夹这个操作),将获取其内存值并写入到文件里,执行n次后,采集所有数据绘制成图表分析。

主要代码

1.获取应用内存值。

public String getPss(String packageName) {
Process proc = null;
StringBuffer sb = new StringBuffer();
String line, Pss = null;
try {
proc = Runtime.getRuntime().exec("dumpsys meminfo " + packageName);
proc.waitFor();
BufferedReader br = new BufferedReader(new InputStreamReader(
proc.getInputStream()));
while ((line = br.readLine()) != null) {
if (line.contains("TOTAL")) {
sb.append(line + "\n");
}
}
String[] s = sb.toString().split("TOTAL");
String s2 = s[1].trim();
String[] s3 = s2.split("    ");
Pss = s3[0].trim();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return Pss;
}


2.在手机存储根目录下创建文件及目录,用来存放日志文件。

public File createFile(String caseNumber) {
String directory = "/storage/sdcard0/uiautomator/memory";// directory
String file = directory + "/" + caseNumber + "_" + formatDate()
+ ".xls";// file
File directoryPath = new File(directory);
File mfile = new File(file);
if (!directoryPath.exists() && !mfile.exists()) {
directoryPath.mkdirs();
try {
mfile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return mfile;
}


3.新建文件夹测试场景。

public void testCase() throws UiObjectNotFoundException, IOException {
String caseNumber = "testCase";
File mFile = createFile(caseNumber);
FileOutputStream fos = null;
fos = new FileOutputStream(mFile);
openApplication("文件管理");
findElementAndClick(
"com.aurora.filemanager:id/usb_card_storage_single", 6);
for (int i = 0; i < counts; i++) {
menu();
findElementAndClick("com.aurora:id/aurora_menu_item_text", "新建文件夹");
findElementAndClick("android:id/button2", "确定");
delay(1);
String mPss = getPss(packageName);
delay(1);
byte[] b1 = (mPss + "\n").getBytes();
fos.write(b1);
}
fos.close();
back();
back();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: