总的来说,价值不大,仅仅是记录。主要是发现自己写的东西,没有成品的appium好用。
不过由于嵌入式设备无法安装python,所以我这份shell脚本,也算有点用处吧。其实直接用笔记本电脑就行。。。。
介绍一下使用背景,有一台apk手机,有一台终端机器,通过wifi相连接,正常情况下是apk手机操作终端机器进行一些操作。而我写的自动化测试脚本,则是在终端上运行,自动在apk上执行相关操作,模拟apk操作终端的场景。本来想把脚本放到手机上的,但没root,搞不定。
这里如果使用appium的话,就是在笔记本上运行,自动在apk上执行相关操作,模拟apk操作终端的场景。
具体分成了两个脚本,
1,具体的操作执行,并对每一步的执行结果进行判断。
2,调用操作脚本,如果操作出错则收集相关log并打包保存,每次操作后重启机器。反复运行。
#!/bin/sh
test_home=/home/5g_bbu/autotest
START_DATE=`date +%Y%m%d%H%M | tr [A-Z] [a-z]`
log_echo(){
DATE_STRING=`date +%Y%m%d%H%M | tr [A-Z] [a-z]`
echo "${DATE_STRING}" $@
echo "${DATE_STRING}" $@ >> /home/5g_bbu/autotest/test.log
}
reboot_dev(){
if [ "$1"x == "zpp"x ] ; then
log_echo "reboot zpp"
sshpass -p root ssh root@10.16.1.13 "/sbin/reboot"
fi
if [ "$1"x == "qck"x ] ; then
log_echo "reboot qck"
sshpass -p root ssh root@10.16.1.12 "/sbin/reboot"
fi
if [ "$1"x == "zkb"x ] ; then
log_echo "reboot zkb"
sshpass -p root ssh root@10.16.1.1 "/sbin/reboot"
fi
}
###################################################################
##################### main start #########################
###################################################################
##测试开始
log_echo "start autotest"
##休眠2分钟,等bbu完成启动,连接手机。
if [ "0"x != "$#"x ] ; then
echo "debug mode, no need sleep"
else
log_echo "sleep 80"
sleep 80
fi
cd ${test_home}
##执行脚本
sudo ./autotest.sh
ret=$?
##判断返回值
if [ "2"x == "${ret}"x ] ; then
log_echo "first try get error"
else
##一次开机,两次执行
sudo ./autotest.sh
ret=$?
fi
##判断返回值
if [ "2"x == "${ret}"x ] ; then
#log_echo "get error, stop autotest"
log_echo "get error, tar log"
cp /var/log/cam.log ${test_home}/bbu.log
sshpass -p root scp root@10.16.1.12:/flashDev/log/cam.log ${test_home}/qck.log
sshpass -p root scp root@10.16.1.13:/flashDev/log/cam.log ${test_home}/zpp.log
sshpass -p root scp root@10.16.1.1:/mnt/log/cam.log ${test_home}/zkb.log
tar -cf ${START_DATE}_error_log.tar bbu.log qck.log zpp.log zkb.log test.log
#exit 1
fi
reboot_dev "zpp" &
reboot_dev "zkb" &
reboot_dev "qck" &
sleep 3
log_echo "finished, restart bbu"
reboot
#!/bin/sh
#connect cmd
log_echo(){
DATE_STRING=`date +%Y%m%d%H%M | tr [A-Z] [a-z]`
echo "${DATE_STRING}" $@
echo "${DATE_STRING}" $@ >> /home/5g_bbu/autotest/test.log
}
#dump cmd
dump_page(){
rm -f /home/5g_bbu/autotest/window_dump.xml
adb shell rm -f /sdcard/window_dump.xml
for i in $(seq 1 10)
do
if [ ! -f "/home/5g_bbu/autotest/window_dump.xml" ] ; then
sleep 1
adb shell uiautomator dump
adb pull /sdcard/window_dump.xml
else
return
fi
done
}
#check_text cmd
check_text(){
dump_page
if [ ! -f "/home/5g_bbu/autotest/window_dump.xml" ] ; then
log_echo "error: dump page failed, return 1"
return 1
fi
sed -i 's/index/\r\n/g' /home/5g_bbu/autotest/window_dump.xml
sed -i 's/\"//g' /home/5g_bbu/autotest/window_dump.xml
sed -i 's/=//g' /home/5g_bbu/autotest/window_dump.xml
local findresource=$1
local findstr=$2
local isfind=""
isfind=`cat window_dump.xml | grep ${findresource} | grep ${findstr}`
if [ -z "${isfind}" ] ; then
#log_echo "not find ${findresource} ${findstr}, return 1"
return 1
else
return 0
fi
}
#check every 5 secends, max 250 secends.
check_wait_text(){
for i in $(seq 1 50)
do
check_text $@
if [ "0"x != "$?"x ] ; then
sleep 5
continue
else
log_echo "get $@"
return 0
fi
done
log_echo "not find $@"
return 1
}
#check_page cmd
check_page(){
local pagename=$1
local ispage=`adb shell dumpsys window windows | grep mCurrent |grep ${pagename}`
if [ -z "${ispage}" ] ; then
log_echo "error: not find page ${pagename}, return 1"
return 1
else
log_echo "find page ${pagename}, return 0"
return 0
fi
}
connect_phone(){
local devicenum=0
local i=1
local j=250
local islock=`adb shell dumpsys window policy|grep mIsShowing|grep false`
if [ ! -z "${islock}" ] ; then
log_echo "already connected, return 0"
return
fi
for i in $(seq 1 50)
do
for j in $(seq 250 252)
do
adb disconnect 10.16.1.250
adb disconnect 10.16.1.251
adb disconnect 10.16.1.252
sleep 2
adb kill-server
sleep 2
adb connect 10.16.1.${j}
sleep 2
adb shell echo 0
devicenum=`adb devices|wc -l`
let devicenum--
let devicenum--
if [ "1"x != "${devicenum}"x ] ; then
continue
fi
sleep 1
islock=`adb shell dumpsys window policy|grep mIsShowing|grep false`
if [ -z "${islock}" ] ; then
continue
else
log_echo "connect end, ${i}, ${j}"
return
fi
done
log_echo "try connect times ${i}"
done
log_echo "cannot connect device, or phone lock, exit 1"
exit 1
}
kill_start_app(){
##多任务按键,清除当前任务。杀掉app
adb shell input keyevent KEYCODE_HOME
adb shell input keyevent KEYCODE_MENU
sleep 1
adb shell input tap 550 2050
sleep 1
adb shell input keyevent KEYCODE_HOME
sleep 1
##启动app
adb shell am start com.hxct.mips.nr/com.hxct.mips.lte.ui.WelcomeActivity
sleep 10
}
login_app(){
##输入admin 密码
adb shell input tap 450 850
sleep 1
adb shell input text "admin"
sleep 1
adb shell input tap 500 1150
sleep 10
}
connect_start_login_app(){
for i in $(seq 1 20)
do
connect_phone
kill_start_app
check_page "LoginActivity"
if [ "0"x != "$?"x ] ; then
log_echo "app start failed, not login page, try again"
continue
fi
login_app
##验证是否登录成功,进入app主界面
check_page "MainActivity1"
if [ "0"x != "$?"x ] ; then
log_echo "app login failed, not login page, try again"
continue
else
log_echo "connect , start , login app end"
sleep 5
check_text "cellState_05" "基站异常"
if [ "0"x == "$?"x ] ; then
log_echo "ERROR: cell0 status error, exit 2"
exit 2
fi
return
fi
done
log_echo "connect and login app failed, just exit 1"
exit 1
}
cell_setup(){
##进入建站页面
sleep 2
adb shell input tap 700 2000
sleep 2
check_page "SelectImsiActivity"
if [ "0"x != "$?"x ] ; then
return 1
fi
##进入imsi选择页面
sleep 2
adb shell input tap 500 300
sleep 2
check_page "PeopleManagerActivity"
if [ "0"x != "$?"x ] ; then
return 1
fi
##选择imsi
sleep 2
adb shell input tap 50 350
sleep 2
check_text "cboxPeople" "checkedtrue"
if [ "0"x != "$?"x ] ; then
return 1
fi
##返回建站页面
sleep 2
adb shell input tap 600 2000
sleep 2
check_page "SelectImsiActivity"
if [ "0"x != "$?"x ] ; then
return 1
fi
##开始建站,返回主页面
sleep 2
adb shell input tap 600 2150
sleep 2
check_page "MainActivity1"
if [ "0"x != "$?"x ] ; then
return 1
fi
return 0
}
cell_delete(){
## del cell
sleep 2
check_text "btnLocation" "停止定位"
if [ "0"x != "$?"x ] ; then
return 1
fi
## click 停止定位
adb shell input tap 800 2000
sleep 2
check_text "md_content" "是否删除"
if [ "0"x != "$?"x ] ; then
return 1
fi
## click ok
adb shell input tap 875 1275
##click 等待删站开始
sleep 2
check_text "md_content" "是否删除"
if [ "0"x == "$?"x ] ; then
return 1
fi
log_echo "cell0 del ok"
}
#######################################################################
#######################################################################
#######################################################################
#init
cd /home/5g_bbu/autotest
##连接手机,启动app,登录app,建站
for i in $(seq 1 10)
do
connect_start_login_app
check_wait_text "cellState_05" "已就绪"
if [ "0"x != "$?"x ] ; then
log_echo "ERROR: cell0 not ready, exit 2"
exit 2
fi
log_echo "cell0 ready, start setup"
cell_setup
if [ "0"x == "$?"x ] ; then
log_echo "send cell0 setup cmd success, wait for setup finished"
break
fi
if [ "10"x == "${i}"x ] ; then
log_echo "cell0 send setup cmd err, exit 1"
exit 1
fi
log_echo "cell0 send setup cmd err, loop ${i}"
done
##等待建站结束
log_echo "setup cell, sleep 30"
sleep 30
check_wait_text "cellState_05" "成功"
if [ "0"x != "$?"x ] ; then
log_echo "error: cell0 not setup success, exit 2"
exit 2
fi
##建站完成后,等一等。
log_echo "cell0 setup end, sleep 30"
sleep 30
##删站
log_echo "cell0 delete begin"
for i in $(seq 1 10)
do
cell_delete
if [ "0"x == "$?"x ] ; then
log_echo "cell delete ok, loop ${i}"
break
fi
##检查次数
if [ "10"x == "${i}"x ] ; then
log_echo "cell0 send setup cmd err, exit 1"
exit 1
fi
log_echo "cell delete err, loop ${i}"
##重启app
connect_start_login_app
##检查基站是否建站成功
check_text "cellState_05" "已就绪"
if [ "0"x == "$?"x ] ; then
log_echo "cell0 status ready, no need delete"
break
fi
check_text "cellState_05" "成功"
if [ "0"x != "$?"x ] ; then
log_echo "ERROR: cell0 not setup,can not delete, exit 2"
exit 2
fi
done
##等待删站结束
sleep 20
check_text "cellState_05" "基站异常"
if [ "0"x == "$?"x ] ; then
log_echo "ERROR: cell0 error, exit 2"
exit 2
fi
check_wait_text "cellState_05" "已就绪"
if [ "0"x != "$?"x ] ; then
log_echo "error: cell0 del error, exit 2"
exit 2
fi
##删站完成,退出
adb disconnect 10.16.1.250
adb disconnect 10.16.1.251
adb disconnect 10.16.1.252
sleep 2
adb kill-server
exit 0
log_echo "end"