一、需求
需要升级应用A和B
A:com.konka.kksmarthome
B:com.konka.iotserver
B升级依赖于A的指定某个版本(只有系统检测到了A版本号时,B才升级)
要求用户在上电后,应用可以成功被推送升级(后台静默升级)
压测OTA升级200次,查看升级成功率。
二、挂包:
升级后台,将A、B两个包分别挂上去,并且添加依赖关系。(B依赖于A)
三、策略
Ⅰ.需设计两个脚本,一个xshell,另一个为python脚本
脚本名称:
1.test_kksmarthome.sh
2.reboot_appupgrade_PC.py
Ⅱ.将脚本1复制到TV端
adb push C:\Users\Administrator\Desktop\test_kksmarthome.sh /data
Ⅲ.打开xshell 6,点击运行脚本,然后选择reboot_appupgrade_PC.py运行即可。
①.test_kksmarthome.sh代码如下:
test_dir="/data/testDir"
log_dir="$test_dir/log"
sum_dir="$test_dir/summary"
out_file="$test_dir/result.txt"
out_file1="/dev/console"
sum_vid_file="$sum_dir/summary_vid.txt"
sum_mul_file="$sum_dir/summary_mul.txt"
sum_rec_file="$sum_dir/summary_rec.txt"
sum_req_file="$sum_dir/summary_req.txt"
vid_install_file="$sum_dir/vid_install.txt"
vid_find_file="$sum_dir/vid_find.txt"
vid_download_file="$sum_dir/vid_download.txt"
mul_install_file="$sum_dir/mul_install.txt"
mul_find_file="$sum_dir/mul_find.txt"
mul_download_file="$sum_dir/mul_download.txt"
rec_install_file="$sum_dir/rec_install.txt"
rec_find_file="$sum_dir/rec_find.txt"
rec_download_file="$sum_dir/rec_download.txt"
req_file="$sum_dir/req.txt"
test_down_file="$sum_dir/test_down.sh"
count_file="$test_dir/count.txt"
#定义测试路径和文件
if [ ! -d $test_dir ];then
mkdir $test_dir
mkdir $log_dir
mkdir $sum_dir
echo "" > $sum_vid_file
echo "" > $sum_mul_file
echo "" > $sum_rec_file
echo "" > $sum_req_file
echo "0" > $vid_install_file
echo "0" > $vid_find_file
echo "0" > $vid_download_file
echo "0" > $mul_install_file
echo "0" > $mul_find_file
echo "0" > $mul_download_file
echo "0" > $rec_install_file
echo "0" > $rec_find_file
echo "0" > $rec_download_file
echo "0" > $req_file
echo "echo AAA AAA AAA AAA AAA AAA" > $test_down_file
echo "0" > $count_file
clear
fi
#定义循环次数参数
count=`cat $count_file`
let count++
echo "--------------------- 第${count}次 ----------------------" >>$out_file
echo "--------------------- 第${count}次 ----------------------" >>$out_file1
#打印log
start logd
sleep 1
logcat -G 50M
sleep 1
logcat -v time > $log_dir/第${count}次.log&
sleep 10
#设置超时。十分钟内如果检测到两个应用均安装成功则输出pass,结束循环;否则循环超过十分钟自动结束
timeout=300.0
start_time=`cat /proc/uptime | busybox awk '{print $1}'`
while true;do
a1=`dumpsys package com.konka.kksmarthome|grep versionName=2.7.1167`
a2=`dumpsys package com.konka.iotserver|grep versionName=2.7.214`
if [ "${a1}" -a "${a2}" ];then
echo "pass" >>$out_file
echo "pass" >>$out_file1
break
fi
sleep 5
cur_time=`cat /proc/uptime | busybox awk '{print $1}'`
f=`busybox awk -v s=$start_time -v c=$cur_time -v to=$timeout 'BEGIN{d=c-s;if(d>300){print "timeout"}}'`
if [ "${f}" ];then
echo "timeout !!!" >> $out_file
echo "timeout !!!" >> $out_file1
break
fi
done
#检测安装包结果,输出应用安装结果到结果文件
if [ "${a1}" ];then
echo "${count}.kksmarthome:安装成功" >> $out_file
fi
if [ "${a2}" ];then
echo "${count}.iotserver:安装成功" >> $out_file
fi
#检测全局log,将升级信息相关log归类到升级log
cat /$log_dir/第${count}次.log | grep "AppUpgrade" > $log_dir/${count}.txt
#检测升级log中是否存在“请求升级信息成功”,并记录到结果文件
a=`grep "AppUpgrade.*请求升级信息成功" $log_dir/${count}.txt`
if [ "${a}" ];then
echo "${count}.请求升级信息成功" >> $out_file
fi
#检测升级log中是否存在两个应用的相关“发现可升级版本”信息,并记录到结果文件
b1=`grep "发现可升级版本: com.konka.kksmarthome" $log_dir/${count}.txt`
b2=`grep "发现可升级版本: com.konka.iotserver" $log_dir/${count}.txt`
if [ "${b1}" ];then
echo "${count}.kksmarthome:发现可升级版本成功" >> $out_file
fi
if [ "${b2}" ];then
echo "${count}.iotserver:发现可升级版本成功" >> $out_file
fi
#检测升级log中是否存在两个应用的相关“下载完成”信息,并记录到结果文件
c1=`grep "下载完成 ID:2331 ,\[阿斐亚智家\]" $log_dir/${count}.txt`
c2=`grep "下载完成 ID:2338 ,\[IotServer\]" $log_dir/${count}.txt`
if [ "${c1}" ];then
echo "${count}.kksmarthome:下载成功" >> $out_file
fi
if [ "${c2}" ];then
echo "${count}.iotserver:下载成功" >> $out_file
fi
#记录统计成功次数
#记录统计kksmarthome的结果成功次数
d1=`grep "${count}.kksmarthome:安装成功" $out_file`
d2=`grep "${count}.kksmarthome:发现可升级版本成功" $out_file`
d3=`grep "${count}.kksmarthome:下载成功" $out_file`
if [ "${d1}" ];then
vid_install=`cat $vid_install_file`
let vid_install++
echo "${vid_install}" >$vid_install_file
fi
if [ "${d2}" ];then
vid_find=`cat $vid_find_file`
let vid_find++
echo "${vid_find}" >$vid_find_file
fi
if [ "${d3}" ];then
vid_download=`cat $vid_download_file`
let vid_download++
echo "${vid_download}" >$vid_download_file
fi
#记录统计iotserver的结果成功次数
e1=`grep "${count}.iotserver:安装成功" $out_file`
e2=`grep "${count}.iotserver:发现可升级版本成功" $out_file`
e3=`grep "${count}.iotserver:下载成功" $out_file`
if [ "${e1}" ];then
mul_install=`cat $mul_install_file`
let mul_install++
echo "${mul_install}" >$mul_install_file
fi
if [ "${e2}" ];then
mul_find=`cat $mul_find_file`
let mul_find++
echo "${mul_find}" >$mul_find_file
fi
if [ "${e3}" ];then
mul_download=`cat $mul_download_file`
let mul_download++
echo "${mul_download}" >$mul_download_file
fi
#记录统计请求信息的结果成功次数
g=`grep "${count}.请求升级信息成功" $out_file`
if [ "${g}" ];then
req=`cat $req_file`
let req++
echo "${req}" >$req_file
fi
#将两个应用和请求信息结果成功数汇总到各自的总文件
echo "--------------------- 第${count}次 ----------------------" >>$sum_vid_file
echo "安装成功次数:`cat $vid_install_file`" >>$sum_vid_file
echo "发现版本成功次数:`cat $vid_find_file`" >>$sum_vid_file
echo "下载成功次数:`cat $vid_download_file`" >>$sum_vid_file
echo "--------------------- 第${count}次 ----------------------" >>$sum_mul_file
echo "安装成功次数:`cat $mul_install_file`" >>$sum_mul_file
echo "发现版本成功次数:`cat $mul_find_file`" >>$sum_mul_file
echo "下载成功次数:`cat $mul_download_file`" >>$sum_mul_file
echo "--------------------- 第${count}次 ----------------------" >>$sum_rec_file
echo "安装成功次数:`cat $rec_install_file`" >>$sum_rec_file
echo "发现版本成功次数:`cat $rec_find_file`" >>$sum_rec_file
echo "下载成功次数:`cat $rec_download_file`" >>$sum_rec_file
echo "--------------------- 第${count}次 ----------------------" >>$sum_req_file
echo "请求成功次数:`cat $req_file`" >>$sum_req_file
#循环次数+1
echo "${count}" >$count_file
echo "finish" >>$out_file1
#if [[ $count -lt 100 ]];then
if [[ $count -lt 100 ]];then
#前100次删除一个应用,并安装低版本iotserver
pm uninstall com.konka.kksmarthome
sleep 5
pm uninstall com.konka.iotserver
sleep 5
pm install /data/210927094924u34u.apk
sleep 20
else
#删除kksmarthome和iotserver
pm uninstall com.konka.kksmarthome
sleep 3
pm uninstall com.konka.iotserver
sleep 3
fi
sh $test_down_file
cat $test_down_file
②.reboot_appupgrade_PC.py代码如下:测试
# $language = "Python"
# $interface = "1.0"
def main():
xsh.Screen.Synchronous = False # 屏幕实时刷新True部分机器串口、Xshell客户端卡死,False是否失败抓漏未验证
xsh.Screen.Send("pm uninstall com.konka.kksmarthome \n\r") #卸载kksmarthome
xsh.Session.Sleep(3000)
xsh.Screen.Send("pm uninstall com.konka.iotserver \n\r") #卸载iotserver
xsh.Session.Sleep(3000)
xsh.Screen.Send("rm -r /data/testDir \n\r ") #执行前需删掉旧的testDir文件夹
xsh.Session.Sleep(2000)
xsh.Screen.Send("su \n\r ") # 执行reboot命令前先su,获得root权限
xsh.Session.Sleep(2000)
for x in range(0, 200): # arg2为循环次数,即重启200次
xsh.Screen.Send("reboot \n\r ")
xsh.Session.Sleep(2000)
xsh.Screen.Clear()
#xsh.Session.Sleep(35000) # 重启后等待1min,时长由机器性能决定,时间不宜过长,但要确保TV已正常开机
xsh.Screen.WaitForStrings("Start", 60000)
xsh.Session.Sleep(20000)
xsh.Screen.Send("\n\r ")
xsh.Session.Sleep(1000)
xsh.Screen.Send("su \n\r ")
xsh.Session.Sleep(1000)
xsh.Screen.Send("\n\r ")
xsh.Session.Sleep(1000)
xsh.Screen.Send("sh -x /data/test_kksmarthome.sh < /dev/null & \n\r") # 执行TV端升级检测脚本
xsh.Session.Sleep(5000) # 避免首次echo生成sh脚本AAA时,保留着当前screen,执行clear后再监听画面AAA
xsh.Screen.Clear()
#xsh.Session.Sleep(660000) # 预留shell脚本执行时间11mins,单位为毫秒
#xsh.Session.Sleep(60000) # 调试环境,验证捕获AAA有效性
xsh.Screen.WaitForStrings("AAA", 660000) # 在test_kksmarthome.sh脚本运行完成后,100s时间内监测到屏幕有AAA信息后执行reboot命令
xsh.Screen.Clear() # xsh.Screen.Send("clear \r ") # 清屏 确认\n\r或\r或\n需要换多少行
continue
main()
Ⅳ.测试完成以后,进入串口查看result.txt结果就可以知道升级成功和失败次数了。