안 드 로 이 드 자동화 테스트 배치 실현 및 Shell 스 크 립 트 실행 공유

제 설정 은 Liux 64,android 4.2.2 sdk 입 니 다.실 현 된 세부 사항 은 모두 코드 주석 에 있 고 변수 이름과 echo 의 내용 도 설명 의 일부분 입 니 다.
주류
1.포트 를 지정 한 시 뮬 레이 터 가 실행 되 었 는 지 확인 하고 있 으 면 닫 습 니 다.
2.시 뮬 레이 터 만 들 기
3.시 뮬 레이 터 시작
4.ant build 패키지 로 bin 디 렉 터 리 에 apk 가 있 는 지 확인 하여 성공 여 부 를 확인 합 니 다.
5.지정 한 포트 의 시 뮬 레이 터 가 정상적으로 작 동 하 는 지 확인 합 니 다.
6.adb 로 apk 설치
7.apk 의 activity 를 시작 하여 프로그램 을 스스로 뛰 게 합 니 다.
8.셸 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

자바 코드 에 주의 할 점 이 있 습 니 다.프로그램 이 무 너 지면"has stopped"대화 상자 가 뜨 면 ps 에서 찾 을 수 있 습 니 다.스스로 호출 해 야 합 니 다.

Thread.setDefaultUncaughtExceptionHandler
,handler 에서 System.exit(0)를 직접 사용 해 야 합 니 다.

좋은 웹페이지 즐겨찾기