Perl脚本调试/测试Android
2016-04-14 14:05
651 查看
软件写好后,进行一系列测试,先测试功能,再测试稳定性
perl脚本很适合做测试脚本,配合上adb,fastboot,i2ctool 等工具,可以windows/linux上使用。Android手机内安装busybox,shell的东西基本都能用。
perl脚本也不局限于测试,可以读取手机配置,修改手机配置,安装应用。
举个例子,我们需要重复开关机,测试芯片是否成功挂载。
在kernel 我打log
简单看log
1 、在cmd终端 adb shell “dmesg | grep 'xxx' ”
2、adb reboot
然后重复1、2两步,重复几百次看是否稳定。
windows批处理可以实现,但是功能不完全,字符串的处理能力弱,想要存储结果或者判断都不方便。perl可以很好解决批处理。
查看芯片挂载情况:
功能:自动重启手机,挂载出错时,打印挂载信息。
说明:`cmd`反引号,执行shell命令,而且有返回值,$ret可以对字符处理,perl支持正则表达式,$ret =~/$try/,判断返回的结果是否包含字符串xxx。
大白天,守在电脑旁边,可以随时查看结果。不至于错过查看log的机会,晚上掉电或者突发,电脑可能保存不了资料。可以在这个基础上加上文件读写,把log存起来。
查看芯片挂载情况:
功能:自动重启手机,挂载出错时,保存挂载信息。
说明:>>是追加的方式打开文件,这样晚上就可以放心的自动测试了。
检测了40多次,还未检测出失败。
这个方法可以解决很多问题,不仅局限测试,比如读取手机配置,修改手机配置,安装应用。
比如实际生产,批量修改手机型号。
基本思路
1、导出build.prop配置表
2、判断型号
3、修改型号,再把build.prop 塞进手机
4、修改build.prop文件属性,重启
方法和上面脚本差不多,我就不举例了。
某些情况,要观察中断是否正常。遇到不清楚设备,调试的时候不清楚哪个设备发生中断,可以用perl脚本跟踪观察中断变化。以下是perl脚本:
测试/查看中断次数:
功能:间隔时间查看中断次数,指定中断号,时间,如果不指定可以查看所有变化。
$first_time=1;
%tb = {};
$times=0;
($irq,$tick) = @ARGV;
print "find irq:".$irq."\n";
if($tick le 0 || $tick <=0)
{
$tick = 1;
}
print "cycle time:".$tick."\n";
while(1)
{
$ret = `adb shell cat /proc/interrupts >tmp`;
open(FILE, "<tmp");
$times=$times+1;
sleep($tick);
system("cls");
print "======================================\n";
print "===== find irq:".$irq."\n";
print "===== tick:".$tick."\n";
print "===== cycle Times:".$times."=====\n";
print "======================================\n";
while(<FILE>)
{
if (~/\s?\w+\d+\:/)
{
$key = $&;
$key =~s/\://;
}
else
{
next;
}
if (~/:\s+\d+/)
{
$value = $&;
if ($value=~/\d+/)
{
$value = $&;
if ($tb{$key} ne $value)
{
$tb{$key} = $value;
if($first_time ne 1)
{
if($irq=~/\d+/)
{
if($irq eq $key)
{
print $key." ".$value."\n";
}
}
else
{
print $key." ".$value."\n";
}
}
}
}
}
}
$first_time=0;
close(FILE);
}
20,128,166号均发生中断,结合/proc/interrupts可以查看具体中断信息。
perl方便在shell命令使用和文字处理能力,IO处理,语法和C语言相近,很容易入手。
perl脚本很适合做测试脚本,配合上adb,fastboot,i2ctool 等工具,可以windows/linux上使用。Android手机内安装busybox,shell的东西基本都能用。
perl脚本也不局限于测试,可以读取手机配置,修改手机配置,安装应用。
举个例子,我们需要重复开关机,测试芯片是否成功挂载。
在kernel 我打log
xxx_chip_probe() { ....... rc = xxx_i2c_read(chip, CFG_BATT_CHG_REG, ®); if (rc) { pr_err("Failed to detect xxx, device may be absent\n"); return -ENODEV; } ..... }
简单看log
1 、在cmd终端 adb shell “dmesg | grep 'xxx' ”
2、adb reboot
然后重复1、2两步,重复几百次看是否稳定。
windows批处理可以实现,但是功能不完全,字符串的处理能力弱,想要存储结果或者判断都不方便。perl可以很好解决批处理。
查看芯片挂载情况:
功能:自动重启手机,挂载出错时,打印挂载信息。
$time = 1; $try = "xxx"; while (1) { `adb wait-for-device`; #等待重启完毕 $ret=`adb shell "dmesg | grep 'xxx'"`;#查找trace print "$time "; #打印次数 if ($ret =~/$try/) #查找是否包含xxx { print "\n$ret\n"; #打印结果 } $time++; `adb reboot`; #重启 }
说明:`cmd`反引号,执行shell命令,而且有返回值,$ret可以对字符处理,perl支持正则表达式,$ret =~/$try/,判断返回的结果是否包含字符串xxx。
大白天,守在电脑旁边,可以随时查看结果。不至于错过查看log的机会,晚上掉电或者突发,电脑可能保存不了资料。可以在这个基础上加上文件读写,把log存起来。
查看芯片挂载情况:
功能:自动重启手机,挂载出错时,保存挂载信息。
$time = 1; $try = "xxx"; while (1) { `adb wait-for-device`; #等待重启完毕 $ret=`adb shell "dmesg | grep 'xxx'"`;#查找trace print "$time "; #打印次数 if ($ret =~/$try/) #查找是否包含xxx { open (FILE_LOG, ">>mlog.log") || die ("Could not open file"); #打开文件 print FILE_LOG $ret; #存储LOG close(FILE_LOG); #关闭文件 } $time++; `adb reboot`; #重启 }
说明:>>是追加的方式打开文件,这样晚上就可以放心的自动测试了。
检测了40多次,还未检测出失败。
这个方法可以解决很多问题,不仅局限测试,比如读取手机配置,修改手机配置,安装应用。
比如实际生产,批量修改手机型号。
基本思路
1、导出build.prop配置表
2、判断型号
3、修改型号,再把build.prop 塞进手机
4、修改build.prop文件属性,重启
方法和上面脚本差不多,我就不举例了。
某些情况,要观察中断是否正常。遇到不清楚设备,调试的时候不清楚哪个设备发生中断,可以用perl脚本跟踪观察中断变化。以下是perl脚本:
测试/查看中断次数:
功能:间隔时间查看中断次数,指定中断号,时间,如果不指定可以查看所有变化。
$first_time=1;
%tb = {};
$times=0;
($irq,$tick) = @ARGV;
print "find irq:".$irq."\n";
if($tick le 0 || $tick <=0)
{
$tick = 1;
}
print "cycle time:".$tick."\n";
while(1)
{
$ret = `adb shell cat /proc/interrupts >tmp`;
open(FILE, "<tmp");
$times=$times+1;
sleep($tick);
system("cls");
print "======================================\n";
print "===== find irq:".$irq."\n";
print "===== tick:".$tick."\n";
print "===== cycle Times:".$times."=====\n";
print "======================================\n";
while(<FILE>)
{
if (~/\s?\w+\d+\:/)
{
$key = $&;
$key =~s/\://;
}
else
{
next;
}
if (~/:\s+\d+/)
{
$value = $&;
if ($value=~/\d+/)
{
$value = $&;
if ($tb{$key} ne $value)
{
$tb{$key} = $value;
if($first_time ne 1)
{
if($irq=~/\d+/)
{
if($irq eq $key)
{
print $key." ".$value."\n";
}
}
else
{
print $key." ".$value."\n";
}
}
}
}
}
}
$first_time=0;
close(FILE);
}
20,128,166号均发生中断,结合/proc/interrupts可以查看具体中断信息。
perl方便在shell命令使用和文字处理能力,IO处理,语法和C语言相近,很容易入手。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件