移动测试基础 CrashMonkey4Android

DoctorQ · 发布于 2015年06月04日 · 最后由 thanksdanny 回复于 2017年08月04日 · 2523 次阅读
本帖已被设为精华帖!

Monkey相关指令

项目

源码已挂载到github上: CrashMonkey4Android
关联项目: CrashMonkey4iOS

简介

CrashMonkey4Android,是一个依靠Cts框架,对原生Monkey进行改造后的产物,拥有以下新增功能:

  1. 保存每一步的截图
  2. 保存logcat
  3. 保存每一个Monkey事件的信息
  4. 分析Crash
  5. Html报告
  6. 开源,你想做的,你能做的,只要你行,你就可以做
  7. 支持多设备

环境要求

  1. 安装JDK1.6以上(包括1.6)并配置环境变量
  2. 安装SDK并配置环境变量

如何使用

下面以Mac环境为例

第一步

同步CrashMonkey4Androd_bin 项目来获取可执行文件,或者直接下载ZIP包,解压。

第二步

解压后,项目目录结构如下:

这里写图片描述

找到tools目录下的cts-tradefed文件,双击会出现终端窗口:

这里写图片描述

(可以看出来我们支持多设备)

第三步

在终端输入命令 : run cts --plan Monkeyreturn ,@Monkey开跑了。

这里写图片描述

第四步

参看报告,在tools的同级目录repository下有2个目录很重要

  1. logs:保存测试过程中的截图和log信息
  2. results: 保存测试报告

这里写图片描述

首先去results下打开报告,一个文件夹代表一次测试,我们刚才有2台设备,所以生成了2个报告,进入文件下找到index.html,打开:

这里写图片描述

有crash版本:

这里写图片描述
index.html为结果总结页面,上面显示了测试设备的硬件信息(Hardware),被测应用信息(Application),测试周期(Span),结果(Results)。下方有一个表格中显示了测试所花时间(Duration),Monkey的事件数(20)。点击result一览的链接进入详细报告:
无crash版本:

这里写图片描述
有crash版本
这里写图片描述

详细页面中显示了最后50步的操作截图(少于50的全部列出),截图上绘制了操作的类型,还可以点击图片查看该步操作的相关logcat信息。还包括3按钮(crash log按钮会在发生crash的时候显示),点击system log 可以看到系统log:

这里写图片描述

点击uiauto trace按钮会显示所有步骤的信息:

这里写图片描述

如果有crash log 按钮,会显示crash的简短信息,目前只是简单的从logcat分析ANR和Java Crash信息,后续会详细研究一下crash知识:

这里写图片描述

扩展功能

我们可以通过在命令行下输入run cts --help-all 获取所有的可设置参数:

test options:
    --p                  package of test app
    --a                  main activity of test app
    --v                  monkey event count Default: 20.
    --throttle           The delay time between the events Default: 300.
    --pct-tap            percentage of tap event Default: 25.0.
    --pct-motion         percentage of motion event Default: 0.0.
    --pct-nav            percentage of navigation event Default: 15.0.
    --pct-majornav       percentage of major navigation event Default: 15.0.
    --pct-syskeys        percentage of system key event Default: 15.0.
    --pct-drag           percentage of drag evnet Default: 30.0.
    --logcat-size        The max number of logcat data in bytes to capture when --logcat-on-failure is on. Should be an amount that can comfortably fit in memory. Default: 20480.
    --plan               the test plan to run.
    --[no-]reboot        Do not reboot device after running some amount of tests. Default behavior is to reboot. Default: false.
    --[no-]skip-device-info
                         flag to control whether to collect info from device. Providing this flag will speed up test execution for short test runs but will result in required data being omitted from the test report. Default: false.
    --[no-]device-unlock unlock device Default: false.
    --app-path           local app's path
    --wifiSsdk           wifi username
    --wifiPsk            wifi password
    --[no-]skip-uninstall-app
                         no uninstall test app Default: true.
    --monkey-log-size    monkey log size Default: 10485760.
    -b, --[no-]bugreport take a bugreport after each failed test. Warning: can potentially use a lot of disk space. Default: false.
    --[no-]tracefile     get trace file ,in /data/anr/trace.txt Default: false.

  'stdout' logger options:
    --log-level          minimum log level to display. Default: INFO. Valid values: [VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT]


主要关注以下属性:

  1. p :测试app的包名.
  2. a :测试app的主activity,如果正确设置上面两项,Monkey会针对上面-p指定的应用测试,一直保持在该应用界面. 注意:-a和-p两个参数要一起使用,否则不起作用
  3. throttle:2个Monkey事件之间的间隔,默认为300毫秒.
  4. pct-tap:点击事件的百分比,默认为%25.
  5. pct-motion:多点滑动事件百分比,默认为%0,(暂时还没实现).
  6. pct-nav: 导航事件的百分比(导航事件由方向输入设备的上下左右按键所触发的事件组成),默认为%15.
  7. pct-majornav:主要导航事件的百分比。(这些导航事件通常会导致UI界面中的动作事件,如5-way键盘的中间键,回退按键、菜单按键),默认为%15.
  8. pct-syskeys:系统事件百分比。(这些按键通常由系统保留使用,如Home、Back、Start Call、End Call、音量调节),默认为%15.
  9. pct-drag:拖拽事件的百分比,默认为%30.

目前只实现了5/6,但是上面的数字相加一定要为100%。

  1. reboot : 重启机器,默认为false,不重启。如果想要重启的话,直接在命令行附上该参数,不用在后面加true,因为boolen类型的设置方式和其他不一样。
  2. device-unlock:解锁手机,默认为false,如果收集重启的话,建议将该属性设置为true。解锁原理就是利用appium自带的apk来解锁的。
  3. skip-device-info:是否跳过设备信息获取,默认为false。因为我们的报告中用到了设备信息,所以建议不要将该属性设置为true。
  4. app-path:如果应用需要从本地安装,用该属性设置app路径,会自动安装app到收集端。
  5. wifiSsdk: wifi的用户名
  6. wifiPsk:wifi的密码

因为该工具支持自动连接wifi,所以你的app需要在wifi情况下工作,请设置这两个属性,它会自动检测断网并重连

  1. skip-uninstall-app:是否跳过卸载app的阶段,因为如果使用本地app安装后,有时想卸载应用,可以设置该属性为false。默认是不卸载。
  2. monkey-log-size:如果针对某一个应用测试,该工具为该app单独收集log,这里可以设置log可以最大到多少B。
  3. bugreport:是否保存bugreport信息,默认为false。如果研发想要bugreport信息,将该属性设置为true。
  4. tracefile:是否保存trace.txt文件,该文件位于/data/anr/trace.txt。一般发生crash的时候会用到该文件分析问题。

总结

目前CrashMonkey4Android还处于pre-release阶段,需要改善的地方还有很多,请大家多多提出建议。

目前我们已经推出了iOS和Android两个平台的Monkey,归并到一个组织58Automation中,
欢迎大家fuck,有问题请在github上提。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 188 条回复
118

就一定要故意@我一下么。。。

1011

#1楼 @monkey 你有了2个小伙伴

209

吊吊的!等着troubleman帮你测试吧!

909

楼上的,别众目睽睽下秀恩爱。 能支持多设备,太好了。

1011

#5楼 @beerbox 试用一下哈,欢迎吐槽

2113

牛B!!!Q你是那么的牛B!

1011

#7楼 @testly 欢迎吐槽

2113

#10楼 @doctorq 我长得丑!

1011

#11楼 @testly 已修改,感谢

1011

#13楼 @testly 继续吐槽

1011

#15楼 @lihuazhang 嗯,后续会补上

110

另外有个问题,为啥不使用 maven 管理?

1011

#17楼 @lihuazhang 我准备用gradle修改一下项目。

1011

#15楼 @lihuazhang README.md已补充内容

114

牛逼得不要不要的

110

#18楼 @doctorq gradle 国内估计用的人很痛苦啊。。

1011

#20楼 @anikikun 真心没什么

1011

#21楼 @lihuazhang 晚痛不如早痛

1544

赞,挺实用的。Github已follow.

445

win系统用户有点忧伤。

2113

mac 需要 adb path

1011

#25楼 @shijin880921 windows也可以用啊

1011

#26楼 @testly 你运行报错,Unable to locate adb?

1011

#27楼 @chenhengjie123 老醋装新瓶

2113

#29楼 @doctorq 已修复,现在还要升级jdk版本

1011

#31楼 @testly 你的是1.6?

1011

#33楼 @testly 因为我用的是1.7,哈哈,我下次用1.6编译下。

2113

#34楼 @doctorq 我滴个神啊!居然一定得1.7 连1.8都不行!!!

1011

#35楼 @testly 这么搓么?欢迎在githun上提个Issue,俺修复一下

2113

#36楼 @doctorq 公司这网速我下一个1.8下了这么久,,,,!!

1011

#37楼 @testly 别忘了在github上贴上出错信息

2113

#38楼 @doctorq 恩,我看看

2113

#38楼 @doctorq 直接放这里吧!git网站打不开!

1011

#40楼 @testly 哦了。

445

#28楼 @doctorq 找到tools目录下的cts-tradefed文件,双击会出现终端窗口: 可是我双击了让我选程序打开,我选啥。

445

#28楼 @doctorq 这不是得linux下才能执行么?

1011

#43楼 @shijin880921 我正在生成window下的bat文件,做好通知你

2207

感觉--p packgename 这个参数不准确,老是会跳到系统其他界面

1246

#45楼 @doctorq 就等windows了啊

1011

#47楼 @x746560359
#44楼 @shijin880921 已更新windows下的bat文件,重新下载可执行文件

1011

#46楼 @nickbeibei 贴一下你输入的命令行信息

445

#49楼 @doctorq 双击 bat文件出现如下错误。

1011

#51楼 @shijin880921 我的电脑是64位的,你的是32位的,你可以把源码下载下来,自己编译。看这篇文章:如何进行二次开发

2207

#49楼 @doctorq run cts --p com.xxxx.xxx --plan Monkey

1011

#53楼 @nickbeibei 需要activity名,-a指定。-a和-p这两个参数要一起使用

2207

#54楼 @doctorq 我试试,感谢

3116

谢谢分享!!

3992

“错误:找不到或无法加载主类Files.”
这个是什么问题?

1011

#57楼 @Sernity0919 去github上提供详细的信息

1419

#52楼 @doctorq @shijin880921 这个是因为jine.0.9.9.jar包版本太低,不支持win7 64位,上官网下个jline.1.0.jar就行了。链接如下:http://sourceforge.net/projects/jline/files/jline/

1246

06-11 11:59:58 I/DeviceNetWorkListener: please connect wifi : 58-guest
为什么提示我链接这个wifi?

1011

#60楼 @x746560359 啊,测试用的一个自带的一个wifi,可以修改成你自己的。在tools/config/cts.xml修改,如果不用wifi,直接注释掉

1246

直接在CTS.XML配置文件参数化。执行run cts --plan Monkey。不会打开指定APP
#61楼 @doctorq 是注释掉的,但是控制台还是提示链接,另外:
信息: Error starting command: monkey --port 12345
com.android.ddmlib.ShellCommandUnresponsiveException
at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:408)
at com.android.ddmlib.Device.executeShellCommand(Device.java:435)
at com.android.chimpchat.adb.AdbChimpDevice$1.run(AdbChimpDevice.java:104)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
这是什么?指定端口12345?

1011

#62楼 @x746560359 在github提issue,把能给的信息都给全了,我好定位问题

1011

#62楼 @x746560359 Error starting command: monkey --port 12345是ddmlib包的错误,不影响。

1011

#62楼 @x746560359 确保的-a和-p都配置了,且是主activity。才能启动,你可以先在命令行试一下,以确保可以启动。

212

二次开发 源码下载下来,解压,导入Eclipse后只有一个项目。。。

1011

#66楼 @jacky 另外一个项目也需要下载下来啊,文档里面说的很清楚啊。

212

#59楼 @woniu 替换成jline-1.0.jar 后提示 java.lang.NoClassDefFoundError: jline/ConsoleReader
Exception in thread "main" java.lang.NoClassDefFoundError: jline/ConsoleReader
at com.android.tradefed.command.Console.getReader(Console.java:186)
at com.android.tradefed.command.Console.(Console.java:198)
at com.android.cts.tradefed.command.CtsConsole.(CtsConsole.java:52
)
at com.android.cts.tradefed.command.CtsConsole.main(CtsConsole.java:249)

Caused by: java.lang.ClassNotFoundException: jline.ConsoleReader
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)

1011

#68楼 @jacky 因为不是包的问题,换回0.9.9

212

#69楼 @doctorq 不能替换吗?_^

1011

#70楼 @jacky 不能,里面的类结构变化了。

212

#71楼 @doctorq 我的电脑是window 64位,java version 64-Bit,但是出现下面错误
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Users\IQIYI\AppDat
a\Local\Temp\jline_0_9_9.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform

at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at jline.WindowsTerminal.loadLibrary(WindowsTerminal.java:215)
at jline.WindowsTerminal.initializeTerminal(WindowsTerminal.java:144)
at jline.Terminal.setupTerminal(Terminal.java:69)
at jline.Terminal.getTerminal(Terminal.java:26)
at jline.ConsoleReader.(ConsoleReader.java:151)
at jline.ConsoleReader.(ConsoleReader.java:146)
at jline.ConsoleReader.(ConsoleReader.java:135)
at com.android.tradefed.command.Console.getReader(Console.java:186)
at com.android.tradefed.command.Console.(Console.java:198)
at com.android.cts.tradefed.command.CtsConsole.(CtsConsole.java:52
)
at com.android.cts.tradefed.command.CtsConsole.main(CtsConsole.java:249)

1011

#72楼 @jacky 我在Window 64位的机器上调试过,没有问题,不过我的是thinkpad。具体问题由于没有环境无法调试,我会试着将0.9.9的jar包调用改为jline.1.0,然后会通知你试试,你暂时可以换别的机器试试。

212

#73楼 @doctorq 嗯 多谢。我的是win8 的机器。在win7 64位的机器上试了下也不行。。

1011

#74楼 @jacky 好吧。太先进了。

1419

#75楼 @doctorq @jacky 恩,确实会报NoClassDefFoundError的错,我现在也还在调试。

143

把64位的jdk换成32位的,可以运行了,不会出现这个了: Can't load IA 32-bit .dll on a AMD 64-bit platform

143

@doctorq 在运行的时候,已将monkey的进程关闭,仍然可以再次调起apk
这个需要如何操作来停止运行?

143

@doctorq index.html里面点systemlog提示报错:
截图中说的monkey Log在D:\Android\CrashMonkey4Androd_bin-master\android-cts\repository\logs\2015.06.12_10.23.57文件夹中找到了

1011

#72楼 @jacky

把64位的jdk换成32位的,可以运行了,不会出现这个了: Can't load IA 32-bit .dll on a AMD 64-bit platform

81楼 已删除
1011

#79楼 @muchild 是最新版本的么

143

@doctorq 我用的是jdk1.7.0_45

1011

#83楼 @muchild 我说你下载的CrashMonkey4Androd_bin-master是最新的么?因为一直在更新,有的bug可能最新版本已经修改了

143

@doctorq 是昨天中午下载的

1011

#85楼 @muchild 我调试下

1011

#85楼 @muchild 已更新,下载最新版的试试

143

@doctorq 最新版,点击systemlog,已显示

1011

#88楼 @muchild ok,欢迎持续关注

1163

能不能不进入控制台,我想和jenkins集成,一条命令直接跑起来,该怎么做?

1011

#90楼 @aizaimenghuangu 我就是放在jenkins下跑的,直接调用sh cts-tradefed run cts --plan Monkey

143

@doctorq 这个工具的事件是怎么定义的?就是,这里的事件数是怎么算的?这边的20,实际操作中比直接命令跑Monkey要时间久,有什么区别吗?

1011

#92楼 @muchild 好问题,这个事件数的定义是这样的,这个工具中有5中事件,Tap/drag/nav/majornav/syskeys五个事件,每个事件都是通过ddmlib向手机段发送命令,且每个事件执行前后有截图和保存日志的动作,意思每一次操作都经过3个阶段:截图-发送要执行的操作-保存log。而原生Monkey是你发送一个总命令后,手机端接受你的启动命令后,自己生成事件,然后操作界面,整个过程只和PC端通信一次,没有截图和保存log的动作,自然会快很多。

1163

#91楼 @doctorq 非常感谢,可以直接运行

1631

必须在mac上用吗?

1011

#95楼 @gaoxing200851 windows也可以

1340

使用这个工具,执行结束一次monkey后,又会自动再次的重复执行起来

1011

#98楼 @sas 这是它的定时任务,会不断循环

1340

#99楼 @doctorq 这样设计有什么目的吗,如何取消定时任务呢

1011

#100楼 @sas

  • 在cts.xml中设置loop参数为false
  • 直接关闭命令行
1340

#101楼 @doctorq 第二种方法不是很可行,因为不能确定monkey 什么时候执行结束
第一种方法,在cts.xml中查看,没有loop这个参数;自行添加后运行,一直loading configuration ‘CTS’
添加如下:
name="loop"
desc="循环执行次数"
value="false" />

1011

#102楼 @sas 检查你的写法,我用你的配置这边试了下是没问题的

1340

#103楼 @doctorq已解决,谢谢!!
另外 monkey 执行时出现一个错误提示,如图

1011

#104楼 @sas 这个是chimpchat.jar包的问题,不影响使用。

1340

#105楼 @doctorq 了解了,谢谢!

96

运行正常,有报告,只是不明白,index.html中的hardware不显示设备名会是什么原因了?

96

#46楼 @nickbeibei
遇到同样的问题,老是会跳出到系统界面.

96

@doctorq 测试会跳转到其他界面,效率有点低,重复动作太多了.期待更完善的版本的release

96

@doctorq 那个帖子删掉了,没看明白你说的这个公司是指哪个公司???自荐??

1011

#110楼 @works 什么意思

1011

#108楼 @625398988 @nickbeibei不是跳转到,而是有的monkey事件会使我们的应用退出到后台了,我做了判断,一旦检测到不在我们所测应用的界面,就会重新启动应用。

1011

#107楼 @works 贴一下报告的截图

1340

如果想测试系统的多个自带的apk,在命令中该如何指定呢?

1011

#114楼 @sas 无这样的命令

1340

#115楼 @doctorq 那这个对于os的测试有些局限性,后续是否考虑可以增加?

1011

#116楼 @sas os的monkey测试的测试关注点是单一应用还是系统本身?还是按特定应用来检测?你要一次行测多个APK的目的是什么?

3657

出一个windows的操作文档吧,观望中!

1340

#117楼 @doctorq 系统本身的所有应用;比如要安排一个版本的monkey测试,需要把手机中所有的应用都安排下去,如果每一台机器只测试一个apk,效率太低,所有的apk测试下来耗时太长。如果一个机器测试多个apk,效率可以提高不少;另外可以把有关联性或依赖性的apk 放到一个组进行测试

1011

#120楼 @sas 秒懂!等有空的时候,我试着支持一下这个功能

96

@doctorq 目前实际应用中,发现重复事件太多.有时候呆在一个界面很长时间没有动静.感觉效率有点低,期待更有效的版本.

96

@doctorq 另,我想把测试过程中打印出来的log映射到我自己的textView中去,但是没有找到在哪里打印的log.望指点....

1340

#112楼 @doctorq “一旦检测到不在我们所测应用的界面,就会重新启动应用。”
-----这个重新启动应用的操作后,是重新再执行一遍monkey命令吗?和应用退出到后台前执行的monkey事件一致吗?

1011

#125楼 @sas 没关系,只是调用startActivity,启动应用。monkey还是跑他自己的

2093

run cts --plan Monkey --p packagename --a activityname

440

@doctorq 哪个参数可以指定 monkey事件的数量, 默认为20, 觉得有点少

440

#129楼 @doctorq 看到了, 眼神不给力....谢谢了.. 以为是老monkey 日志等级了....

1105

@doctorq
运行命令为sh cts-tradefed run cts --plan Monkey -p com.yek.lafaso --throttle 50 -v 20000,但是会报如下错误:

sh cts-tradefed run cts --plan Monkey -p com.yek.lafaso --throttle 50 -v 20000
Android CTS 4.4_r0
Using commandline arguments as starting command: [run, cts, --plan, Monkey, -p, com.yek.lafaso, --throttle, 50, -v, 20000]
09-26 00:55:27 I/ConfigurationFactory: Loading configuration 'cts'
09-26 00:55:27 I/DeviceStateMonitor: Waiting 30000 ms for device 810EBLS2736K shell to be responsive
09-26 00:55:27 I/ManagedDeviceListener: Device connected 810EBLS2736K
09-26 00:55:27 I/DeviceManager: Detected new device 810EBLS2736K
09-26 00:55:27 I/CommandScheduler: Scheduling 'cts' on '810EBLS2736K'
09-26 00:55:27 I/DeviceManager: Allocated device 810EBLS2736K
09-26 00:55:27 I/TestInvocation: setup: true tearDown: true
09-26 00:55:27 I/TestInvocation: Starting invocation for 'cts' on build '4.4_r0' on device 810EBLS2736K
09-26 00:55:27 I/MonkeyTest: Monkey Test for device 810EBLS2736K
09-26 00:55:29 I/RemoteAndroidTest: Running am instrument -w -r  android.tests.devicesetup/android.tests.getinfo.DeviceInfoInstrument on 810EBLS2736K
cts-tf > 九月 26, 2015 12:55:43 上午 com.android.chimpchat.ChimpManager sendMonkeyEventAndGetResponse
信息: Monkey Command: wake.
九月 26, 2015 12:55:43 上午 com.android.chimpchat.ChimpManager sendMonkeyEventAndGetResponse
信息: Monkey Command: getvar display.width.
九月 26, 2015 12:55:43 上午 com.android.chimpchat.ChimpManager sendMonkeyEventAndGetResponse
信息: Monkey Command: quit.
09-26 00:55:43 W/TestInvocation: Unexpected exception when running invocation: java.lang.NumberFormatException: null
cts-tf > 九月 26, 2015 12:55:43 上午 com.android.chimpchat.ChimpManager sendMonkeyEventAndGetResponse
信息: Monkey Command: quit.
09-26 00:55:43 E/InvocationThread: null
java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Integer.java:542)
    at java.lang.Integer.parseInt(Integer.java:615)
    at com.android.cts.tradefed.testtype.monkey.Monkey.init(Monkey.java:57)
    at com.android.cts.tradefed.testtype.monkey.Monkey.<init>(Monkey.java:29)
    at com.android.cts.tradefed.testtype.MonkeyTest.run(MonkeyTest.java:148)
    at com.android.tradefed.invoker.TestInvocation.runTests(TestInvocation.java:590)
    at com.android.tradefed.invoker.TestInvocation.prepareAndRun(TestInvocation.java:400)
    at com.android.tradefed.invoker.TestInvocation.performInvocation(TestInvocation.java:332)
    at com.android.tradefed.invoker.TestInvocation.invoke(TestInvocation.java:133)
    at com.android.tradefed.command.CommandScheduler$InvocationThread.run(CommandScheduler.java:362)

09-26 00:55:43 I/InvocationThread: Updating command 'cts --plan Monkey -p com.yek.lafaso --throttle 50 -v 20000 -s 810EBLS2736K' with elapsed time 15786 ms
cts-tf > 

1011

#131楼 @app_testing 获取手机的屏幕高和宽失败了,以后我看看能不能换一种方式获取。这个问题有几个人报给我了

5466

Andriod版的在使用中,App停止或者闪退,但是从来没有没有看到这HTML报告,不知道为什么,应该是什么Bug

440

支持白名单和黑名单吗?

1011

#134楼 @xxliud 不支持

1011

#133楼 @jeffleung 可以描述一下具体情况么,在什么时候停止,或者闪退?

96

@doctorq 我把源码中的MonkeyReporter.java下的mDir字段改成固定的字符串,将原来的时间命名文件夹换成固定的,再导出两个jar包替换原来的jar包,运行后为何没起作用呢?

1011

#137楼 @miaocunsheng 在哪里更改的,构造方法里面会重新赋值,如果你想改,在下面代码中mDir = TimeUtil.getResultTimestamp();地方改,两个jar包是啥意思,只需要替换cts-tradefed.jar就可以。

public MonkeyReporter(File xmlFile, File saveFile, File logDir) {
        this.mXmlFile = xmlFile;

        if (!saveFile.exists()) {
            throw new NullPointerException(String.format(
                    "report path :%s not exists", saveFile.getAbsolutePath()));
        }
        mDir = TimeUtil.getResultTimestamp();
        mLogDir = logDir;
        mSaveFile = new File(saveFile, mDir);
        mSaveFile.mkdir();
        if (mXmlFile == null || !mXmlFile.exists())
            return;
        // 初始化
        init();
    }
96

#138楼 @doctorq
我是想和Jenkins集成,想将生成的结果放在一个固定的文件夹下,构建后邮件发送这个文件夹下的报告。
于是将mDir = TimeUtil.getResultTimestamp改为mDir="testdir";

保存导出Jar包进行替换,运行后,发现目录还是时间命名

1011

#139楼 @miaocunsheng 截下图,看下报告生成的位置,我专门设置了report-path参数来将报告移动到某个webservice下的路径,因为我们也是放在jenkins下去做的,最后放到公共站点下,你可以试试这个参数

96

#140楼 @doctorq
好的, 我详细找下代码里的字段。thanks for your attention,haha
目前我的报告依然生成在\android-cts\repository\results\2015.11.22_13.53.27 这个目录下。
另外我还想请教下:
如果我只将index.Html文件附到邮件下,那对应的其他跳转页面以及资源(图片、result.html)路径是否也需要做调整呢?还是说只要整个结果文件夹放在适当位置就好?

683

@doctorq Hi, 想請問一下, 參數 --wifiSsdk 是否為 wifi ssid 而非屬性表內的 wifi user name?
查看了一下原代碼, 好像只有 ssid & password

Thanks,
Charles

1011

#142楼 @charlesh21 我解释成wifi user name是怕大家不理解ssid代表的意思,其实wifissdk就是ssid。

683

#143楼 @doctorq 了解, 因為一開始我設定了連接wifi 的帳號與密碼, 但無法重新連接, 同時也好奇 如果多個 wifi ap 會連哪一個, 查原代碼後才試成功, 感謝回覆

96

@doctorq 你好,代码中【 mWSRPATH】这个参数的实际值 是在哪里配置的呢?
private void generateMonkeyReslutTxt(MonkeyReporter reporter) {
if (mWSRPATH == null || mMonkeyResultPath == null) {
return;
}
File monkeyResult = new File(mMonkeyResultPath);
String url = mWSRPATH + File.separator + reporter.getmDir()
+ File.separator + "index.html";
try {
if (!monkeyResult.exists()) {
monkeyResult.createNewFile();
}
FileUtil.writeToFile(mDeviceSerial + "," + url + "\n", monkeyResult);
.....
}
}

1011

#145楼 @miaocunsheng 这是为了在jenkins集成的时候把报告保存到公共站点的目录下,可以外部访问用的。外部传参设置

96

#146楼 @doctorq 你好,我这边也想实现这个效果,我在本地搭建了一个内网站点,但是在代码上没看明白如何确定到我的站点目录

1011

#147楼 @miaocunsheng 下载源码了么?可以源码中下图的代码,就明白了

149楼 已删除
150楼 已删除
96

@doctorq
我想问下,Jenkins在执行bat脚本时,设备已识别,但是无法执行,是怎么回事?
12-13 17:35:39 W/DeviceManager: Fastboot is not available.
Android CTS 4.4_r0
Non-interactive mode: Running initial command then exiting.
Using commandline arguments as starting command: [run, cts, --plan, Monkey]
12-13 17:35:39 I/ConfigurationFactory: Loading configuration 'cts'
12-13 17:35:39 I/DeviceStateMonitor: Waiting 30000 ms for device YT910D90AU shell to be responsive
12-13 17:35:39 I/ManagedDeviceListener: Device connected YT910D90AU
12-13 17:35:39 I/DeviceManager: Detected new device YT910D90AU
12-13 17:35:40 I/CommandScheduler: Scheduling 'cts' on 'AndroidDevice'
12-13 17:35:41 I/CommandScheduler: Waiting for invocation threads to complete
12-13 17:35:41 I/LogRegistry: Saved log to C:\Windows\TEMP\tradefed_global_log_6242512099387051107.txt
12-13 17:35:41 I/CommandScheduler: All done
请按任意键继续. . .
12-13 17:35:41 W/DeviceManager: Fastboot is not available.
Android CTS 4.4_r0
Non-interactive mode: Running initial command then exiting.
Using commandline arguments as starting command: [run, cts, --plan, Monkey]
12-13 17:35:41 I/ConfigurationFactory: Loading configuration 'cts'
12-13 17:35:41 I/DeviceStateMonitor: Waiting 30000 ms for device YT910D90AU shell to be responsive
12-13 17:35:42 I/DeviceManager: Detected new device YT910D90AU
12-13 17:35:42 I/ManagedDeviceListener: Device connected YT910D90AU
12-13 17:35:42 I/CommandScheduler: Scheduling 'cts' on 'AndroidDevice'
12-13 17:35:43 I/CommandScheduler: Waiting for invocation threads to complete
12-13 17:35:43 I/LogRegistry: Saved log to C:\Windows\TEMP\tradefed_global_log_4300395381232860371.txt
12-13 17:35:43 I/CommandScheduler: All done
请按任意键继续. . .
[workspace] $ cmd /c call C:\Windows\TEMP\hudson2657637810539007819.bat

743

神器,感谢分享~

4221

@doctorq 请教下,下面这种报错是什么情况呢?
十二月 29, 2015 2:30:26 下午 com.android.chimpchat.adb.AdbChimpDevice$2 step
信息: Monkey Command: tap 481 951.
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source)
at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.BufferedWriter.flushBuffer(Unknown Source)
at java.io.BufferedWriter.flush(Unknown Source)
at com.android.chimpchat.ChimpManager.sendMonkeyEventAndGetResponse(ChimpManager.java:187)
at com.android.chimpchat.ChimpManager.sendMonkeyEvent(ChimpManager.java:235)
at com.android.chimpchat.ChimpManager.tap(ChimpManager.java:330)
at com.android.cts.tradefed.testtype.monkey.MonkeyTapEvent.fireEvent(MonkeyTapEvent.java:34)
at com.android.cts.tradefed.testtype.monkey.Monkey.nextRandomEvent(Monkey.java:41)
at com.android.cts.tradefed.testtype.MonkeyTest.run(MonkeyTest.java:152)
at com.android.tradefed.invoker.TestInvocation.runTests(TestInvocation.java:590)
at com.android.tradefed.invoker.TestInvocation.prepareAndRun(TestInvocation.java:400)
at com.android.tradefed.invoker.TestInvocation.performInvocation(TestInvocation.java:332)
at com.android.tradefed.invoker.TestInvocation.invoke(TestInvocation.java:133)
at com.android.tradefed.command.CommandScheduler$InvocationThread.run(CommandScheduler.java:362)

96

这里使用Monkey 自动生成测试步骤, 可以自定义测试脚本吗?

1011

#154楼 @justin001 Monkey没有测试脚本一说,测试步骤只是为了定位问题的时候找到一段时间的操作

96

测试流程全部都是坐标, 我想改成通过坐标去去解析pageSources的xml 文件进一步确定元素这样在流程看上去更清晰写。

96

还有, 我下载了相关的源码,有没有对项目的说明,二次开发,前提需要看懂你的思路。有没有相关的说明文档。

96

#158楼 @doctorq 嗯,是的, 你只介绍了 如果我去运行它 使用它, 我想问的是有没有整个项目构架的介绍。或者是实现的主线思路。

1011

#159楼 @justin001 自己看源码,想看实现思路,看cts框架。cts框架不知道,在社区搜cts。如果还像端到你手上,给你个连接:cts

96

#160楼 @doctorq 哈哈, 刚开始接触 谅解,谅解。 好的。 方便留个email 吗? 有问题直接email 你。

96

#run cts --p xxxxxx --v 10000 --throttle 1000 --plan Monkey 成功执行了,但是一会儿就触发了Home键事件,跑出app界面,没有能自动切回来 貌似没有判断?

96


打开后这样,请指教

96

#162楼 @devilsroar 同遇到该问题,跑出app界面后,没有切回来。 @doctorq 这种情况怎么解决呀 ?

96

#34楼 @doctorq 我的就是1.7的但是还是不能用

96

@doctorq 请问获取手机高宽失败的问题有解决吗?
Monkey Command: getvar display.width.
com.android.chimpchat.ChimpManager sendMonkeyEventAndGetResponse
Monkey Command: quit.
W/TestInvocation: Unexpected exception when running invocation: java.lang.NumberFormatException: null

96

#29楼 @doctorq Mac有报这个错误,求解

7310

@doctorq 为什么跑一会 就停了 信息: Monkey Command: quit.
07-25 14:35:29 I/MonkeyActivityListener: MonkeyActivityListener stop.....

10704 luyuan [该话题已被删除] 中提及了此贴 08月03日 10:28
96

#45楼 @doctorq 我的是win10 64bit,报错。
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Windows\Temp\jline_0_9_9.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform

96

@DoctorQ 🙏 能在ReadMe里写些命令示例吗,如:--p --a的使用方法
总报ConfigurationException: Could not find class

96

@DoctorQ 请问可以指定某台设备跑吗?目前的情况是连接电脑的几台设备都在跑

1011

#172楼 @raythan 可以,设备管理用的是CTS,你可以查查CTS中如何指定设备

96

@DoctorQ 发现--serial无效,但--exclude-serial有效😂

96

@DoctorQ 另外截图可以只保存最后10张么?

1011

#175楼 @raythan 图片只展示最后50张,但是基本所有的截图都保存的

96

@DoctorQ 最后只拷贝50张到PC么?

96

@DoctorQ 如果-v参数很大比较难跑,本身就跑得比原来的monkey慢很多

1011

#178楼 @raythan 比原生monkey多了截取图片,保存log的动作,所以会慢很多,所有的图片都在pc上,只是最后50张会被绘制轨迹并展现在报告上

180楼 已删除
96

#131楼 @app_testing 获取手机的屏幕高和宽失败了,以后我看看能不能换一种方式获取。这个问题有几个人报给我了
@DoctorQ 这个问题还会出现

7574

@DoctorQ
易寒,这个工具设计想法不错,今天试用了一下你的CrashMonkey,其中,遇到问题,

看此错误的原因,是由于检测到不在当前测试app下的activity下,尝试重启app的时候,monkey comand quit,导致生成报告出错!

798276

@DoctorQ https://github.com/baozhida/CrashMonkey4Android_bin 原版基础上改造了一下,支持java 64位,并且把不用的系统 key事件去掉了,只保留了 back

执行完一次,生报告之后,等待下次执行的时间比较久,还没仔细看怎么控制的

91335c
798276utopia 回复

默认的50次生成报告,怎么修改。想要执行一次,生成一个报告

1011
798276utopia 回复

😍

6504

博士,打算加入性能监控的功能吗?

1011
6504lose 回复

不打算

6272

Doctor,总结最后一句是把fork拼错了吧😂

1011
6272snowmaster 回复

故意的

3165

你好啊,我在运行的时候出现了说无法定位

thankdanny:~ thanksdanny$ /Users/thanksdanny/Documents/test\ tools/CrashMonkey4Androd_bin/android-cts/tools/cts-tradefed ; exit;
usage: dirname path
Unable to locate /../../android-cts/tools/chimpchat-22.2.0.jar
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

是我存放的路径有问题么

1011
3165thanksdanny 回复

命令是啥?/Users/thanksdanny/Documents/test\ tools/CrashMonkey4Androd_bin/android-cts/tools/cts-tradefed

3165

我是根据步骤来,同步CrashMonkey4Androd_bin 项目来获取可执行文件,或者直接下载ZIP包,解压。然后双击cts-tradefed文件就出那些命令了

3165
1011DoctorQ 回复

看到报错说无法定位到那个jar包,但我看了下路径好像也是没错的…

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