当前位置: 首页 > 编程笔记 >

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

柳昊焱
2023-03-14
本文向大家介绍实现android自动化测试部署与运行Shell脚本分享,包括了实现android自动化测试部署与运行Shell脚本分享的使用技巧和注意事项,需要的朋友参考一下

我的配置是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)才行。

 类似资料:
  • 本文向大家介绍linux实现自动部署tomcat脚本,包括了linux实现自动部署tomcat脚本的使用技巧和注意事项,需要的朋友参考一下 由于经常部署war到tomccat上,经常有一些重复的工作要做:停服务、备份war包、上传新的war包、启动服务。索性就写了一个自动部署的脚本。 脚本如下autoDeploy.sh: 说明: 1.新建一个目录autoDeploy与tomcat目录放在同级目录下

  • 本文向大家介绍实现android应用程序自动化测试的批处理脚本,包括了实现android应用程序自动化测试的批处理脚本的使用技巧和注意事项,需要的朋友参考一下 测试平台:兼容android所有平台(2.3-4.2)   测试背景:由于需要对产品的SDK做接口测试,而这些接口需要在app里面调用,故开发了一个简单的android应用(如图),用来调用需要测试的接口,app中的每个按钮其实都是一个测试

  • 本文向大家介绍Shell实现的Oracle启动脚本分享,包括了Shell实现的Oracle启动脚本分享的使用技巧和注意事项,需要的朋友参考一下 Usage: sh oracled [start|stop|restart] SIDs 其中SIDs是数据库名,多个名称之间用逗号分隔。缺省的操作是 restart ,也可以指定需要进行的操作( start | stop | restart )

  • 本文向大家介绍shell实现自动adsl拨号并检测连接状况脚本分享,包括了shell实现自动adsl拨号并检测连接状况脚本分享的使用技巧和注意事项,需要的朋友参考一下 今天公司同事要我整个adsl自动重拨的shell,并检测是否连上了,这样才能保证内部测试服务器不掉网,好吧,下面我把脚本发出来. 系统:centos 5.x 脚本1: 脚本2: ps:脚本2的作用就是检测adsl拨号是否有连上.

  • 本文向大家介绍使用Python+selenium实现第一个自动化测试脚本,包括了使用Python+selenium实现第一个自动化测试脚本的使用技巧和注意事项,需要的朋友参考一下 最近在学web自动化,记录一下学习过程。 此处我选用python3.6+selenium3.0,均用最新版本,以适应未来需求。 环境:windows10,64位 一、安装python python官方下载地址:https

  • 本文向大家介绍Shell脚本实现监控kingate并自动启动,包括了Shell脚本实现监控kingate并自动启动的使用技巧和注意事项,需要的朋友参考一下 自己在vps做的kingate服务端,估计最近占用流量太大了,老是被服务商把我vps重启,但kingate这个东西是一旦被强制结束掉,是无法开机启动的,因为要把kingate.pid这个文件删除了才能启动,好吧,对于我们这样的懒人来说,当然不能