bash 셸 스 크 립 트 안 드 로 이 드 자동화 테스트 배치 및 실행

제 설정 은 Liux 64, android 4.2.2 sdk 입 니 다.실 현 된 세부 사항 은 모두 코드 주석 에 있 고 변수 이름과 echo 의 내용 도 설명 의 일부분 입 니 다.
주류
  • 포트 를 지정 한 시 뮬 레이 터 가 실행 되 었 는 지 확인 하고 있 으 면 닫 습 니 다
  • 시 뮬 레이 터 만 들 기
  • 시 뮬 레이 터 시작
  • ant build 패키지 로 빈 디 렉 터 리 에 apk 가 있 는 지 확인 하여 성공 여 부 를 확인 합 니 다
  • 지정 한 포트 의 시 뮬 레이 터 가 정상적으로 작 동 하 는 지 확인 합 니 다
  • adb 로 apk 설치
  • apk 의 activity 를 시작 하여 프로그램 을 스스로 뛰 게 합 니 다
  • 셸 ps 순환 검사 프로그램 이 종료 되 었 는 지, 종료 되 었 다 면 sdcard 가 보고서 파일 을 성공 적 으로 생 성 했 는 지 확인 하 십시오
  • 보고 파일 이 완전 하지 않 으 면 프로그램 이 중단/무 너 지고 activity 를 다시 시작 합 니 다
  • 시간 초과 여부 검출
  • #!/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) 를 직접 사용 해 야 합 니 다.
    전재 출처 를 밝 혀 주 십시오:http://blog.csdn.net/hursing

    좋은 웹페이지 즐겨찾기