android渠道包自動化驗證
前言:android應用每當釋出一個版本時,往往需要打許多的渠道包,用於不同渠道的運營推廣,傳統的渠道包驗證往往是安裝某個apk包,然後開啟eclipse,執行應用,檢視其中的執行日誌,看傳送的請求中是否帶有該渠道資訊。
如此這般,若有上百個渠道包,是沒可能每個包都去驗證的,且若後期新增的渠道,亦還需抽空去驗證下apk渠道包,雖然並不是很耗時間,但常常被這樣的事打斷日常工作還是會讓人煩惱的,而自動化驗證渠道包就顯得方便很多。
思路:點選android應用,然後檢視日誌,這樣的過程完全可以利用robotium實現,編寫用例實現點選操作,通過solo.waitForLogMessage()方法可以判斷應用執行過程中是否出現了相應日誌。
解決方案:
1.用ant打包過程中,命令apk包名時,使包名中帶有渠道號
2.想辦法將包名中的渠道號取出,並傳遞至android模擬器或android手機
3.robotium測試工程完成讀取當前apk包的渠道號,並完成渠道號驗證
4.與jenkins整合,完成自動化構建、上傳至FTP、傳送郵件等
具體步驟:
1.編寫robotium測試用例,讀取SD卡中帶有渠道號的檔案
2.Jenkins中執行以下shell命令
(
#進入測試工程目錄
cd test_Robotium
#定義相關變數,其中某些變數為在jenkins中的引數化
APKPATH="$SRC_COID_APK_PATH"
ROBOAPKPATH="/usr/jenkins/jobs/Test/robotiumapk/RobotiumTest.apk"
CHANNELFILE="channel.txt"
APKFILE="apkfile.txt"
PREFIX="*_"
SUFFIX=".*"
#解除安裝測試工程包
adb uninstall com.company.package.test
#安裝測試工程包
adb install $ROBOAPKPATH
#清空檔案
: > $CHANNELFILE
: > $APKFILE
#for迴圈,取目錄中的所有apk安裝包
for FILEPATH in $APKPATH/*;do
echo $FILEPATH
echo $FILEPATH >> $APKFILE
apkname=$FILEPATH
#echo $apkname
#解除安裝、安裝單個的android應用安裝包
adb uninstall com.company.package
adb install "$apkname"
#獲取路徑下的apk包名、並擷取渠道號
coidnameapk=${apkname##$PREFIX}
#echo $coidnameapk
coidname=${coidnameapk%$SUFFIX}
echo $coidname
: > $CHANNELFILE
#將渠道號儲存到檔案
echo $coidname >> $CHANNELFILE
#將帶有渠道號內容的檔案傳至android模擬器或手機
adb push $CHANNELFILE /mnt/sdcard
#執行測試用例,自動驗證渠道號
adb -s emulator-5554 shell am instrument -w -e class com.company.package.test.ChannelTest#test01_coidTest com.company.package.test/android.test.InstrumentationTestRunner
#copy原apk包,並刪除原來apk包
cp "$apkname" $TEMP_COID_APK_PATH
rm -rf "$apkname"
#迴圈結束
done
#將所有驗證過的apk包壓縮打包,用於自動上傳至FTP
cd $TEMP_COID_APK_PATH
zip $BUILD_ID.zip $TEMP_COID_APK_PATH/*.apk
mv $TEMP_COID_APK_PATH/*.apk $DEST_COID_APK_PATH
)