新手区 关于 monkey 的--throttle 参数

匿名 · 2018年04月28日 · 最后由 白糖 回复于 2019年02月13日 · 3040 次阅读

求问各位大神,为啥 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 完全不管用
网上查过各种资料都试过,求各路大神帮帮忙

共收到 20 条回复 时间 点赞

找了一圈,终于找到原因了,回来挖一下老帖帮一下后来人。

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
读一下源码就清楚了。

匿名 #19 · 2018年05月31日

情况不像是你想说的,按照描述这个间隔单位是秒,但是情况完全不是这样的,跟 1000 不会等 1000s 后再做下一个动作

yu 回复

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 个事件,有兴趣的话可以自己统计一下求个平均,所以不能用间隔乘以时间数来计算时间

匿名 #16 · 2018年05月04日
江城子 回复

需要同一个进程吗?我可以在两个不同的进程(不是 android 的进程,是 python 的进程)中用这招吗?

杀掉 monkey 进程就可以啊。
另外还有一个更简单的办法,就是把你的 monkey 命令再下一次,只是最后的实践数量改成 1,即发一个事件就结束,超级万能。

匿名 #14 · 2018年05月02日
江城子 回复

有什么办法可以终止掉?我在网上找过很多方法都不奏效,只能强行关机

我们之前都没太 care 这个,都是写的非常大,然后另外写一个时间统计的方法,比如执行 8 小时,则在执行到八小时的时候把之前下发的 monkey 终止掉。

匿名 #12 · 2018年04月30日

我不是小米,我是华为😰 我用其他机型试过了

11楼 已删除
匿名 #10 · 2018年04月28日

按理来说至少要 10s 吧,但是经过测试发现 3s 就结束了

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 毫秒,所以很快就结束了

仔细看 支持截图的

匿名 #7 · 2018年04月28日

兄弟?这个好像和本楼无关?我需要一个截图功能,那边的工具好像无法支持?

匿名 #5 · 2018年04月28日
江城子 回复

这个--throttle 不是每 x 毫秒进行一次操作吗?既然如此 “ --throttle 500 -v-v-v 5000” 不就要 2500s 才会结束吗?

改成--throttle 5000,你看看效果。

刘刘刘 回复

把你最后的 5000 改成 5000000,一共就下发 5000 个事件 可不几分钟就完了

匿名 #2 · 2018年04月28日
刘刘刘 回复

没用啊

adb -s {} shell monkey --ignore-timeouts --ignore-crashes --kill-process-after-error \
--pct-touch 35 --pct-syskeys 30 --throttle 500 -v-v-v 5000

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册