您的位置:首页 > 移动开发 > Android开发

Perl脚本调试/测试Android

2016-04-14 14:05 651 查看
软件写好后,进行一系列测试,先测试功能,再测试稳定性

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语言相近,很容易入手。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  测试 perl Android