文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

实现android自动化测试部署与运行Shell脚本分享

2022-06-04 21:47

关注

我的配置是linux 64, android4.2.2的sdk。 实现的细节都在代码注释里了,变量名以及echo的内容也是说明的一部分。

主流程为:

1.检测是否指定端口的模拟器已经运行,若有则关闭
2.创建模拟器
3.启动模拟器
4.用ant build包,通过检查bin目录下有没有apk来确定是否成功
5.检查指定端口的模拟器是否已正常运行
6.用adb安装apk
7.启动apk的activity,让程序自己跑
8.用shell ps循环检测程序是否已退出,若已退出,检查是否sdcard是是否已成功生成报告文件
9.若报告文件不完整,即程序被中止/崩溃,重启activity
10.检测是否超时

#!/bin/bash

# by hursing 2013-10-28

# 指定port,可以不干扰其它正在运行的模拟器。根据sdk文档,port可以在5554至5584之间,最好是偶数

portNumber=5578

emulatorPID=`ps -ef | grep "emulator" | grep "port $portNumber" | awk '{print $2;}'`

if [ -n "$emulatorPID" ]; then

 echo "close emulator window"

 kill -9 $emulatorPID

fi

# 创建模拟器,force选项能覆盖已存在的模拟器,即sdcard内容也抹掉。echo no是回答不需要自定义硬件配置 echo "create avd" emulatorName="Test" echo no | android create avd --name $emulatorName --force --target android-17 --sdcard 300M --abi armeabi-v7a

# 启动模拟器,port选项指定tcp端口。&是另起进程执行 echo "start avd" emulator -avd $emulatorName -port $portNumber &

# 没有证书签名,所以是debug echo "build apk" android update project -p . ant debug if [ $? -ne 0 ]; then echo "build failed, try again now..." ant clean ant debug if [ $? -ne 0 ]; then echo "can NOT build apk!" exit 5 fi fi apkFile=`find ./bin/*.apk | grep -v "unaligned"` if [ -z "$apkFile" ]; then echo "no apk file generated!" exit 7 fi

# wait-for-device能block住脚本直到不显示offline echo "check emulator ready..." emulatorSerialNumber="emulator-$portNumber" ready=`adb devices | grep "$emulatorSerialNumber"` if [ -z "$ready" ]; then echo "emulator can NOT launch." exit 3 else ready=`adb devices | grep "$emulatorSerialNumber.*offline"` if [ -n "$ready" ]; then echo "wait-for-device" adb -s $emulatorSerialNumber wait-for-device sleep 10 fi fi

# 当adb可以安装时,模拟器未必已经初始化完成,还是会失败的,所以要检测error,试3遍。 echo "install apk" let maxTryTimes=3 while [ $maxTryTimes -gt 0 ]; do result=`adb -s $emulatorSerialNumber install $apkFile` # 'ant installd' can NOT specify device check=`echo "$result" | grep -o "Error"` if [ -z "$check" ]; then echo "successfully install apk" break; else echo "$result" echo "install failed, try again after sleeping 10 seconds" sleep 10 let maxTryTimes-=1 fi done if [ $maxTryTimes -eq 0 ]; then echo "can NOT install apk to emulator." exit 4 fi

echo "start MainActivity" activityName="com.hursing.MainActivity" packageName=`cat AndroidManifest.xml | grep -o "package=".*"" | sed 's/package="//;s/"//'` adb -s $emulatorSerialNumber shell am start -W -n "$packageName/$activityName"

heartBeat=10 echo "waiting for test finished.check every $heartBeat seconds." resultFile="/sdcard/result.txt" successFlag="End at " sleep $heartBeat let maxTimeLimit=60*10 while [ $maxTimeLimit -gt 0 ]; do running=`adb -s $emulatorSerialNumber shell ps | grep $packageName` if [ -n "$running" ]; then let maxTimeLimit-=$heartBeat echo "waiting, sleep another $heartBeat seconds..." sleep $heartBeat else report=`adb -s $emulatorSerialNumber shell cat "$resultFile"` check=`echo "$report" | grep -o "$successFlag"` if [ -z "$check" ]; then echo "app crash, run activity again..." adb -s $emulatorSerialNumber shell am start -W -n "$packageName/$activityName" else echo "app exit normally" break fi fi done

echo "close emulator window." kill -9 `ps -ef | grep "emulator" | grep "port $portNumber" | awk '{print $2;}'`

if [ $maxTimeLimit -eq 0 ]; then echo "Test timeout!" echo "$report" exit 9 else echo "Test Finished!" echo echo "$report" fi

java代码里有一点要注意,如果程序崩溃,弹出了"has stopped”对话框,那么ps还是能查到的,要自己调用

Thread.setDefaultUncaughtExceptionHandler

,在handler里直接System.exit(0)才行。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯