如何使用logcat记录所有页面的加载时间
2017-12-01 17:32
579 查看
本人学习使用APP性能测试的过程中,需要统计页面的启动时间,因为自己写了一个logcat的监控线程,所以想把所有的activity的启动时间都记录下来,留作参考。经过尝试,总算是完成了,分享代码供大家参考。
下面是logcat的执行方法:
/**
* 执行adb logcat命令此方法已过滤掉I级别日常不做记录
*
* @param cmd
* 命令内容
* @param fileName
* 输入文件路径
*/
private void execCmdAdb(String cmd, String fileName) {
System.out.println(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 (LogKey) {
p.destroy();// 结束线程
reader.close();// 此处reader依赖于input,应先关闭
input.close();
return;
}
//收集启动时间
LauchTime.getActivityTimes(line);
if (line.startsWith("I/") || line.contains(" I ")) {
continue;
}
if (line.contains("happyjuzi")) {
Common.getInstance().saveToFile(line, fileName);// 保存
}
}
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) {// 循环读取
if (LogKey) {
p.destroy();
errorReader.close();// 此处有依赖关系,先关闭errorReader
errorInput.close();
return;
}
if (eline.contains("happyjuzi")) {
Common.getInstance().saveToFile(line, fileName);// 保存
}
}
errorReader.close();// 此处有依赖关系,先关闭errorReader
errorInput.close();
} catch (IOException e) {
Common.getInstance().output("执行" + cmd + "失败!");
e.printStackTrace();
}
}
下面是getActivityTimes()方法:
/**
* 通过log获取activity启动用时
*
* @param line
* 每条log
*/
public static void getActivityTimes(String line) {
if (line.contains("Displayed") && line.contains("juzi")) {
String activity = getActivityName(line);
double time = getLauchTime(line);
output(activity, time);
AppLocalMySql.getInstance().saveLauchTime(test_name, device, package_name, activity, time);
}
}
/**
* 获取启动时间
*
* @param line
* 截取到的log信息
* @return 返回double时间,单位s,默认0.00
*/
private static double getLauchTime(String line) {
Matcher matcher = pattern_time.matcher(line);
if (matcher.find()) {
line = matcher.group(0);
line = line.substring(1, line.length() - 2);
line = line.replace("s", ".");
if (!line.contains(".")) {
line = "0." + line;
}
double time = Common.getInstance().changeStringToDouble(line);
return time;
}
return 0.00;
}
/**
* 获取activity名
*
* @param line
* 截取到的log信息
* @return 返回activity名
*/
private static String getActivityName(String line) {
Matcher matcher = pattern_name.matcher(line);
if (matcher.find()) {
line = matcher.group(0);
line = line.substring(0, line.length() - 1);
}
return line;
}
下面是logcat的执行方法:
/**
* 执行adb logcat命令此方法已过滤掉I级别日常不做记录
*
* @param cmd
* 命令内容
* @param fileName
* 输入文件路径
*/
private void execCmdAdb(String cmd, String fileName) {
System.out.println(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 (LogKey) {
p.destroy();// 结束线程
reader.close();// 此处reader依赖于input,应先关闭
input.close();
return;
}
//收集启动时间
LauchTime.getActivityTimes(line);
if (line.startsWith("I/") || line.contains(" I ")) {
continue;
}
if (line.contains("happyjuzi")) {
Common.getInstance().saveToFile(line, fileName);// 保存
}
}
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) {// 循环读取
if (LogKey) {
p.destroy();
errorReader.close();// 此处有依赖关系,先关闭errorReader
errorInput.close();
return;
}
if (eline.contains("happyjuzi")) {
Common.getInstance().saveToFile(line, fileName);// 保存
}
}
errorReader.close();// 此处有依赖关系,先关闭errorReader
errorInput.close();
} catch (IOException e) {
Common.getInstance().output("执行" + cmd + "失败!");
e.printStackTrace();
}
}
下面是getActivityTimes()方法:
/**
* 通过log获取activity启动用时
*
* @param line
* 每条log
*/
public static void getActivityTimes(String line) {
if (line.contains("Displayed") && line.contains("juzi")) {
String activity = getActivityName(line);
double time = getLauchTime(line);
output(activity, time);
AppLocalMySql.getInstance().saveLauchTime(test_name, device, package_name, activity, time);
}
}
/**
* 获取启动时间
*
* @param line
* 截取到的log信息
* @return 返回double时间,单位s,默认0.00
*/
private static double getLauchTime(String line) {
Matcher matcher = pattern_time.matcher(line);
if (matcher.find()) {
line = matcher.group(0);
line = line.substring(1, line.length() - 2);
line = line.replace("s", ".");
if (!line.contains(".")) {
line = "0." + line;
}
double time = Common.getInstance().changeStringToDouble(line);
return time;
}
return 0.00;
}
/**
* 获取activity名
*
* @param line
* 截取到的log信息
* @return 返回activity名
*/
private static String getActivityName(String line) {
Matcher matcher = pattern_name.matcher(line);
if (matcher.find()) {
line = matcher.group(0);
line = line.substring(0, line.length() - 1);
}
return line;
}
相关文章推荐
- 如何使用FF的Firebug组件中的net工具查看页面元素加载消耗时间
- 页面加载时间如何影响你的收益?
- 如何判断一个页面加载所耗费的时间
- 使用<img>标签加载php文件,记录页面访问讯息
- js中如何控制所有页面加载完…
- 如何使用iMacros进行web程序中页面加载的性能测试
- 使用QTP统计页面加载时间(加载IE对象)
- 如何使用SVG生成超酷的页面预加载素描动画效果
- 如何使用Holmos处理页面等待ajax加载
- 如何使用 base 标签使页面中的所有标签在新窗口中打开
- 如何使用SVG生成超酷的页面预加载素描动画效果
- 教你如何在TFS中让所有的成员都能够通过使用Project来读取计划的Start Date 时间
- 如何使用SVG生成超酷的页面预加载素描动画效果
- 如何生成报告来枚举出整个sharepoint环境中的每个页面所使用的所有webpart
- 使用<img>标签加载php文件,记录页面访问讯息
- 如何使用SVG生成超酷的页面预加载素描动画效果
- VS2008 在进行ASP.NET 开发时 如何避免加载设计页面时假死及减少保存所耗的时间。
- 使用Filter跟踪Asp.net MVC页面加载时间
- 如何统计页面的加载时间呢
- js中如何控制所有页面加载完成后,再执行某些方法