求问各位大神,为啥 monkey 的--throttle 参数不起作用?
adb shell monkey -p package --pct-syskeys 0 --pct-appswitch 0 --pct-anyevent 0 -s 61930 -v-v-v --throttle 1000 10
如上图,无论 throttle 后面的数字是多少,这边的时间都是操作都是很快结束,throttle 完全不管用
网上查过各种资料都试过,求各路大神帮帮忙
找了一圈,终于找到原因了,回来挖一下老帖帮一下后来人。
throttle 定义的是事件 (Event) 之间的时间间隔,但 monkey 指令中的 count 指的是迭代操作 (iterations) 的总数,见 monkey 源码的 Monkey.java 注释。
如下方 stackoverflow 帖子所说,如果设置--pct-touch 100,参照日志可以明显看到,一次点击事件,由一次 DOWN 和一次 UP 组成,为两次操作,事件数是操作数 count/2,如果是 trackball 之类的事件,操作就更多一些。
https://stackoverflow.com/questions/45415579/correct-usage-of-the-throttle-parameter-of-monkey
milliseconds
读一下源码就清楚了。
情况不像是你想说的,按照描述这个间隔单位是秒,但是情况完全不是这样的,跟 1000 不会等 1000s 后再做下一个动作
Throttle 是一个完整事件的间隔. 上面是先 down 然后一系列 move 最后再 up. 类似的一个 Click 需要先 down 然后 up
这个研究过,money 的 throttle 不是每个事件的事件间隔,
:Sending Touch (ACTION_DOWN): 0:(410.0,318.0)
:Sending Touch (ACTION_MOVE): 0:(412.8423,316.00107)
:Sending Touch (ACTION_MOVE): 0:(422.10056,303.9841)
:Sending Touch (ACTION_UP): 0:(427.50558,290.88345)
Sleeping for 200 milliseconds
:Sending Touch (ACTION_DOWN): 0:(167.0,837.0)
:Sending Touch (ACTION_MOVE): 0:(166.56505,842.3712)
:Sending Touch (ACTION_MOVE): 0:(164.79941,853.8922)
:Sending Touch (ACTION_MOVE): 0:(163.6183,866.9585)
:Sending Touch (ACTION_MOVE): 0:(161.69794,875.4406)
:Sending Touch (ACTION_MOVE): 0:(161.64034,888.2781)
:Sending Touch (ACTION_UP): 0:(160.37444,889.48865)
Sleeping for 200 milliseconds
:Sending Touch (ACTION_DOWN): 0:(986.0,1095.0)
:Sending Touch (ACTION_UP): 0:(992.8296,1091.5313)
Sleeping for 200 milliseconds
:Sending Touch (ACTION_DOWN): 0:(948.0,430.0)
:Sending Touch (ACTION_MOVE): 0:(932.42474,424.36377)
:Sending Touch (ACTION_MOVE): 0:(927.90173,414.6834)
:Sending Touch (ACTION_MOVE): 0:(921.5671,409.0014)
:Sending Touch (ACTION_MOVE): 0:(911.44,398.39398)
:Sending Touch (ACTION_UP): 0:(910.3728,385.3957)
Sleeping for 200 milliseconds
是执行了 好几个事件才 sleep 了 200 这个间隔差不多得在 5 个事件,有兴趣的话可以自己统计一下求个平均,所以不能用间隔乘以时间数来计算时间
杀掉 monkey 进程就可以啊。
另外还有一个更简单的办法,就是把你的 monkey 命令再下一次,只是最后的实践数量改成 1,即发一个事件就结束,超级万能。
我们之前都没太 care 这个,都是写的非常大,然后另外写一个时间统计的方法,比如执行 8 小时,则在执行到八小时的时候把之前下发的 monkey 终止掉。
我不是小米,我是华为 我用其他机型试过了
adb shell monkey -p package --pct-syskeys 0 --pct-appswitch 0 --pct-anyevent 0 -s 61930 -v-v-v --throttle 1000 10
上面这条命令 只做了 10 个 event,每个 event 间隔 1000 毫秒,所以很快就结束了
仔细看 支持截图的
这个--throttle 不是每 x 毫秒进行一次操作吗?既然如此 “ --throttle 500 -v-v-v 5000” 不就要 2500s 才会结束吗?
改成--throttle 5000,你看看效果。
adb -s {} shell monkey --ignore-timeouts --ignore-crashes --kill-process-after-error \
--pct-touch 35 --pct-syskeys 30 --throttle 500 -v-v-v 5000