批处理bat 之 Android Monkey

实现功能:

1.运行monkey_run.bat,直接执行monkey命令;

2.运行monkey_stop.bat,输入PID,kill mongkey进程;

3.同步获取logcat;

4.同步保存CPU和内存值(top命令);

monkey_run.bat 代码:

@echo off

if "%time:~0,1%"==" " set "time=0%time:~1%"
set date_folder=%date:~0,4%-%date:~5,2%-%date:~8,2%

if NOT EXIST MonkeyLog_%date_folder% mkdir MonkeyLog_%date_folder%

adb wait-for-device
adb shell "ps|grep com.android.commands.monkey"

if "%ERRORLEVEL%"=="1" ( 
    start %~dp0Batchlogcat.bat
    start %~dp0Batch	op.bat
    start %~dp0Batchmonkey.bat
) else (
    echo Monkey早就运行了,不需要重复运行。
    echo 如果想重新运行,请先停止monkey!
    pause
)

locat.bat 代码:

@echo off

if "%time:~0,1%"==" " set "time=0%time:~1%"
set date_folder=%date:~0,4%-%date:~5,2%-%date:~8,2%
set time_folder=%time:~0,2%-%time:~3,2%-%time:~6,2%
set log_name=logcat_%date_folder%-%time_folder%
set log_path=MonkeyLog_%date_folder%

adb wait-for-device

echo - - - logcat window- - -
adb logcat > ./%log_path%/%log_name%.log
echo - - - Over! - - -

top.bat 代码:

@echo off

if "%time:~0,1%"==" " set "time=0%time:~1%"
set date_folder=%date:~0,4%-%date:~5,2%-%date:~8,2%
set time_folder=%time:~0,2%-%time:~3,2%-%time:~6,2%
set log_name=top_%date_folder%-%time_folder%
set log_path=MonkeyLog_%date_folder%

adb wait-for-device
echo - - - top window - - -
adb shell top -m 10 -d 1 > ./%log_path%/%log_name%.log
echo - - - Over! - - -

monkey.bat 代码:

@echo off

if "%time:~0,1%"==" " set "time=0%time:~1%"
set date_folder=%date:~0,4%-%date:~5,2%-%date:~8,2%
set time_folder=%time:~0,2%-%time:~3,2%-%time:~6,2%
set log_name=monkey_%date_folder%-%time_folder%
set log_path=MonkeyLog_%date_folder%

adb wait-for-device

echo - - - Monkey window - - -
adb shell monkey ^
-p package1 ^
-p package2 ^
--pct-touch 30 ^
--pct-motion 20 ^
--pct-trackball 20 ^
--pct-pinchzoom 10 ^
--pct-appswitch 20 ^
--ignore-crashes ^
--ignore-timeouts ^
--throttle 1000 -v -v -v 2808000 > ./%log_path%/%log_name%.log
echo - - - Over! - - -


::--ignore-crashes  
::应用程序发生任何超时错误时(如“Application Not responding”对话框),monkey继续运行
::--ignore-timeouts
::调整触摸事件的百分比,一次ACTION_DOWN,一次ACTION_UP 例如:–pct-touch 10 //百分之十为触摸事件
::--pct-touch 30 
::滑动事件,按下->移动->抬起,ACTION_DOWN ACTION_MOVE ACTION_UP
::--pct-motion 20 
::轨迹事件
::--pct-trackball 20
::双指缩放
::-–pct-pinchzoom 10
::启动Activity
::--pct-appswitch 20 
::系统按键事件,如Home、Back、Start Call、End Call及音量控制键
::-–pct-syskeys 0
::15小时:1080000(周内:晚上6点--早上9点)
::39小时:2808000(周末:周六晚上6点--周一早上9点)

monkey_stop.bat 代码:

@echo off

::方法一,直接kill进程
adb shell "kill -9 `ps -ef | grep com.android.commands.monkey | grep -v 'grep' | awk '{print $2}'`"
echo Monkey 已停止运行!!!
pause

::方法二,手动输入pid后,kill进程
::adb shell "ps -ef | grep com.android.commands.monkey | grep -v 'grep' | awk '{print $2,$8}'"
::if NOT "%ERRORLEVEL%"=="1" (
::    set /p killmonkey=请输入pid:
::    ::设置变bai量延迟
::    setlocal EnableDelayedExpansion
::    adb shell kill !killmonkey!
::    echo Monkey 已停止运行!!!
::    pause
::) else (
::    echo Monkey 不存在!
::    pause
::)

问题点:

1.关于文件名称获得的当前时间,01:00~09:00时间段,文件名乱码

  =>解决方法:if "%time:~0,1%"==" " set "time=0%time:~1%"

2.获取当前bat脚本相对路径

  =>解决方法:%~dp0

3.代码太长,换行显示

  =>解决方法:连接符 ^

4.if语句内使用set

  =>解决方法:设置变bai量延迟 setlocal EnableDelayedExpansion ,并且变量引用时使用感叹号!不使用百分号%

5.ps后不显示grep xxx

  =>解决方法:添加 grep -v 'grep'

6.筛选显示

  =>解决方法:添加 awk '{print $2,$8}'

7.结合kill

  =>解决方法:使用反单引号 kill -9 ` `

原文地址:https://www.cnblogs.com/zinthewind/p/14191423.html