안 드 로 이 드 자동화 테스트 배치 실현 및 Shell 스 크 립 트 실행 공유
주류
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)를 직접 사용 해 야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.