移动测试基础 [转载] Android Monkey 测试策略

恒温 · 2014年03月20日 · 最后由 Stepthen 回复于 2015年10月16日 · 3653 次阅读

原帖来自 http://www.douban.com/note/257030159/

分类

Monkey 测试针对不同的对象和不同的目的,需要采用不同的测试方案。

首先测试的对象、目的及类型如下:

  • 测试的类型

    • 应用程序的稳定性测试
    • 应用程序的压力测试
  • 测试对象

    • 单一 apk
    • apk 集合
  • 测试的目的

    • 解决问题的测试 (忽略异常的测试)
    • 验收测试(不忽略异常的测试)

应用程序的稳定性测试

针对单个 apk

  • 不忽略异常

在进行单个 apk 的验收测试时,则使用单一 apk 且不忽略异常的命令执行。

例如:

monkey -p com.android.mms --throttle 1000 -s 100-v -v -v 15000 > /mnt/sdcard/monkey_test.txt &

  • 忽略异常

在进行单个 apk 的解决问题的测试时,则使用单一 apk 且忽略异常的命令执行,这样可以在一次执行的过程中发现应用程序中的多个问题。

例如:

monkey -p com.android.mms --throttle 1000 -s 100--ignore-crashes --ignore-timeouts --ignore-security-exceptions--ignore-native-crashes --monitor-native-crashes -v -v -v 15000 >/mnt/sdcard/monkey_test.txt &

针对多个 apk

  • 不忽略异常

例如:

monkey --pkg-whitelist-file /data/whitelist.txt--throttle 1000 -s 100 -v -v -v 15000 > /mnt/sdcard/monkey_test.txt &

  • 忽略异常

例如:

monkey --pkg-whitelist-file /data/whitelist.txt--throttle 1000 -s 100 --ignore-crashes --ignore-timeouts--ignore-security-exceptions --ignore-native-carshes --monitor-native-crashes-v -v -v 15000 > /mnt/sdcard/monkey_test.txt &

应用程序的压力/健壮性测试

应用程序的压力/健壮性测试,其主要是缩短 monkey 测试中事件与事件之间的延迟时间,验证在快速的事件响应的过程中,程序是否能正常运行。这种压力/健壮性测试主要是针对单一 apk 来执行;我们可以将 --throttle 的值设定为 500 或者更小,一般都使用 500 毫秒的延迟事件。

在进行 apk 的集合测试时,对于高频率使用的 apk、长时间使用的 apk 都要包含在执行的应用程序中间。

APK 分类具体:

  • 高频率使用的 apk 如:Phone、Contacts、Message、Settings、File Manager、Gallery、Input Method
  • 长时间使用的 apk 如:Phone、Browser、Music player、Camera、Video player、Email、Chat
  • 其他的 apk 如:Calendar、Notepad、Calculator、FM Radio、Google Search
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 20 条回复 时间 点赞

/data 目录下的 whitelist.txt 文件,需要自己创建吗,那文件里多个 apk 之间的分隔符应该什么

#1 楼 @syl 以换行分隔。

cmds/monkey/src/com/android/commands/monkey/Monkey.java


/**
 * Load a list of package names from a file.
 *
 * @param fileName The file name, with package names separated by new line.
 * @param list The destination list.
 * @return Returns false if any error occurs.
 */
private static boolean loadPackageListFromFile(String fileName, HashSet<String> list) {
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new FileReader(fileName));
        String s;
        while ((s = reader.readLine()) != null) {
            s = s.trim();
            if ((s.length() > 0) && (!s.startsWith("#"))) {
                list.add(s);
            }
        }
    }

执行单一 apk:

monkey –p <options> -c <options> -s <seed> <限制语句> --throttle <milliseconds> -v 执行次数> C:\monkey_test.txt

执行 apk 集合:

monkey –pkg-blacklist-file /data/blacklist.txt -c <options> -s <seed> <限制语句> --throttle <milliseconds> -v 执行次数> C:\blacklist_test.txt //执行黑名单以外的应用

monkey –pkg-whitelist-file /data/whitelist.txt -c <options> -s <seed> <限制语句> --throttle <milliseconds> -v 执行次数 > C:\whitelist_test.txt //执行白名单的应用

我其实一直很有一个疑问,就是 monkey 如何避免自己关闭 wifi 以及 usb connect。。。= =

#4 楼 @monkey 有可能会关闭的吧? 恢复出厂都可能搞到呢。

#5 楼 @lihuazhang 。。。。。所以。。这个焦虑。。。。

com.android.settings 把这个加入 blacklist

很好的帖子 我做 web 的自动化,现在自学移动方向 多谢各位指点

#3 楼 @lihuazhang 请问一下,monkey 的源码文件在哪里可以看到

#10 楼 @lihuazhang 没有看到它的源码呢

恒温 #12 · 2015年03月26日 Author

#11 楼 @tunsuy 这里面搜索啊,亲!

#12 楼 @lihuazhang 我找到了,关键还是要知道类名才能找到,谢了哈

#6 楼 @monkey 那么问题来了,这个焦虑,有解决办法不?

#14 楼 @hobbs 把一些功能对应的 activity 设置黑名单

#15 楼 @monkey monkey,我有一个问题咨询一下,如果是类似支付宝、微信这样的应用,monkey 在执行过程中退出了账号,会一直在账号登陆页面执行,不会再次进入 app 内部,如何屏蔽账号退出的操作呢?

#16 楼 @testdog 这种的话,一般可以注释掉退出的那个按钮的 listener,或者就是写歌判断,一旦退出,就执行 login

#17 楼 @monkey 你说的注释掉按钮的监听,是要在源代码修改吗?写个判断的话怎么加到 monkey 执行过程中呢?

同样遇到楼上的疑问,不修改 APP 的代码是否有办法来避免账号退出,或者有什么更好的策略?

Stepthen Android 性能测试_Monkey 实践 中提及了此贴 03月29日 23:10
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册