Monkey自动测试工具批处理版

背景

多年之前,用批处理写的一个Monkey自动化测试工具,可以自动进行Monkey自动化测试;

可以设定黑名单/白名单/随机Monkey测试,入门之作,仅供参考。

文末有完整源码获取方法

使用方法

将以下代码复制后,保存为*.bat批处理文件即可执行;或者新建一个记事本文件,将复制的代码粘贴进去,然后将文件名后缀改为*.bat,双击即可执行;

运行指南

Monkey_Test   Copyright HRD【工具说明】
monkey测试脚本,用于Android monkey测试,默认随机进行APK测试,若指定一个包名或者多个包名,请参考如下修改方法;1.通过更改配置文件config.conf的各项参数,来决定测试哪个APK以及测试的次数;
2.通过设置黑名单和白名单,来决定测试哪些APK;
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[appinfo]
appCnName=HRD      ----------------------------------------APK/OS的中文名字,改成实际名字,方便识别
appEnName=HRD      ----------------------------------------APK/OS的英文名字,改成实际名字,方便识别
appversion=V1.0.0  ----------------------------------------APK/OS的版本号
packageName=com.mediatek.camera        ------------------------APK的包名,填上实际测试的APK包名,包名获取参考【获取设备所有APK名字与包名】packageName=
package---Name=com.android.settings    ------------------------若要执行此项测试,将package和Name中间的"---"删除掉即可
package---Name=com.mediatek.camera ------------------------若要执行此项测试,将package和Name中间的"---"删除掉即可
package---Name=com.android.wallpaper   ------------------------若要执行此项测试,将package和Name中间的"---"删除掉即可
package---Name=com.android.settings -p com.android.wallpaper -p com.android.calculator2 -p com.mediatek.camera     ------此项为运行多个APKBlacklistTest=1        ----------------------------------------若设置为1,则会做排除黑名单的随机monkey测试
WhitelistTest=0        ----------------------------------------若设置为1,则会做只测试白名单的随机monkey测试
Cycle=10000        ----------------------------------------APK的循环测试次数
delay=500               ----------------------------------------每次操作间隔的时间特别注意:
1.以上package---Name中间的"---"删除掉之后,配置文件中只能同时存在一个packageName,否则程序会出错;
2.黑名单和白名单只能同时存在一个有效的设置项,即如果BlacklistTest=1,则必须WhitelistTest=0;反之WhitelistTest=1,则必须BlacklistTest=0;如果两个都设置为有效,程序会发生未知错误;备注:
指定测试多个包的方法:adb shell monkey -p com.android.settings -p com.mediatek.camera -p com.android.calculator2即packageName=XXX -p XXX -p XXX -p XXX -p XXX上面的XXX指的是APK的包名,每多一个包名,需要在前面加上-p的参数,字母必须为小写,大写会报错;如:
packageName=com.android.settings -p com.android.wallpaper -p com.android.calculator2 -p com.mediatek.camera@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2.monkey测试的monkey log会按照日期\时间的格式进行保存,同一台设备多次运行monkey测试,LOG会按照当前具体时间做区分;3.monkey测试完成后,logcat日志也会保存在同一个目录下;4.monkey测试完成后,会进行设备截屏,便于查找及追溯问题点;【使用方法】
a、保存脚本:拷贝Tools目录中的config.conf文件至新版本工具中的Tools目录下;b、修改配置:修改 config.conf 中内容为你需要测试的 APP/OS 对应的信息;c、执行脚本:双击 Monkey_Test.bat 即可;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
【更新日志】20170116 V1.0 初版,功能初步完成,待更新;20170117 V1.1 更新:
1.apk包名清单按照当前日期命名;
2.未插入设备之前将不会进行任何创建LOG目录的操作;
3.新增多个配置文件为预选包名,在package和Name中间加上"---"即可进行参数注销;
4.默认设定为随机测试;
5.新增多个APK包名测试的配置文件支持;
6.统一实时信息输出格式;
7.在monkey log中增加开始和结束的时间,便于追溯;
8.修复Windows10系统下注释内容报错问题;20170218 强制结束正在执行的monkey测试_20170218_v1.2 更新:
1.修复成功执行后不显示结果的bug;20170414_V1.2 更新:
1.可以手动设置每次操作间隔时间,默认为500,单位为毫秒(1秒=1000毫秒);
2.修复部分bug;20170418_v1.3 更新:
1.新增如果程序崩溃或者出现异常时,monkey测试不会停止的功能,直道达到设定次数;20170602_v1.4 更新:
1.全面优化整体架构和提示信息;
2.新增黑名单的monkey测试,测试时在配置文件config.conf中若设置BlacklistTest=1,则进行黑名单测试,黑名单中的包名不会被测试到;
3.新增白名单的monkey测试,测试时在配置文件config.conf中若设置WhitelistTest=1,则进行白名单测试,只会测试到白名单中的包名;
4.注意事项:
黑名单和白名单只能同时存在一个有效的设置项,
即如果BlacklistTest=1,则必须WhitelistTest=0;反之WhitelistTest=1,则必须BlacklistTest=0;
如果两个都设置为有效,程序会发生未知错误;
5.黑名单的创建方法:创建一个blacklist.txt的文本文件,文件里每一行只能放一个包名,另一个包名必须换行;
6.白名单的创建方法:创建一个whitelist.txt的文本文件,文件里每一行只能放一个包名,另一个包名必须换行;20170606 V2.0 更新:
1.全面重构monkey命令,防止程序中途停止;
2.monkey测试的LOG改为保存到平板内部存储:/sdcard/MonkeyLog.txt;
3.如果机器重复执行monkey测试,程序会自动检测是否存在monkeyLog,若有则以时间命名后将其备份到/sdcard/MonkeyLogBackup/目录下,便于后续查看Log;20170613 V2.1 更新:
1.修改所有条件下的Moneky测试的Log过滤级别为2,即输出所有测试信息到MonkeyLog.txt里面;20170614 V2.2 更新:
1.正常的MonkeyLog保存位置不变,新增Moneky error log保存位置为/sdcard/MonkeyError.txt,后面每进行一次Moneky测试都会自动备份MonkeyLog.txt和MonkeyError.txt;
2.修改触摸操作的事件总数量为50%;20170824 V2.3 更新:
1.修复部分bug;
2.优化读取的软件版本信息;
3.新增可以循环执行monkey测试,执行完一台机器后,按任意键执行下一台,方便多台机器可以依次执行;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@【脚本讲解】a、核心:Monkey命令adb shell monkey -p %packageName% -s %c_time% --throttle 100 -v -v -v 10000
-p %packageName% 指定测试包名,%packageName%变量值来自文件config.conf中的packageName对应的值。
-s %c_time% %c_time%为执行脚本当时的时间(小时、分、秒),以时间为值即达到随机目的,也为后续需要再模拟此次测试提供事件序列。
--throttle 100代表间隔时间,即每次操作的时间间隔,此命令的含义就是增加500ms的时间间隔。-v -v -v 10000-v -v -v日志级别 Level 2,最详细的日志,包括了测试中选中/未选中的Activity信息。10000即执行10000次随机事件。 核心指令2:
adb shell monkey --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions --throttle 1000 -v -v -v 200000【Android获取包名的方法】标签: it
方法一:
adb shell pm list package -f
将获取手机内所有apk对应的包名和路径
方法二:
adb shell dumpsys window w | findstr \/ | findstr name=
先打开需要查找的apk后,再敲入以上命令
方法三:
C:\Users\Administrator>adb shell
shell@ONDA:/ $  logcat | grep Android.intent.category.LAUNCHER
方法四:
adb shell dumpsys activity > d:\log.txt
先启动需要的查找的apk,再敲入以上命令,在stack #1下查找cmp=
方法五:
C:\Users\Administrator>adb shell
shell@ONDA:/ $ logcat | grep START
先启动需要查找的apk,再敲入以上命令,找到最后一个ActivityManager
方法六:
使用aapt
//aapt是sdk自带的一个工具,在sdk\builds-tools\目录下
1.以QQ音乐为例,命令行中切换到aapt.exe目录执行:aapt dump badging C:\Users\Administrator\Desktop\xxxxx.apk
2.运行后的结果中以下两行分别是应用包名package和入口activity名称
package: name='com.company.xxxx
launchable-activity: name='com.company.xxxx.activity.AppStarterActivity'
方法七:
查看AndroidManifest.xml
1.使用apktool反编译app:apktool d xxxxx.apk E:\apk\tmp
2.打开AndroidManifest.xml
manifest节点的package属性值是应用的包名:
查找android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,
android.intent.action.MAIN决定应用程序最先启动的Activity
android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里

附件

1.将MonkeyLog复制到当前目录下_V2.0_20170829.bat

@ECHO offset Str=将MonkeyLog复制到当前目录下_V2.0_20170829 by Ruidaset PCpath=.\Logtitle %Str%
ECHO.
ECHO       %Str%
ECHO.dir /AD %PCpath%:start
color 1fECHO 等待Android设备插入...
ECHO.
ECHO wait-for-device
ECHO.
adb wait-for-device
ECHO.
ECHO Start...
ECHO.
ECHO 已识别到Android设备...
ECHO.
ECHO 正在检查是否存在旧的Log文件,若存在将自动删除...ECHO.if exist %PCpath%\ rd /s /q %PCpath%\ && ECHO 正在删除旧的Log文件... && ECHO.if not exist %PCpath% md %PCpath%ECHO 正在复制中,请稍候...
ECHO.
title 正在复制中,请稍候...
ECHO.
adb pull /sdcard/MonkeyLogBackUp/. %PCpath%adb pull /sdcard/MonkeyLog.txt %PCpath%adb pull /sdcard/MonkeyError.txt %PCpath%start %PCpath%goto :eof

2.强制结束正在执行的monkey测试_v1.4_20171017.bat

@ECHO OFF
setlocal enabledelayedexpansion
color 0E
TITLE 强制结束正在执行的monkey测试_v1.4_20171017
ECHO.
ECHO 强制结束正在执行的monkey测试_v1.4_20171017
ECHO.
ECHO 等待设备插入...
:start
del /a/f/q shellps.log
ECHO wait-for-device
adb wait-for-device
ECHO.
ECHO Start ...
color 1F
ECHO.:APKALL
adb shell ps>shellps.log
For /f "tokens=2 delims= " %%a in ('type shellps.log ^| find /i "com.android.commands.monkey"') do set APKPIN=%%a
echo APKPIN=%APKPIN%
ping -n 2 127.0.0.1>nul
if not defined APKPIN goto NOPIN
ECHO adb shell kill %APKPIN%
adb shell kill %APKPIN%
ECHO.[ INFO ] 操作完成...
ECHO.[ INFO ] 已成功关闭正在运行的Monkey后台进程,5S后程序自动退出...
color 2f
del /a/f/q shellps.log
timeout 1
goto :eof:NOPIN
COLOR CF
ECHO.
ECHO.[ INFO ] 未发现Monkey后台进程,5S后程序自动退出...
ECHO.
del /a/f/q shellps.log
timeout 1
exit

3.获取设备所有的包名.bat

echo wait-for-device
adb wait-for-device
adb shell pm list package -f >apklist.log
echo read success !!!

获取结果

package:/system/priv-app/CtsShimPrivPrebuilt/CtsShimPrivPrebuilt.apk=com.android.cts.priv.ctsshim
package:/system/app/YouTube/YouTube.apk=com.google.android.youtube
package:/system/priv-app/GoogleExtServices/GoogleExtServices.apk=com.google.android.ext.services
package:/system/priv-app/TelephonyProvider/TelephonyProvider.apk=com.android.providers.telephony
package:/system/priv-app/Velvet/Velvet.apk=com.google.android.googlequicksearchbox
package:/system/priv-app/CalendarProvider/CalendarProvider.apk=com.android.providers.calendar
package:/system/priv-app/MediaProvider/MediaProvider.apk=com.android.providers.media
package:/system/priv-app/GoogleOneTimeInitializer/GoogleOneTimeInitializer.apk=com.google.android.onetimeinitializer
package:/system/app/GoogleExtShared/GoogleExtShared.apk=com.google.android.ext.shared
package:/system/priv-app/WallpaperCropper/WallpaperCropper.apk=com.android.wallpapercropper
package:/system/priv-app/DocumentsUI/DocumentsUI.apk=com.android.documentsui
package:/system/priv-app/ExternalStorageProvider/ExternalStorageProvider.apk=com.android.externalstorage
package:/system/app/HTMLViewer/HTMLViewer.apk=com.android.htmlviewer
package:/system/priv-app/MmsService/MmsService.apk=com.android.mms.service
package:/system/priv-app/DownloadProvider/DownloadProvider.apk=com.android.providers.downloads
package:/system/priv-app/ConfigUpdater/ConfigUpdater.apk=com.google.android.configupdater
package:/system/app/SoundRecorder/SoundRecorder.apk=com.android.soundrecorder
package:/system/priv-app/DefaultContainerService/DefaultContainerService.apk=com.android.defcontainer
package:/system/app/DownloadProviderUi/DownloadProviderUi.apk=com.android.providers.downloads.ui
package:/system/priv-app/Phonesky/Phonesky.apk=com.android.vending
package:/system/app/PacProcessor/PacProcessor.apk=com.android.pacprocessor
package:/system/app/CertInstaller/CertInstaller.apk=com.android.certinstaller
package:/system/app/RKUpdateService/RKUpdateService.apk=android.rockchip.update.service
package:/system/framework/framework-res.apk=android
package:/system/priv-app/Contacts/Contacts.apk=com.android.contacts
package:/system/app/Camera2/Camera2.apk=com.android.camera2
package:/system/app/EasterEgg/EasterEgg.apk=com.android.egg
package:/system/priv-app/MtpDocumentsProvider/MtpDocumentsProvider.apk=com.android.mtp
package:/system/app/Launcher3/Launcher3.apk=com.android.launcher3
package:/system/priv-app/BackupRestoreConfirmation/BackupRestoreConfirmation.apk=com.android.backupconfirm
package:/system/priv-app/StatementService/StatementService.apk=com.android.statementservice
package:/system/app/Gmail2/Gmail2.apk=com.google.android.gm
package:/system/priv-app/SetupWizard/SetupWizard.apk=com.google.android.setupwizard
package:/system/app/RkApkinstaller/RkApkinstaller.apk=com.android.apkinstaller
package:/system/priv-app/SettingsProvider/SettingsProvider.apk=com.android.providers.settings
package:/system/priv-app/SharedStorageBackup/SharedStorageBackup.apk=com.android.sharedstoragebackup
package:/system/app/Music2/Music2.apk=com.google.android.music
package:/system/app/PrintSpooler/PrintSpooler.apk=com.android.printspooler
package:/system/app/BasicDreams/BasicDreams.apk=com.android.dreams.basic
package:/system/app/RkExplorer/RkExplorer.apk=com.android.rk
package:/system/priv-app/InputDevices/InputDevices.apk=com.android.inputdevices
package:/system/priv-app/MusicFX/MusicFX.apk=com.android.musicfx
package:/system/app/Drive/Drive.apk=com.google.android.apps.docs
package:/system/app/Maps/Maps.apk=com.google.android.apps.maps
package:/system/app/WebViewGoogle/WebViewGoogle.apk=com.google.android.webview
package:/system/priv-app/Telecom/Telecom.apk=com.android.server.telecom
package:/system/app/GoogleContactsSyncAdapter/GoogleContactsSyncAdapter.apk=com.google.android.syncadapters.contacts
package:/system/app/KeyChain/KeyChain.apk=com.android.keychain
package:/system/app/Chrome/Chrome.apk=com.android.chrome
package:/system/priv-app/GooglePackageInstaller/GooglePackageInstaller.apk=com.google.android.packageinstaller
package:/system/priv-app/GmsCore/GmsCore.apk=com.google.android.gms
package:/system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk=com.google.android.gsf
package:/system/app/GoogleTTS/GoogleTTS.apk=com.google.android.tts
package:/system/priv-app/GooglePartnerSetup/GooglePartnerSetup.apk=com.google.android.partnersetup
package:/system/app/Videos/Videos.apk=com.google.android.videos
package:/system/priv-app/ProxyHandler/ProxyHandler.apk=com.android.proxyhandler
package:/system/app/LatinIME/LatinIME.apk=com.android.inputmethod.latin
package:/system/priv-app/GoogleFeedback/GoogleFeedback.apk=com.google.android.feedback
package:/system/app/GooglePrintRecommendationService/GooglePrintRecommendationService.apk=com.google.android.printservice.recommendation
package:/system/app/Photos/Photos.apk=com.google.android.apps.photos
package:/system/app/CalendarGoogle/CalendarGoogle.apk=com.google.android.calendar
package:/system/priv-app/ManagedProvisioning/ManagedProvisioning.apk=com.android.managedprovisioning
package:/system/app/MediaFloat/MediaFloat.apk=com.android.rk.mediafloat
package:/system/app/PhotoTable/PhotoTable.apk=com.android.dreams.phototable
package:/system/app/PartnerBookmarksProvider/PartnerBookmarksProvider.apk=com.android.providers.partnerbookmarks
package:/system/priv-app/GoogleLoginService/GoogleLoginService.apk=com.google.android.gsf.login
package:/system/app/WAPPushManager/WAPPushManager.apk=com.android.smspush
package:/system/app/LiveWallpapersPicker/LiveWallpapersPicker.apk=com.android.wallpaper.livepicker
package:/system/priv-app/StressTest/StressTest.apk=com.cghs.stresstest
package:/system/priv-app/GoogleBackupTransport/GoogleBackupTransport.apk=com.google.android.backuptransport
package:/system/priv-app/StorageManager/StorageManager.apk=com.android.storagemanager
package:/system/app/OpenWnn/OpenWnn.apk=jp.co.omronsoft.openwnn
package:/system/app/BookmarkProvider/BookmarkProvider.apk=com.android.bookmarkprovider
package:/system/priv-app/Settings/Settings.apk=com.android.settings
package:/system/app/Lightning/Lightning.apk=acr.browser.barebones
package:/system/app/ExactCalculator/ExactCalculator.apk=com.android.calculator2
package:/system/app/CtsShimPrebuilt/CtsShimPrebuilt.apk=com.android.cts.ctsshim
package:/system/priv-app/VpnDialogs/VpnDialogs.apk=com.android.vpndialogs
package:/system/app/Hangouts/Hangouts.apk=com.google.android.talk
package:/system/priv-app/TeleService/TeleService.apk=com.android.phone
package:/system/priv-app/Shell/Shell.apk=com.android.shell
package:/system/app/WallpaperBackup/WallpaperBackup.apk=com.android.wallpaperbackup
package:/system/priv-app/BlockedNumberProvider/BlockedNumberProvider.apk=com.android.providers.blockednumber
package:/system/app/UserDictionaryProvider/UserDictionaryProvider.apk=com.android.providers.userdictionary
package:/system/priv-app/FusedLocation/FusedLocation.apk=com.android.location.fused
package:/system/app/DeskClock/DeskClock.apk=com.android.deskclock
package:/system/priv-app/SystemUI/SystemUI.apk=com.android.systemui
package:/system/priv-app/DeviceTest/DeviceTest.apk=com.DeviceTest
package:/system/app/WallpaperPicker/WallpaperPicker.apk=com.android.wallpaperpicker
package:/system/priv-app/ContactsProvider/ContactsProvider.apk=com.android.providers.contacts
package:/system/app/CaptivePortalLogin/CaptivePortalLogin.apk=com.android.captiveportallogin
package:/system/app/RkVideoPlayer/RkVideoPlayer.apk=android.rk.RockVideoPlayer

主入口:Monkey_Test_V2.3_20181026.bat

@ECHO OFF
setlocal enableDelayedexpansion
color 1F
title Monkey自动测试脚本_Log生成到本机_V2.3_20181026 by HRDECHO        ==============================================================
ECHO        ******                                                  ******
ECHO        ******                 Monkey  测试工具                 ******
ECHO        *****                                                    *****
ECHO        ****                   作者:HRD                        ***
ECHO        *****                                                     ****
ECHO        ******                 版本:V2.3                       ******
ECHO        ******                                                  ******
ECHO        ******                 时间:2018.10.26                 ******
ECHO        ==============================================================IF NOT EXIST .\Tools\config.conf GOTO EXIT
::if exist .\Tools\*.log del /f /q .\Tools\*.logFor /f "tokens=2 delims==" %%a in ('type .\Tools\config.conf ^| find /i "PackageName"') do set PackageName=%%a
For /f "tokens=2 delims==" %%a in ('type .\Tools\config.conf ^| find /i "AppCnName"') do set AppCnName=%%a
For /f "tokens=2 delims==" %%a in ('type .\Tools\config.conf ^| find /i "AppEnName"') do set AppEnName=%%a
For /f "tokens=2 delims==" %%a in ('type .\Tools\config.conf ^| find /i "AppVersion"') do set AppVersion=%%a
For /f "tokens=2 delims==" %%a in ('type .\Tools\config.conf ^| find /i "Cycle"') do set Cycle=%%a
For /f "tokens=2 delims==" %%a in ('type .\Tools\config.conf ^| find /i "Delay"') do set Delay=%%a
For /f "tokens=2 delims==" %%a in ('type .\Tools\config.conf ^| find /i "LogPath"') do set LogPath=%%aECHO.
ECHO 准备Monkey测试...
ECHO.
ECHO 读取config.conf中测试配置信息...
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ECHO.
type .\Tools\config.conf
ECHO.
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ECHO.
ECHO 请确认以上信息是否正确(按任意键可跳过此步骤)...
timeout 10:start
color 1f
SET c_date=%date:~0,4%%date:~5,2%%date:~8,2%
SET c_time=%time:~0,2%
IF /i %c_time% LSS 10 ( SET c_time=0%time:~1,1% )
SET c_time=%c_time%%time:~3,2%%time:~6,2%::SET LogFileName=%c_date%%c_time%_MonkeyLog.txt
SET LogFileName=MonkeyLog.txtECHO.
ECHO Monkey Log保存位置为: %LogPath%/%LogFileName%
ECHO.
ECHO Monkey Error Log保存位置为: %LogPath%/MonkeyError.txt
ECHO.ECHO.
ECHO 等待设备插入...
ECHO wait-for-device
adb wait-for-device
ECHO.
ECHO Start ...
color 9F
adb root
ping -n 2 127.0.0.1>nul
adb root
adb remount
adb remountset File=DeviceInfo.logadb shell cat /system/build.prop>%File%
For /f "tokens=2 delims==" %%a in ('type %File% ^| find /i "ro.build.version.release"') do set androidOS=%%a
For /f "tokens=2 delims==" %%a in ('type %File% ^| find /i "ro.product.model"') do set model=%%a
For /f "tokens=2 delims==" %%a in ('type %File% ^| find /i "ro.product.brand"') do set brand=%%a
For /f "tokens=2 delims==" %%a in ('type %File% ^| find /i "ro.build.version.security_patch"') do set security_patch=%%a
For /f "tokens=2 delims==" %%a in ('type %File% ^| find /i "ro.build.display.id"') do set displayId=%%a
For /f "tokens=2 delims==" %%a in ('type %File% ^| find /i "ro.product.locale"') do set locale=%%a
For /f "tokens=2 delims==" %%a in ('type %File% ^| find /i "ro.build.type"') do set Mode=%%a
For /f "tokens=2 delims==" %%a in ('type %File% ^| find /i "net.bt.name"') do set bt=%%a
For /f "tokens=2 delims==" %%a in ('type %File% ^| find /i "ro.build.version.incremental"') do set OSdate=%%aECHO 正在读取Android设备信息...if exist "%File%" del /f /q /a "%File%"ECHO 读 取 日 期:%date% %time% > "%File%"
ECHO.>>"%File%"
ECHO 设备信息如下:>>"%File%"
ECHO.>>"%File%"
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ >> "%File%"
ECHO 设 备 品 牌:  %brand%>>"%File%"
ECHO 设 备 型 号:  %model%>>"%File%"
ECHO 默 认 语 言:  %locale%>>"%File%"
ECHO 安卓 版本号:  Android %androidOS%>>"%File%"
ECHO 软件 版本号:  %displayId%>>"%File%"
ECHO OS   类  型:  %Mode%>>"%File%"
ECHO Build  日期:  %OSdate%>>"%File%"
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ >> "%File%"set time1=%date% %time%
ECHO.
ECHO 开始时间=%time1%
ECHO.
ECHO 开始时间=%time1% >> "%File%"
ECHO. >> "%File%":BackupLog
ECHO.
ECHO 正在检查是否已存在 MonkeyLog ,若存在将自动备份...
adb shell ls %LogPath%/%LogFileName% | findstr "%LogFileName%"if %errorlevel% == 0 ( adb shell ls %LogPath%/MonkeyLogBackUp/ | findstr "No such file or directory"if %errorlevel% == 0 ( adb shell mkdir %LogPath%/MonkeyLogBackUp/ )adb shell mv %LogPath%/%LogFileName% %LogPath%/MonkeyLogBackUp/.adb shell sleep 2adb shell rename %LogPath%/MonkeyLogBackUp/%LogFileName% %LogPath%/MonkeyLogBackUp/%c_date%%c_time%_MonkeyLog_BackUp.txtECHO. ECHO 正在检查是否已存在 Monkey错误日志 ,若存在将自动备份...ECHO.adb shell mv %LogPath%/MonkeyError.txt %LogPath%/MonkeyLogBackUp/.adb shell sleep 2adb shell rename %LogPath%/MonkeyLogBackUp/MonkeyError.txt %LogPath%/MonkeyLogBackUp/%c_date%%c_time%_MonkeyErrorBackUp.txtECHO.ECHO 如下为已备份的所有的Monkey日志:adb shell ls %LogPath%/MonkeyLogBackUp/ECHO.ECHO 旧的 Monkey日志 已备份至如下目录:%LogPath%/MonkeyLogBackUp/%c_date%%c_time%_MonkeyLog_BackUp.txtECHO.ECHO 旧的 Monkey错误日志 已备份至如下目录:%LogPath%/MonkeyLogBackUp/%c_date%%c_time%_MonkeyErrorBackUp.txtECHO.
)ECHO.
ECHO 读取设备软件版本信息...
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
TYPE "%File%"
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ECHO.adb shell rm %LogPath%/%LogFileName%adb push "%File%" %LogPath%/.
adb shell "cat %LogPath%/%File% > %LogPath%/%LogFileName%"if exist "%File%" del /f /q /a "%File%"ECHO [ 正在执行...] 使用Logcat清空Phone中log...adb logcat -c
REM ECHO. 暂停2秒...
ping -n 2 127.0.0.1>nul
ECHO.
ECHO 开始执行Monkey命令...
ECHO.
ECHO 准备测试的APK包名为=    %PackageName%   REM :::::::::::::::::Monkey测试命令::::::::::::::::::::::::
REM ::::::::::::修改策略请仅在此区域内修改::::::::::::::::::checkPN
if not defined PackageName goto NOPNECHO 强制关闭准备测试的APK...adb shell am force-stop %PackageName%ECHO.
ECHO 开始进行指定APK测试,确认测试开始执行后可以断开设备...
ECHO.
ECHO 请等待程序自动完成...
ECHO.
ECHO [ 正在执行...] "adb shell monkey -p %PackageName% -s 10000 --pct-touch 50 --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions --throttle %Delay% -v -v -v %Cycle% 1>> %LogPath%/%LogFileName% 2> %LogPath%/MonkeyError.txt"adb shell "monkey -p %PackageName% -s 10000 --pct-touch 50 --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions --throttle %Delay% -v -v -v %Cycle% 1>> %LogPath%/%LogFileName% 2> %LogPath%/MonkeyError.txt"goto MonkeyEnd:NOPN
ECHO.
ECHO 检测到未设置任何包名,将进行随机APK测试...find /i "BlacklistTest=1" .\Tools\config.conf
if %errorlevel% == 0 goto BlackTestfind /i "WhiteListTest=1" .\Tools\config.conf
if %errorlevel% == 0 goto WhiteTestECHO.
ECHO 开始进行随机性APK测试,确认测试开始执行后可以断开设备...
ECHO.
ECHO 请等待程序自动完成...
ECHO.ECHO "adb shell monkey --pct-touch 50 --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions --throttle %Delay% -v -v -v %Cycle% 1>> %LogPath%/%LogFileName% 2> %LogPath%/MonkeyError.txt"adb shell "monkey --pct-touch 50 --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions --throttle %Delay% -v -v -v %Cycle% 1>> %LogPath%/%LogFileName% 2> %LogPath%/MonkeyError.txt":MonkeyEnd
ECHO 执行Monkey命令结束...
ECHO.:EXIT
color 2f
ECHO.
ECHO [ 操作完成...]
ECHO.
SET time2=%date% %time%
ECHO 开始时间=%time1%
ECHO.
ECHO 终止时间=%time2%
ECHO.
ECHO 请按任意键继续执行下一台机器...
ECHO.
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
PAUSE>nul
goto start
goto :eof:BlackTest
ECHO 检测到已设置 [ 黑名单 ],将进行排除[ 黑名单包名 ]的随机APK测试...
if not exist .\Tools\blacklist.txt goto NoBlackList
adb push .\Tools\blacklist.txt /data/local/tmp/
if errorlevel 1 goto pushfail
ECHO.
ECHO 黑名单列表如下:
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
TYPE .\Tools\blacklist.txt
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ECHO.
ECHO.
ECHO 正在进行排除[ 黑名单包名 ]的随机APK测试,确认测试开始执行后可以断开设备...
ECHO.
ECHO. 请等待程序自动完成...ECHO "adb shell --pct-touch 50 monkey --pkg-blacklist-file /data/local/tmp/blacklist.txt --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions --throttle %Delay% -v -v -v %Cycle% 1>> %LogPath%/%LogFileName% 2> %LogPath%/MonkeyError.txt"adb shell "monkey --pct-touch 50 --pkg-blacklist-file /data/local/tmp/blacklist.txt --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions --throttle %Delay% -v -v -v %Cycle% 1>> %LogPath%/%LogFileName% 2> %LogPath%/MonkeyError.txt"goto MonkeyEnd:WhiteTest
ECHO 检测到已设置 [ 白名单 ],将进行[ 只测试 白名单包名 ]的随机APK测试...
if not exist .\Tools\whitelist.txt goto NoWhiteTest
adb push .\Tools\whitelist.txt /data/local/tmp/
if errorlevel 1 goto pushfail
ECHO.
ECHO 白名单列表如下:
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
TYPE .\Tools\whitelist.txt
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ECHO.
ECHO.
ECHO 正在进行[ 只测试 白名单包名 ]的随机APK测试,确认测试开始执行后可以断开设备...
ECHO.
ECHO 请等待程序自动完成...ECHO "adb shell monkey --pct-touch 50 --pkg-whitelist-file /data/local/tmp/whitelist.txt --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions --throttle %Delay% -v -v -v %Cycle% 1>> %LogPath%/%LogFileName% 2> %LogPath%/MonkeyError.txt"adb shell "monkey --pct-touch 50 --pkg-whitelist-file /data/local/tmp/whitelist.txt --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions --throttle %Delay% -v -v -v %Cycle% 1>> %LogPath%/%LogFileName% 2> %LogPath%/MonkeyError.txt"goto MonkeyEnd:NoBlackList
color cf
ECHO 未发现黑名单文件清单...
ECHO.
ECHO 请在程序.\Tools\目录下新增一个 blacklist.txt 的文本文件...
ECHO.
ECHO 请注意:文本文件中每行只能有一个包名,第二个包名需要换行...
ECHO.
ECHO 按任意键继续...
pause
goto start:pushfail
color cf
ECHO 复制 黑名单文件/白名单文件到平板或者手机内失败...
ECHO.
ECHO 按任意键继续...
pause
goto start:Nowhitelist.txt
color cf
ECHO 未发现 白名单 文件清单...
ECHO.
ECHO 请在程序.\Tools\目录下新增一个 whitelist.txt 的文本文件...
ECHO.
ECHO 请注意:文本文件中每行只能有一个包名,第二个包名需要换行...
ECHO.
ECHO 按任意键继续...
pause
goto start

运行截图

黑名单设定内容

每行一个包名,若启用黑名单,则黑名单中的APK包名将不会被执行

白名单设定内容

每行一个包名,若启用白名单,则只会执行白名单中的APK包名,其他的APK将不会被执行到

config.conf文件的内容

程序文件清单

导出的测试日志

错误日志:MonkeyError.txt

args: [--pct-touch, 50, --ignore-crashes, --ignore-timeouts, --kill-process-after-error, --ignore-security-exceptions, --throttle, 500, -v, -v, -v, 100000000]arg: "--pct-touch"arg: "50"arg: "--ignore-crashes"arg: "--ignore-timeouts"arg: "--kill-process-after-error"arg: "--ignore-security-exceptions"arg: "--throttle"arg: "500"arg: "-v"arg: "-v"arg: "-v"arg: "100000000"
arg="--pct-touch" mCurArgData="null" mNextArg=1 argwas="--pct-touch" nextarg="50"
data="50"
arg="--ignore-crashes" mCurArgData="null" mNextArg=3 argwas="--ignore-crashes" nextarg="--ignore-timeouts"
arg="--ignore-timeouts" mCurArgData="null" mNextArg=4 argwas="--ignore-timeouts" nextarg="--kill-process-after-error"
arg="--kill-process-after-error" mCurArgData="null" mNextArg=5 argwas="--kill-process-after-error" nextarg="--ignore-security-exceptions"
arg="--ignore-security-exceptions" mCurArgData="null" mNextArg=6 argwas="--ignore-security-exceptions" nextarg="--throttle"
arg="--throttle" mCurArgData="null" mNextArg=7 argwas="--throttle" nextarg="500"
data="500"
java.io.FileNotFoundException: /data/system/theme_config/theme_compatibility.xml: open failed: ENOENT (No such file or directory)at libcore.io.IoBridge.open(IoBridge.java:496)at java.io.FileInputStream.<init>(FileInputStream.java:159)at java.io.FileInputStream.<init>(FileInputStream.java:115)at java.io.FileReader.<init>(FileReader.java:58)at miui.content.res.ThemeCompatibilityLoader.getVersion(ThemeCompatibilityLoader.java:108)at miui.content.res.ThemeCompatibilityLoader.getConfigDocumentTree(ThemeCompatibilityLoader.java:126)at miui.content.res.ThemeCompatibilityLoader.loadConfig(ThemeCompatibilityLoader.java:59)at miui.content.res.ThemeCompatibility.<clinit>(ThemeCompatibility.java:31)at miui.content.res.ThemeCompatibility.isThemeEnabled(ThemeCompatibility.java:111)at android.content.res.MiuiResourcesImpl.<clinit>(MiuiResourcesImpl.java:41)at android.content.res.Resources.<init>(Resources.java:285)at android.content.res.MiuiResources.<init>(MiuiResources.java:49)at android.content.res.Resources.getSystem(Resources.java:206)at android.util.MiuiMultiWindowAdapter.<clinit>(MiuiMultiWindowAdapter.java:79)at android.view.Display.getWidth(Display.java:745)at com.android.commands.monkey.MonkeySourceRandom.randomPoint(MonkeySourceRandom.java:330)at com.android.commands.monkey.MonkeySourceRandom.generatePointerEvent(MonkeySourceRandom.java:270)at com.android.commands.monkey.MonkeySourceRandom.generateEvents(MonkeySourceRandom.java:405)at com.android.commands.monkey.MonkeySourceRandom.getNextEvent(MonkeySourceRandom.java:494)at com.android.commands.monkey.Monkey.runMonkeyCycles(Monkey.java:1215)at com.android.commands.monkey.Monkey.run(Monkey.java:708)at com.android.commands.monkey.Monkey.main(Monkey.java:568)at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:380)
Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)at libcore.io.Linux.open(Native Method)at libcore.io.ForwardingOs.open(ForwardingOs.java:167)at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)at libcore.io.IoBridge.open(IoBridge.java:482)... 23 more
// CRASH: com.android.vending (pid 12112)
// Short Msg: java.lang.SecurityException
// Long Msg: java.lang.SecurityException: Remote stack trace:at com.android.server.content.ContentService.registerContentObserver(ContentService.java:344)at android.content.IContentService$Stub.onTransact(IContentService.java:514)at android.os.Binder.execTransactInternal(Binder.java:1021)at android.os.Binder.execTransact(Binder.java:994)// Build Label: xiaomi/ginkgo/ginkgo:10/QKQ1.200114.002/V12.0.3.0.QCOCNXM:user/release-keys
// Build Changelist: V12.0.3.0.QCOCNXM
// Build Time: 1605613349000
// java.lang.RuntimeException: Unable to create application com.google.android.finsky.application.classic.ClassicProdApplication: java.lang.RuntimeException: Failed to load configurations for FinskyApp
//  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6589)
//  at android.app.ActivityThread.access$1400(ActivityThread.java:226)
//  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1889)
//  at android.os.Handler.dispatchMessage(Handler.java:107)
//  at android.os.Looper.loop(Looper.java:225)
//  at android.app.ActivityThread.main(ActivityThread.java:7564)
//  at java.lang.reflect.Method.invoke(Native Method)
//  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
//  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
// Caused by: java.lang.RuntimeException: Failed to load configurations for FinskyApp
//  at dzz.aB(PG:17)
//  at dzz.aA(PG:17)
//  at dzz.ab(PG:2)
//  at ecd.onCreate(PG:3)
//  at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1190)
//  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6584)
//  ... 8 more
// Caused by: java.util.concurrent.ExecutionException: java.lang.SecurityException: Failed to find provider com.google.android.gsf.gservices for user 0; expected to find a valid ContentProvider for this authority
//  at atcl.a(PG:3)
//  at atcl.get(PG:9)
//  at atfm.a(PG:1)
//  at dzz.aB(PG:16)
//  ... 13 more
// Caused by: java.lang.SecurityException: Failed to find provider com.google.android.gsf.gservices for user 0; expected to find a valid ContentProvider for this authority
//  at android.os.Parcel.createException(Parcel.java:2074)
//  at android.os.Parcel.readException(Parcel.java:2042)
//  at android.os.Parcel.readException(Parcel.java:1990)
//  at android.content.IContentService$Stub$Proxy.registerContentObserver(IContentService.java:1336)
//  at android.content.ContentResolver.registerContentObserver(ContentResolver.java:2279)
//  at android.content.ContentResolver.registerContentObserver(ContentResolver.java:2267)
//  at ammu.b(PG:2)
//  at ammu.b(PG:6)
//  at aqln.<init>(Unknown Source:5)
//  at aqlo.a(PG:6)
//  at eae.a(Unknown Source:75)
//  at auzv.run(Unknown Source:2)
//  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462)
//  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
//  at auzx.run(PG:2)
//  at auzz.run(Unknown Source:12)
//  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
//  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
//  at adtq.run(Unknown Source:7)
//  at java.lang.Thread.run(Thread.java:919)
// Caused by: android.os.RemoteException: Remote stack trace:
//  at com.android.server.content.ContentService.registerContentObserver(ContentService.java:344)
//  at android.content.IContentService$Stub.onTransact(IContentService.java:514)
//  at android.os.Binder.execTransactInternal(Binder.java:1021)
//  at android.os.Binder.execTransact(Binder.java:994)
//
//

运行日志:MonkeyLog.txt

今日美图

 

Monkey自动测试工具批处理版

完整源码下载地址

链接:https://pan.baidu.com/s/1NfsRnzfEQvriOrztBDm5vQ 
提取码:2byf

原创|批处理|Monkey自动测试工具批处理版相关推荐

  1. android 测试 大赛,轻量级android应用自动测试工具-2017全国大学生软件测试大赛.pdf...

    轻量级android应用自动测试工具-2017全国大学生软件测试大赛 DroidBot: A Lightweight Android App Testing Bot 轻量级Android应用自动测试工 ...

  2. Hitchhiker:原创开源API协作测试工具

    原文:Hitchhiker:原创开源API协作测试工具 关于作者: Hitchhiker 是一款开源的 Restful Api 集成测试工具,支持Schedule, 数据对比,压力测试,可以轻松部署到 ...

  3. 简单介绍VS2015自动测试工具

    概述 VS2015这款软件是一款功能非常强大的开发工具,而且还提供了自动测试管理工具. 工具介绍 首先,在VS2015中新建一个类库ClassLibrary2,在类库中新建一个类Class1,在这个类 ...

  4. python测试工具在线版_使用Docker实现Python3.5、Python2.7 在线编程测试执行代码工具-toolfk.com...

    代码教學 本工具[在线Python执行测试工具]依赖于Docker,大家可直接从Docker拉相关Python代码,使用代码如下 STEP 1 STEP 2 使用的DOCKER的核心代码如下,主要是写 ...

  5. html测试工具手机版,SP META Tool(手机测试工具)

    SP META Tool是一款手机测试软件,可以对你的手机多个功能测试,这款软件功能很多,连接到你的手机就可以执行测试,你也可以从本地加载验证的文件到软件测试,通过分析多项参数从而了解软件相关模块的性 ...

  6. c语言的自动测试工具,C语言单元测试框架--check工具

    C语言单元测试框架--check工具 虽然在UNIX上用C语言做开发已经有一段时间了,但是我不得不承认,自己单元测试做的并不好.恰好最近有新的开发任务,就学习了一些关于测试驱动开发的知识,准备改进自己 ...

  7. [原创]Pubwin2007服务器安全测试工具(防范Pubwin收银伴侣之类的软件)

    Pubwin作为一个收银软件,对它破解的讨论自从出生到现在也没有停止.以住大家破解主要是在客户机上做的,如破解Pubwin客户端等来达到免费上网的目的.后来人们发现连接到Pubwin数据服务器后还可以 ...

  8. python软件测试脚本_Playwright(python)浏览器脚本录制 自动测试工具使用

    功能:录制浏览器操作并自动生成py或js代码 以下是python环境下的教程.环境要求需Python3.7+,安装: # 安装playwright库 pip install playwright # ...

  9. Android10.0 压力测试--恢复出厂自动测试工具

    知识储备 1.恢复出厂接口调用 从系统设置中重置页面入手,很容易找到 packages/apps/Settings/src/com/android/settings/MasterClearConfir ...

  10. 十大网站压力测试软件 - WEB压力测试工具介绍

    下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的WEB应用能够顶得住多少的并发量,以及你的网站的性能.我相信,北京奥组委的订票网站的开发团队并不知道有这样 ...

最新文章

  1. Java消息服务JMS详解
  2. java常用数据类型之间转换
  3. ES6之let和const
  4. 数据库系统的三级模式结构知识笔记
  5. 【Python CheckiO 题解】Absolute Sorting
  6. JAVA入门级教学之(对象和引用)
  7. JavaScript缓存处理代码
  8. python解决urllib发送请求报错:urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED].....>
  9. C#压缩指定的文件并生成zip文件
  10. 二分查找递归、非递归实现(Python)
  11. 【备忘】Java教学系列视频教程 孔浩老师 千课巨献全网最全 共26G
  12. Python三种设计模式
  13. 2020全国高校计算机能力挑战赛(word模拟题)
  14. 大数据图解美英法空袭叙利亚,都动用了哪些装备?
  15. python手机屏幕自动点击代码_鼠标隔段时间自动点击屏幕
  16. matplotlib生成没有留白的图片
  17. squad战术小队steam服务器搭建教程。
  18. luogu 1351
  19. n9005zhuenb6 Android 5,三星GalaxyNote3(港版N9005)刷机与ROOT方法-独木成林
  20. 自己动手制作植物大战僵尸简单修改器(2)

热门文章

  1. python爬取58同城二手房信息
  2. 几分钟就可做出的酷炫PPT动画效果
  3. mui框架从0到1【webapp开发教程】
  4. netapp linux ntfs,netapp存储常用命令
  5. 百度AI身份验证(公安验证)接口开发
  6. CDR有哪些常用的快捷键
  7. 正从服务器获取安装包消息 荣耀9,华为荣耀9 root教程 华为荣耀9获取root权限的方法...
  8. 基于PHP+Web+Mysql的在线问卷调查系统
  9. 利用NoteExpress统一Elsevier旗下期刊参考文献格式
  10. Java 实现MD5加密