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

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

求问各位大神,为啥 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 条回复 时间 点赞

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

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

没用啊

刘刘刘 回复

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

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

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

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

匿名 #7 · 2018年04月28日

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

仔细看 支持截图的

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

匿名 #10 · 2018年04月28日

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

11楼 已删除
匿名 #12 · 2018年04月30日

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

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

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

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

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

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

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

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

yu 回复

Throttle 是一个完整事件的间隔. 上面是先 down 然后一系列 move 最后再 up. 类似的一个 Click 需要先 down 然后 up

匿名 #19 · 2018年05月31日

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

milliseconds
读一下源码就清楚了。

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

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

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