AndroidDev 板


LINE

网页版: http://www.javaworld.com.tw/jute/post/view?bid=26&id=299312&sty=1 最近在开发时需测试一些 component 的运作, 并不是测试 UI 会不会被按挂, 也不是要测某个逻辑单元有没有写好。 所以,test monkey 与 unit test 都不是那麽合适的工具。 这种时候就得『突发奇想』,设法完成大量的测试, 以增加在真实的使用流程里将 App 弄死的机会。 以 player component 来说,我们会提供一些 url 让 component 去试播, 这样的 component 单纯就只需要建立 player instance 再指定 SurfaceView。 最初的 demo activity 会在 onCreate 时, 直接 hardcode 一个 url,它一起来就播放了。 若是我们要给它不定数量的 url 似乎又得重编跟指定,或是放个 playlist。 但怎麽想,这都跟最原始单纯的 demokit 的用途有所差距。 我们应该想另一个办法,App 按装上去後, 我们能下指令使它开始播放指令的 url。 只要能做到透过指令在外部控制 App 一切都会方便许多。 那麽有那些方案呢? *. 埋个 tcp server 收 command (实在太麻烦了) *. 弄个 text view 还有 button 给 monkey script 输入 (似乎又给自己找了更多的麻烦) *. 弄另一个 App 发 intent 给 demo-kit (那还不是要重编程式,又回到如何由外部控制的问题了。鬼打墙) 虽然想过了许多方案,不过想想最後一个点子其实还不错, 在模糊的印象中 Android 有个 am 指令能在 adb shell 下启动 App。 而启动 App 其实就是向某个对象发送 intent 的行为, 因此推测它也可能有 broadcast intent 的能力。 直接进 adb shell 查询 am 的使用说明: qty:~ qrtt1$ adb shell $ am usage: am [subcommand] [options] start an Activity: am start [-D] [-W] <INTENT> -D: enable debugging -W: wait for launch to complete start a Service: am startservice <INTENT> send a broadcast Intent: am broadcast <INTENT> start an Instrumentation: am instrument [flags] <COMPONENT> -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT) -e <NAME> <VALUE>: set argument <NAME> to <VALUE> -p <FILE>: write profiling data to <FILE> -w: wait for instrumentation to finish before returning start profiling: am profile <PROCESS> start <FILE> stop profiling: am profile <PROCESS> stop start monitoring: am monitor [--gdb <port>] --gdb: start gdbserv on the given port at crash/ANR <INTENT> specifications include these flags: [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>] [-c <CATEGORY> [-c <CATEGORY>] ...] [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...] [--esn <EXTRA_KEY> ...] [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...] [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...] [-n <COMPONENT>] [-f <FLAGS>] [--grant-read-uri-permission] [--grant-write-uri-permission] [--debug-log-resolution] [--activity-brought-to-front] [--activity-clear-top] [--activity-clear-when-task-reset] [--activity-exclude-from-recents] [--activity-launched-from-history] [--activity-multiple-task] [--activity-no-animation] [--activity-no-history] [--activity-no-user-action] [--activity-previous-is-top] [--activity-reorder-to-front] [--activity-reset-task-if-needed] [--activity-single-top] [--receiver-registered-only] [--receiver-replace-pending] [<URI>] 果真发现了好东西: send a broadcast Intent: am broadcast <INTENT> 有了这些讯息,那就直接在 onCreate 时, 除了 demokit 原本的动作之外,再多注册个 broadcast receiver: receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); if(bundle != null && bundle.containsKey("u")) { player.openMedia(bundle.getString("u")); } } }; /* 记得要 unregister 它呦 */ registerReceiver(receiver, new IntentFilter("demokit.stub")); 这麽做,在平时的时候 demokit 的行为都一样,开了就播。 而透过 broadcast receiver 我们得到重新指定播放内容的功能: $ am broadcast -a demokit.stub -e u rtsp://streaming.o2active.cz/o2tvinfo_med Broadcasting: Intent { act=demokit.stub (has extras) } Broadcast completed: result=0 使用 -a 指定 action name,并加上 -e 指定参数 key 为 u 空一个填上 value。 後续再配合 python 动态产生 adb command 并分折程式 log 协助产生大量测试的结果。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.49.56 ※ 编辑: qrtt1 来自: 61.231.49.56 (08/01 21:10) ※ 编辑: qrtt1 来自: 61.231.49.56 (08/01 21:13)
1F:推 nvidia:赞 08/01 23:10
2F:推 ajujgrua:+1 08/01 23:34
3F:推 diousk:好物! 08/02 00:46
4F:推 tomap41017:+1 08/03 00:13
5F:推 milochen:+1 08/03 18:42







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP